IPv6 accounting RADIUS SQL schema?

Michael Ducharme mducharme at gmail.com
Sun Aug 19 07:21:19 CEST 2018


Hi,

On 8/18/2018 8:37 PM, Nathan Ward wrote:
> Additionally, it is common that WAN side addresses are not assigned at all - and only DHCPv6 IA-PD is assigned - and there may even be multiple IA-PD assigned.
Yes, I am aware - we do not assign WAN side addresses. An unfortunate 
side effect of this is that *many* consumer routers will then not 
function - quite a few consumer routers ask for address and prefix, and 
if offered a prefix with no address, will refuse it instead of correctly 
accepting the prefix. Once our NAS vendor adds proper RADIUS accounting 
support for IPv6, we might assign WAN-side addresses for that reason only.

We are only starting to provide managed residential gateways to our 
customers - our network has been historically BYOR 
(bring-your-own-router), and we even have some customers who have no 
computer and no router, only an xbox plugged into their modem configured 
with the PPPoE credentials. At the moment, the way our network is 
configured, those xbox customers are out of luck for IPv6, since the 
xbox is unlikely to request a prefix via DHCPv6-PD. Given our 
environment, as long as we have decent RADIUS accounting, we are likely 
to enable both SLAAC framed-prefix and DHCPv6 address provisioning, if 
only to provide working IPv6 connectivity to as many customers as 
possible, given the plethora of different ways they can connect.

> I think the short story is that a RADIUS “session” can have 0+ IPv6 addresses/prefixes. This is I suppose similar to IPv4, if you use Framed-Route to give customers additional addresses - these can exist in Accounting-Request messages.
The big difference with Framed-Route in IPv4 is there is not generally a 
mechanism for customers to be automatically assigned their own prefix 
with IPv4 -- at least I have never heard of a means to do so. The only 
way that the customer is going to get an IPv4 prefix is if the attribute 
is provided via RADIUS in the Access-Accept packet, and in that event, 
you don't necessarily need the accounting to know that the customer has 
that prefix (since somewhere else in the same RADIUS database there is 
the attribute that provided it in the first place). This is different 
with IPv6, where the customer can get a Delegated-IPv6-Prefix and/or 
Framed-IPv6-Prefix by automatic means without that prefix having been 
originally assigned via RADIUS, and having the accounting record is 
therefore more crucial.
>
> I don’t know if this is something that FreeRADIUS should attempt to solve in a generic way, or if there should perhaps be some examples and have it left up to the operator. If it is solved in a generic way, how would that be done?
> - Additional tables for prefix assignments?
> - ARRAY support in SQL? (Not in MySQL, but is in other SQL DBs)
> - JSON or some other serialisation of an array in to text?
> - ARRAY for most DBs, JSON blob for others?

I considered the idea of another table, because it is tempting to have 
the idea of a structure that represents IPv6 addresses that the customer 
has in a single place, but that increases complexity in its own way. If 
you did have a second table, however, it would be even more tempting to 
have it store all other attributes that aren't recorded elsewhere, with 
fields for radacctid (to associate it with the correct accounting 
record), attribute name, and attribute value. It's always a weakness of 
the DB-field-per-attribute SQL approach that you aren't recording all 
accounting fields in the database, and the separate table would provide 
that - the database could record every value that the NAS provides. 
Alternatively as you suggest, you could have a JSON blob that records 
the remaining attributes. I don't personally like the idea of using a 
type like ARRAY that MySQL doesn't support, especially since it is 
probably the case that most FreeRADIUS SQL implementations out there are 
using MySQL.

However, I don't think it is necessarily a technical problem to have 
three different fields to store the IPv6 address and searching across 
three fields. The biggest risk is going to be lack of understanding of 
what the fields are for, where developers who create billing systems or 
web interfaces that offer some kind of address search function may only 
program it to search one of the three fields, not understanding the 
purpose of the different fields. I expect that a developer extending 
their billing system or web interface to IPv6, not having an 
understanding of some of the technicalities, would think that search of 
a "framedipv6address" field was sufficient and not bother to search the 
"framedipv6prefix" and "delegatedipv6prefix" fields, and that would end 
up creating issues for end users.

Michael


More information about the Freeradius-Users mailing list