Un brin de réseau


Ce blog propose des articles sur les technologies réseaux et leur utilisation, le tout illustré avec des maquettes et des captures.

Python freeradius-api Python diffplus

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.

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 :

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 :

Translation entre attributs RADIUS IPv6 et mécanismes d'adressage associés.
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 :

Par comparaison avec l'IPv4 :

Translation entre attributs RADIUS IPv4 et mécanismes d'adressage associés.
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 :

bng-ipv6-radius-combination
Différentes combinaisons des attributs RADIUS IPv6 en lien avec les modèles numbered et unnumbered.

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 :

À 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) :

Combinaisons illustrées dans la suite de l'article.
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 :

bng-ipv6-ipv6only-arch-slaac

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.

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) :

bng-ipv6-ipv6only-arch-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 :

bng-ipv6-dualstack-arch-slaac-ipoe

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

bng-ipv6-dualstack-arch-slaac-ppp

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) :

bng-ipv6-dualstack-arch-dhcpv6-ipoe

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

bng-ipv6-dualstack-arch-dhcpv6-ppp

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).