Les attributs RADIUS de l'IPv6
L'article de l'IPv6 appliqué au BNG (première partie, deuxième partie) a porté sur les mécanismes d'adressage du CPE côté WAN et côté LAN. Très souvent, les paramètres véhiculés par ces mécanismes proviennent d'un serveur RADIUS requêté par le BNG à l'établissement de la session du subscriber. Aussi, cet article se concentre sur les principaux attributs RADIUS de l'IPv6, contextualisés dans les séquences classiques d'établissement de session.
Cycle de vie d'une session
Pour rappel, le TR-146 du Broadband Forum définit la notion de « session » ainsi :
A Session is a logical construct intended to represent a
network connectivity service instance at a network node.
Et décrit par la suite les étapes du cycle de vie d'une session :
— Subscriber Session creation and triggering (see section 5.6)
— The application and change of Subscriber Session profiles, including
authentication, authorization, accounting, monitoring and Grouping
— Subscriber Session termination (see section 5.7)
Deux mot-clés nous intéressent particulièrement ici : le déclenchement (triggering) de la session et son authentification. Car c'est durant ces étapes que le BNG réagit et requête le RADIUS afin de récupérer les attributs desquels dérivent les paramètres des mécanismes d'adressage.
Les déclencheurs d'une session
Le « déclencheur » d'une session peut se définir comme l'évènement auquel réagit le BNG pour instancier ladite session—et par la suite requêter le RADIUS pour l'authentification. Cet évènement correspond généralement à la réception d'un message du control plane, comme :
R-05 The IP Edge MUST support IPv4 IP Session initiation triggered by the reception of a
unique Subscriber originated DHCPv4 DHCPDISCOVER message (RFC 2131 [16]).
R-06 The IP Edge MUST support IPv6 IP Session initiation triggered by the reception of a
unique Subscriber originated DHCPv6 SOLICIT message (RFC 3315 [20]).
R-07 The IP Edge MUST support IPv6 IP Session initiation triggered by the reception of a
unique Subscriber originated RS message (RFC 4861 [23]) that specify the Subscriber
line ID.
Sans oublier PPP bien sûr :
The mechanisms for detecting PPP sessions are well known
and described in TR-092 [3]and in TR-101 [4].
Il s'agit là des quatre déclencheurs que nous illustrons dans la suite avec des diagrammes de séquence.
Pour rappel, l'article précédent a justement illustré, avec des captures, les messages DHCPv6 et le message RS
(SLAAC), tant sur IPoE que PPP.
RS
:
il s'agit un discriminant permettant d'identifier le subscriber en vue de l'authentifier.
Cet ID prend comme valeur des informations extraites du paquet (ou de la trame)—le document en donnant une liste détaillée au R-43
—comme l'adresse MAC :
« In some cases the packet’s source MAC address may be a useful identifier. »
Enfin, le document nous dit également que la réception d'un message du data plane peut entrainer l'instantiation d'une session :
The Subscriber Session can be triggered by a data plane event
Je ne l'ai jamais vu en pratique. Cela signifierait que, par exemple, à la réception d'un paquet IP de données du client (donc le client aurait déjà une conf IP ?) la session serait instanciée sur le BNG. On se le figure peut-être mieux sur un service L2VPN Ethernet—disons, point-à-point—fournit à un client. Le « circuit » étant souvent configuré de façon statique (que le client s'en serve ou non), on peut imaginer qu'à la première trame de données reçue, le BNG considère la session active. Ainsi on sait si le service est effectivement utilisé ou non (mais ce n'est qu'une hypothèse, ne l'ayant jamais vu en pratique).
Mapping entre attributs RADIUS et SLAAC, DHCPv6, IPv6CP
Résumons les options des mécanismes étudiées dans l'article précédent :
- SLAAC et l'option
PIO
—permet au BNG d'assigner un préfixe /64 à l'interface WAN du CPE (qui autoconfigure ensuite son adresse dedans) - DHCPv6 et l'option
IA_NA
—permet au BNG d'assigner une adresse à l'interface WAN du CPE - DHCPv6 et l'option
IA_PD
—permet au BNG de déléguer un préfixe au CPE (qui le redécoupe ensuite en /64 pour ses interfaces LAN) - IPv6CP et l'option
IID
—permet au BNG d'assigner un Interface ID à l'interface WAN du CPE
Les valeurs de ces options peuvent provenir d'une configuration statique sur le BNG—comme dans les confs de l'article précédent—mais souvent elles proviennent d'attributs RADIUS retournés au BNG à l'authentification du subscriber. C'est sans nul doute le cas le plus répandu, le RADIUS fournissant une base centralisée qui facilite la gestion (plutôt que d'avoir un même item configuré statiquement sur des dizaines voire des centaines de BNG).
Le tableau suivant dresse le mapping entre attributs RADIUS et options des mécanismes :
Attribut RADIUS IPv6 | Mécanisme |
---|---|
Framed-IPv6-Prefix (Framed-IPv6-Pool) |
SLAAC option PIO |
Framed-Interface-Id | IPv6CP option IID |
Framed-IPv6-Address (Stateful-IPv6-Address-Pool) |
DHCPv6 option IA_NA |
Delegated-IPv6-Prefix (Delegated-IPv6-Prefix-Pool) |
DHCPv6 option IA_PD |
Concernant les attributs *-Pool
, ils indiquent au BNG un pool dans lequel effectuer l'allocation
(pour ensuite charger la valeur récupérée dans l'option du mécanisme associé).
Par exemple :
- Le RADIUS retourne
SLAAC-POOL
comme valeur deFramed-IPv6-Pool
au BNG - Le BNG a préalablement été configuré avec le pool
SLAAC-POOL
, disons2001:db8:abcd::/48
, et dans lequel il alloue un /64 par subscriber - Une fois l'allocation faite, disons
2001:db8:abcd:1::/64
pour le premier subscriber, il retourne cette valeur au CPE avec l'optionPIO
de SLAAC - …mais le RADIUS aurait aussi pu directement fournir
2001:db8:abcd:1::/64
dansFramed-IPv6-Prefix
, sans passer par un pool configuré sur le BNG
Par comparaison avec l'IPv4 :
Attribut RADIUS IPv4 | Mécanisme |
---|---|
Framed-IP-Address (Framed-Pool) |
PPP-IPCP ou DHCPv4 |
Framed-IP-Netmask | DHCPv4 |
Ces tableaux montrent, de nouveau, la complexité accrue de l'IPv6 par rapport à l'IPv4. Et pour reprendre l'introduction du RIPE-690 :
« IPv6 is not the same as IPv4. »
En effet, alors que l'IPv4 se contente d'un attribut principal, Framed-IP-Address
,
la pluralité des attributs IPv6 engendre, elle, une myriade de combinaisons—sujet
de la section suivante—sachant qu'ils se combinent aussi avec l'IPv4 dans le cas d'un accès dual-stack.
Vous avez dit learning curve ?
Le draft-yeh-radext-dual-stack-access, accompagné de cette présentation de l'IETF, a ainsi tenté une formalisation des différentes combinaisons possibles des attributs RADIUS de l'IPv6—intuile pour le lecteur de tout lire, cette diapo est critiquable à mon sens et j'explique pourquoi après :

Remarquons que l'avant-propos du draft résume d'ailleurs certains aspects de notre série d'articles sur l'IPv6 appliqué au BNG :
IP sessions got from PPPoE can be either dual-stack IPv4/IPv6
session, IPv6-only, or the legacy IPv4-only session. Alternatively,
IP session can also be obtained from IPoE. The user in the IP
session could be a host or a customer router (RG-Residential Gateway,
CE-Customer Edge Router or CPE-Customer Premise Equipment). In the
IPv6 relevant part of the session, the customer router usually employ
DHCPv6-PD to get the delegated prefix for the customer network, while
its WAN (NAS-facing) interface could be either numbered or unnumbered
(Section 2.3, [BBF TR-177]). The WAN interface of the numbered
customer router can either employ SLAAC to get the prefix for the
interface or employ DHCPv6 to get the 128bits IPv6 address for
interface, which acts as the same as the user of IPv6 host.
Le draft proposait en fait l'introduction d'un nouvel attribut RADIUS, le User-Type
, indiquant au BNG la combinaison utilisée :
IPv4-only - Host
IPv6-only - Host(Numbered by SLAAC)
IPv6-only - Host(Numbered by DHCPv6)
IPv6-only - Customer Router(Unnumbered)
IPv6-only - Customer Router(Numbered by SLAAC)
IPv6-only - Customer Router(Numbered by DHCPv6)
Dual stack - IPv4 Host + IPv6 Host(Numbered by SLAAC)
Dual stack - IPv4 Host + IPv6 Host(Numbered by DHCPv6)
Dual stack - IPv4 Host + IPv6 Customer Router(Unnumbered)
Dual stack - IPv4 Host + IPv6 Customer Router(Numbered by SLAAC)
Dual stack - IPv4 Host + IPv6 Customer Router(Numbered by DHCPv6)
À mon avis, le fait qu'il n'ait pas abouti provient :
- de l'intérêt limité des opérateurs pour la formalisation de l'IPv6 appliqué au BNG et de sa complexité
- des équipementiers ne supportant pas toutes ces combinaisons, soit car interprétation erronée des standards, soit car trop complexe
- du focus sur l'attribut
Delegated-IPv6-Prefix
, certes, adapté pour l'accès Internet grand public mais pas forcément pour les clients pro
Framed-IPv6-Route
.
Or, j'ai démontré dans un article dédié le comportement étrange des BNG face à cet attribut sur une interface WAN unnumbered
(c'est-à-dire, laissée dans l'adressage par défaut link-local de l'IPv6).
À titre d'exemple, je n'ai pas réussi à tester la combinaison Framed-IPv6-Prefix
+ Delegated-IPv6-Prefix
sur BNG Huawei,
autrement dit le cas où l'interface WAN du CPE est adressée (numbered) avec un /64 (par SLAAC) + les interfaces LAN adressées avec des /64 alloués dans le préfixe délégué (par DHCPv6).
Il ne semble supporter que l'unnumbered avec Delegated-IPv6-Prefix
ou bien le numbered mais avec la combinaison Framed-IPv6-Address
+ Delegated-IPv6-Prefix
.
D'ailleurs, cette doc Huawei
donne une bonne vue d'ensemble des combinaisons supportées (ou non) par le modèle en question (NE8000-M4).
Et donc… ?
Bel effort des auteurs du draft et on peut déjà se réjouir que des personnes aient pris le temps de formaliser toutes ces combinaisons pour nous. Dans la suite, nous voyons un sous-ensemble de ces combinaisons, celles les plus répandues à ma connaissance (et ça devient déjà vite difficile à suivre) :
Type de session | Adressage du CPE avec… | Type d'accès | Déclencheur de la session | Combinaison d'attributs RADIUS associée |
---|---|---|---|---|
IPv6-only | SLAAC | IPoE | ICMPv6 RS |
Framed-IPv6-Prefix |
PPP | Framed-IPv6-Prefix + Framed-Interface-Id | |||
DHCPv6 | IPoE | DHCPv6 Solicit |
Framed-IPv6-Address + Delegated-IPv6-Prefix | |
PPP | ||||
Dual-stack | SLAAC | IPoE | DHCPv4 Discover |
Framed-IP-Address + Framed-IPv6-Prefix |
PPP | ||||
DHCPv6 | IPoE | DHCPv4 Discover |
Framed-IP-Address + Framed-IPv6-Address + Delegated-IPv6-Prefix | |
PPP |
Session IPv6-only
SLAAC
Dans ce scénario, le BNG assigne un préfixe /64 à l'interface WAN du CPE avec SLAAC qui autoconfigure ensuite son adresse dedans :

Dans le cas d'un accès PPP, le BNG peut assigner—c'est optionnel—un IID (Interface ID) spécifique à l'interface WAN du CPE avec l'attribut Framed-Interface-Id
,
dont la valeur est ensuite véhiculée par IPv6CP, ce qui permet in fine d'assigner une adresse précise par combinaison avec SLAAC.
Par exemple, en combinant :
- assignation par le BNG au CPE d'un IID via IPv6CP (
Framed-Interface-Id
=A:B:C:D
) - assignation par le BNG au CPE d'un /64 via SLAAC (
Framed-IPv6-Prefix
=2001:DB8:CAFE:BABE::/64
)
Le CPE autogénèrera l'adresse 2001:DB8:CAFE:BABE:A:B:C:D
pour son interface WAN.
Un vieux billet à ce sujet.
Diagrammes de séquence associés :
Exemple d'output sur BNG Huawei :
DHCPv6
Dans ce scénario, le BNG assigne une adresse à l'interface WAN du CPE avec l'option IA_NA
de DHCPv6
et délègue un préfixe avec l'option IA_PD
(que le CPE redécoupe ensuite en /64 pour ses interfaces LAN) :

Framed-IPv6-Address
dans le RADIUS,
ce qui aura pour effet, de la part du BNG, d'omettre l'option IA_NA
de DHCPv6.
Diagrammes de séquence associés :
Exemple d'output sur BNG Huawei :
Session dual-stack
Dans les diagrammes de séquence ci-dessous, les sessions obtiennent d'abord leur configuration IPv4 avant IPv6. Si l'inverse est tout à fait possible, il semble néanmoins plus logique de commencer par l'accès IPv4, apparu avant IPv6, et toujours majoritaire à ce jour.
SLAAC
Dans ce scénario, le BNG assigne une adresse IPv4 à l'interface WAN du CPE avec DHCPv4 et assigne un préfixe IPv6 /64 à l'interface WAN du CPE avec SLAAC qui autoconfigure ensuite son adresse dedans :

Dans le cas d'un accès PPP, le BNG assigne l'adresse IPv4 à l'interface WAN du CPE avec IPCP :

Diagrammes de séquence associés :
Exemple d'output sur BNG Huawei :
Comme nous le voyons sur les diagrammes de séquence, le BNG récupère tous les attributs RADIUS IPv4 et IPv6 d'un coup.
Le CPE récupérant d'abord sa configuration IPv4, il peut y avoir un court délai avant l'obtentation de la configuration IPv6 :
le BNG doit attendre que le CPE émette sa requête, ici avec un message RS
.
En attendant, le BNG doit donc mettre de côté certaines informations IPv6 avant de les considérer comme effectives (ou opérationnelles).
# La session IPv4 est active, celle IPv6 est en attente (mot-clé Released)
<bng>display access-user domain brindereseau.fr username 0cd8a0c65c00 verbose
-------------------------------------------------------------------
Basic:
User access index : 5312
State : Used
User name : 0cd8a0c65c00
Domain name : brindereseau.fr
User MAC : 0cd8-a0c6-5c00
User IP address : 10.20.20.20(Radius)
User IP netmask : 255.255.255.255
User gateway address : 10.20.20.1
User framed route : 192.168.1.0/24 0.0.0.0(Radius)[2]
User IPv6 NDRA Prefix : 2001:DB8:CAFE:BABE::/64(Radius,Released)
User IPv6 framed route : 2001:DB8:FEED:BEEF::/64(Radius)[2]
User IPv6 Primary-DNS : 2001:4860:4860::8888
User Authen IP Type : ipv4/ipv6/-
IPv6 address assignment protocol : NDRA
IPv6 configuration information allocation protocol : NDRA
User access type : IPOE
User authentication type : Bind authentication
[…]
# La configuration IPv6 n'apparait donc pas encore sur la session
<bng>display access-user domain brindereseau.fr
------------------------------------------------------------------------------
UserID Username Interface IP address MAC
Vlan IPv6 address Access type
------------------------------------------------------------------------------
5312 0cd8a0c65c00 Eth-Trunk0.2 10.20.20.20 0cd8-a0c6-5c00
2 - IPOE
DHCPv6
Dans ce scénario, le BNG assigne une adresse IPv4 à l'interface WAN du CPE avec DHCPv4,
assigne une adresse IPv6 à l'interface WAN du CPE avec l'option IA_NA
de DHCPv6
et délègue un préfixe IPv6 avec l'option IA_PD
(que le CPE redécoupe ensuite en /64 pour ses interfaces LAN) :

Dans le cas d'un accès PPP, le BNG assigne l'adresse IPv4 à l'interface WAN du CPE avec IPCP :

Diagrammes de séquence associés :
Exemple d'output sur BNG Huawei :
Conclusion
L'IPv6 a introduit une pluralité d'attributs RADIUS pour l'adressage du CPE, par comparaison avec l'IPv4. Cela engendre une myriade de combinaisons, plus ou moins sensées, plus ou moins compliqués.
Un draft a tenté de formaliser toutes ces combinaisons mais n'a pas abouti au statut de standard, peut-être car incomplet ou car les opérateurs et les équipementiers ne voient pas l'intérêt d'approfondir ces travaux—si j'étais mauvaise langue, je dirais même que cela arrange les équipementiers qui, alors, n'ont pas à supporter (implémenter) l'ensemble des combinaisons identifiées.
Nous avons illustré avec des diagrammes de séquence et des output d'un BNG Huawei un sous-ensemble de ces combinaisons. On voit déjà que, sur un sous-ensemble limité de combinaisons, ça devient vite difficile à suivre, surtout quand l'IPv6 se mèle à l'IPv4 (session dual-stack).
Pour aller plus loin : l'article BNG et Framed-IPv6-Route contient davantage d'output sur des BNG Cisco XE-XR, Huawei et Juniper.
Il montre un comportement étrange des BNG face à l'attribut Framed-IPv6-Route
sur une interface WAN unnumbered
(c'est-à-dire, laissée dans l'adressage par défaut link-local de l'IPv6).