L'IPv6 appliqué au BNG Partie 2
Suite de la première partie de l'IPv6 appliqué au BNG—qui se concentrait sur le mécanisme SLAAC pour l'adressage WAN et LAN du CPE—nous étudions ici les autres mécanismes existants, à savoir DHCPv6 et IPv6CP de PPP.
Plan de l'article
-
DHCPv6 pour l'adressage WAN
- Pourquoi DHCPv6 ne fournit pas subnet mask et gateway ?
- DHCPv6 over PPP
- DHCPv6 stateless
- DHCPv6 stateful
- DHCPv6 pour l'adressage LAN
- IPv6CP pour l'adressage WAN
DHCPv6 pour l'adressage WAN
Sans surprise, DHCPv6 assure un rôle globalement similaire à celui de DHCPv4 mais comporte des différences fondamentales dont :
- Deux modes de fonctionnement définis, l'un dit stateful et l'autre stateless
- En mode stateful, le serveur assigne à un client une adresse (option
IA_NA
) et/ou lui délègue un préfixe (optionIA_PD
) - En mode stateless, il n'assigne ni de délègue rien mais fournit seulement « d'autres informations » (DNS, search domain, NTP, etc.)
- Lorsqu'il assigne une adresse, il ne fournit pas de subnet mask ni de gateway (paramètres fournis par SLAAC)
Finalement, sa RFC 8415 résume bien ces points :
DHCPv6 can provide a device with addresses assigned by a DHCPv6
server and other configuration information […]
DHCPv6 also provides a mechanism for automated delegation of IPv6
prefixes using DHCPv6, as originally specified in [RFC3633]. Through
this mechanism, a delegating router can delegate prefixes to
requesting routers. Use of this mechanism is specified as part of
[RFC7084] and by [TR-187].
DHCP can also be used just to provide other configuration options
(i.e., no addresses or prefixes). That implies that the server does
not have to track any state; thus, this mode is called "stateless DHCPv6".
Et met bien en évidence la combinaison DHCPv6-SLAAC :
Parameters can be provided statelessly, or in combination with
stateful assignment of one or more IPv6 addresses and/or IPv6
prefixes. DHCPv6 can operate either in place of or in addition to
stateless address autoconfiguration (SLAAC).
Pourquoi DHCPv6 ne fournit pas subnet mask et gateway ?
Question pertinente et la raison provient sans doute de l'antériorité de SLAAC : conçu avant DHCPv6, il fournit déjà ces paramètres ; par conséquent, nul besoin d'introduire de la redondance en les fournissant avec DHCPv6. Cela dit, trois drafts défendent pourtant cette dernière possibilité :
- Le draft-droms-dhc-dhcpv6-default-router (2009)
propose les options
DRO
(Default Router Option) etPIO
(Prefix Information Option) - Le draft-ietf-mif-dhcpv6-route-option (août 2012)
propose l'option
Route
—le pendant de l'optionClassless
Route
de DHCPv4 (RFC 3442) - Le draft-mouton-mif-dhcpv6-drlo (septembre 2012)
propose l'option
DRLO
(Default Router List Option) et référence d'ailleurs les deux drafts précédents
Si aucun ne semble avoir abouti, leur lecture n'en reste pas moins instructive. Le premier, en particulier, résume bien la motivation :
In many IPv6 deployments, particularly in edge networks, end devices
obtain configuration information about default routers, on-link
prefixes and addresses from Router Advertisements as defined in
Neighbor Discovery. In some deployments, however, there is a strong
desire not to use Router Advertisements at all and to perform all
configuration via DHCP [RFC3315]. For example, network
administration may want to control all host configuration through a
single centralized DHCP service in order to more closely manage which
addresses are assigned and in use.
Et cela s'entend. Configurer DHCPv6 et SLAAC conjointement présente une certaine learning curve. Alors que DHCPv4 se suffit à lui-même (en particulier sur les LAN), un admin système-réseau doit ici comprendre les limites de DHCPv6, doit positionner les flags adéquats avec SLAAC et le configurer de sorte à fournir réseau de rattachement (on-link) et route par défaut (gateway). La présentation qui accompagne le draft se veut ainsi plus franche et amusante :
« Why does IPv6 take away options that were available in DHCPv4? »
« I want to do this, I did it with IPv4, it works, why can't I can't do this with IPv6? »
L'une de ses diapositives reprend d'ailleurs brièvement l'historique pour expliquer le pourquoi de l'absence de ces options dans DHCPv6 :

DHCPv6 over PPP
Avant d'entamer les exemples et les captures, notons que le standard de DHCPv6 le rend nativement compatible avec PPP :
The basic operation of DHCPv6 provides configuration for clients
connected to the same link as the server.
La notion de link étant définie ainsi :
A communication facility or medium over
which nodes can communicate at the link
layer, i.e., the layer immediately below
IP. Examples are Ethernet (simple or
bridged); Point-to-Point Protocol (PPP) and
PPP over Ethernet (PPPoE) links; and
Internet-layer (or higher) "tunnels", such
as tunnels over IPv4 or IPv6 itself.
Autrement dit, DHCPv6 peut délivrer une adresse à une interface Ethernet mais aussi une interface PPP (et peut déléguer un préfixe au CPE associé). Cela contraste avec DHCPv4 qui—à ma connaissance—n'est pas ou peu supporté sur PPP (IPCP, utilisé pour l'adressage, diffère d'IPv6CP comme on le verra).
DHCPv6 stateless
Illustrons les propos suivants :
Stateless DHCP [RFC3736] is used when DHCP is not used for obtaining
a lease but a node (DHCP client) desires one or more DHCP "other
configuration" parameters, such as a list of DNS recursive name
servers or DNS domain search lists [RFC3646].
Avec des captures :
Remarquons qu'en mode stateless, l'échange client-serveur se déroule donc en deux messages seulement (Information-Request
et Reply
) :
5.1. Client/Server Exchanges Involving Two Messages
When a DHCP client does not need to have a DHCP server assign IP
addresses or delegated prefixes to it, the client can obtain other
configuration information such as a list of available DNS servers
[RFC3646] or NTP servers [RFC5908] through a single message and reply
exchange with a DHCP server.
Alors qu'en mode stateful, comme nous allons le voir, l'échange se déroule en quatre messages (comme en DHCPv4) :
5.2. Client/Server Exchanges Involving Four Messages
To request the assignment of one or more addresses and/or delegated
prefixes, a client first locates a DHCP server and then requests the
assignment of addresses and/or delegated prefixes and other
configuration information from the server.
À moins que client n'active l'option Rapid Commit—afin d'accélérer la procédure d'adressage—auquel cas l'échange s'opère en deux messages :
The Rapid Commit option is used to signal the use of the two-message
exchange for address assignment.
Cette option existant aussi en DHCPv4 (RFC 4039).
DHCPv6 stateful
Comme dit plus haut, DHCPv6 permet l'assignation d'adresses et la délégation de préfixes via les deux options IA_NA
et IA_PD
(j'exclus l'option IA_TA
utilisée pour l'assignation d'adresses temporaires—le
principe, point de vue échange protocolaire, reste similaire aux adresses non-temporaires) :
The client uses IA_NA options (see Section 21.4) to request the
assignment of non-temporary addresses, IA_TA options (see
Section 21.5) to request the assignment of temporary addresses, and
IA_PD options (see Section 21.21) to request prefix delegation.
IA_NA
peut s'utiliser sans IA_PD
et inversement.
Par exemple, si SLAAC adresse l'interface WAN du CPE, l'option IA_NA
n'est pas utilisée
mais l'option IA_PD
peut l'être pour la délégation du préfixe.
Dans les exemples ci-dessous, afin de ne pas multiplier inutilement les combinaisons et rendre l'article plus long encore, nous montrons uniquement le scénario avec les deux options
IA_NA
et IA_PD
employées conjointement—et
car l'adressage WAN avec SLAAC a déjà été vu dans la première partie.
Concrètement—et comme énoncé dans les bases avec les best practices de redécoupage d'un préfixe IPv6—le BNG délègue typiquement un préfixe /48 ou un /56 au client (le CPE ici) qui le redécoupe en un ou plusieurs /64 pour son ou ses interfaces LAN :
In a typical scenario […] the client subnets a single
delegated /48 prefix into /64 prefixes and assigns one /64 prefix to
each of the links in the subscriber network.
For example, if the client in Figure 1 were delegated
2001:db8:0::/48, it might generate 2001:db8:0:1::/64 and
2001:db8:0:2::/64 for assignment to the two links in the
subscriber network.
Schématiquement :

Soit en capture :
Dans les captures ci-dessus, le CPE émet deux requêtes Solicit
distinctes pour obtenir son adresse (option IA_NA
) puis son préfixe (option IA_PD
).
En théorie, une seule transaction suffit (mais je ne suis pas parvenu à le tester sur le matériel en question) :
This document assumes that a client SHOULD use a single transaction
for all of the IA options required on an interface; this simplifies
the client implementation and reduces the potential number of
transactions required (for the background on this design choice,
refer to Section 4 of [RFC7550]).
Solicit
, Advertise
, Request
et Reply
abrégés SARR
dans certaines documentations—le
pendant du DORA
(Discover
, Offer
, Request
et Ack
) de DHCPv4.
Enfin, arrêtons-nous un instant sur la table de routage du CPE (qu'importe le cas IPoE ou PPP) :
CPE#show ipv6 route
ND ::/0 [2/0] via FE80::ED6:A4FF:FE19:0, GigabitEthernet0/0
S 2001:DB8:ABCD::/48 [1/0] via Null0, directly connected
C 2001:DB8:ABCD:1::/64 [0/0] via GigabitEthernet0/1, directly connected
C 2001:DB8:ABCD:2::/64 [0/0] via GigabitEthernet0/2, directly connected
L 2001:DB8:ABCD:1::1/128 [0/0] via GigabitEthernet0/1, receive
L 2001:DB8:ABCD:2::1/128 [0/0] via GigabitEthernet0/2, receive
LC 2001:DB8:CAFE:BABE:70DD:C85A:96D5:1FE4/128 [0/0] via GigabitEthernet0/0, receive
L FF00::/8 [0/0] via Null0, receive
Codes: ND - ND Default, S - Static, C - Connected, L - Local
Nous retrouvons l'adresse /128 assignée par le BNG ainsi que deux /64 alloués dans le /48 délégué par le BNG et assignés aux interfaces LAN. Les items de conf suivants rendent possible cette allocation-assignation automatique :
!
interface GigabitEthernet0/0
description WAN
no ip address
ipv6 enable
ipv6 address autoconfig default
ipv6 address dhcp
ipv6 dhcp client pd PREFIX-FROM-PROVIDER
!
interface GigabitEthernet0/1
description LAN1
no ip address
ipv6 enable
ipv6 address PREFIX-FROM-PROVIDER ::1:0:0:0:1/64
!
interface GigabitEthernet0/2
description LAN2
no ip address
ipv6 enable
ipv6 address PREFIX-FROM-PROVIDER ::2:0:0:0:1/64
!
La variable PREFIX-FROM-PROVIDER
reçoit comme valeur le préfixe délégué par le BNG,
de sorte à pouvoir la référencer plus tard dans les interfaces LAN pour l'allocation-assignation automatique des /64.
DHCPv6 pour l'adressage LAN
Comme la section sur SLAAC pour l'adressage LAN, celle-ci se veut brève, les concepts de DHCPv6 pour le WAN s'appliquant aussi au LAN.

IA_NA
est utilisé côté LAN du CPE pour adresser les hôtes.
Rappelons que DHCPv6 se combine avec SLAAC afin d'annoncer aux hôtes, non seulement leur adresse /128, mais aussi le /64 de rattachement (dit on-link) à laquelle appartient l'adresse. Sans cela, les hôtes sur le même LAN ne peuvent communiquer entre eux. En effet, pour citer la RFC 5942 :
The assignment of an IPv6 address -- whether through IPv6
stateless address autoconfiguration [RFC4862], DHCPv6 [RFC3315],
or manual configuration -- MUST NOT implicitly cause a prefix
derived from that address to be treated as on-link and added to
the Prefix List. A host considers a prefix to be on-link only
through explicit means, such as those specified in the on-link
definition in the Terminology section of [RFC4861] (as modified
by this document) or via manual configuration.
De plus, les hôtes ajoutent automatiquement une route par défaut vers le CPE grâce à SLAAC et non DHCPv6 qui ne véhicule pas ce paramètre.
Notons qu'en combinant DHCPv6 et SLAAC comme décrit ci-dessus,
l'hôte possède donc deux adresses IPv6—celle assignée par DHCPv6 et celle qu'il autoconfigure dans le /64 annoncé par SLAAC.
Pour rappel, c'est le flag Autonomous
de SLAAC qui engendre cette autoconfiguration d'adresse chez l'hôte.
Et ne pas le positionner serait une mauvaise idée car, pour reprendre la
RFC 4862 :
If the Autonomous flag is not set, silently ignore the Prefix
Information option.
L'hôte ignorera le /64 annoncé et se retrouvera sans réseau on-link (mais on avait vu que certaines implémentations ne respectent pas cette règle).
IPv6CP pour l'adressage WAN
PPP tend un piège avec IPv6CP (RFC 5072), le soi-disant équivalent d'IPCP pour IPv4 :
This document defines the method for sending IPv6 packets over PPP
links, the NCP for establishing and configuring the IPv6 over PPP,
and the method for forming IPv6 link-local addresses on PPP links.
En effet, IPv6CP négocie les IID (Interface ID) des nœuds du lien PPP afin de s'assurer de leur unicité avant de former les LLA respectives :
This Configuration Option provides a way to negotiate a unique, 64-
bit interface identifier to be used for the address autoconfiguration
[3] at the local end of the link (see Section 5).
En termes clairs, IPv6CP ne permet pas l'échange ou l'assignation d'adresses IPv6, contrairement à IPCP pour les adresses IPv4. Le TR-187 du Broadband Forum le rappelle bien :
The main difference between IPCP and IPV6CP is that IPCP is able to
complete the configuration procedure for the client and to allocate
an IPv4 address to the client, while IPV6CP is only used to configure
the link-local address.
Une fois la phase IPv6CP terminée, l'assignation GUA (ou ULA) passe par les mécanismes SLAAC ou DHCPv6 (c'est pourquoi nous les avons vus avant) :
In order to configure an IPv6 Global Unicast Address an additional
mechanism is required. This mechanism can be SLAAC or DHCPv6.
Cela dit, à l'instar d'IPCP qui permet à un pair (BNG) d'assigner une adresse IPv4 à l'autre (CPE), IPv6CP permet d'assigner un IID.
Par conséquent, assigner une adresse précise devient indirectement possible—sans DHCPv6 et son option IA_NA
—en combinant IPv6CP et SLAAC.
Par exemple, en combinant :
- assignation par le BNG au CPE d'un IID via IPv6CP (
A:B:C:D
) - assignation par le BNG au CPE d'un /64 via SLAAC (
2001:DB8:CAFE:BABE::/64
)
Le CPE autogénèrera l'adresse 2001:DB8:CAFE:BABE:A:B:C:D
pour son interface WAN.
Conclusion : assigner une adresse précise est indirectement possible en combinant IPv6CP et SLAAC, et sans DHCPv6.
Un vieux billet à ce sujet.
En général, l'attribut RADIUS Framed-Interface-Id
fournit l'IID, on en reparle dans l'article dédié aux attributs RADIUS de l'IPv6.
Enfin, IPv6CP s'assurant de l'unicité des IID sur le lien PPP, la procédure DAD (Duplicate Address Detection) devient redondante et peut être désactivée :
As long as the interface identifier is negotiated in the IPV6CP phase
of the PPP connection setup, it is redundant to perform duplicate
address detection (DAD) as a part of the IPv6 Stateless Address
Autoconfiguration protocol […]
Voici des captures sur le lien WAN d'un CPE de test terminé sur un vrai BNG Cisco (aussi je masque certaines informations) :

0c:d8:a0:c6:5c:00
.

Nak
et assigne un autre IID au CPE.
Logs du BNG :
Vi2.1 IPV6CP: I CONFREQ [REQsent] id 1 len 14
Vi2.1 IPV6CP: Interface-Id 0ED8:A0FF:FEC6:5C00 (0x010A0ED8A0FFFEC65C00)
Vi2.1 IPV6CP AUTHOR: Says use id 0000:0000:0000:0001
Vi2.1 IPV6CP: O CONFNAK [REQsent] id 1 len 14
Vi2.1 IPV6CP: Interface-Id 0000:0000:0000:0001 (0x010A0000000000000001)
Logs du CPE :
# Avant l'établissement de la session PPP, l'IID est 0ed8:a0ff:fec6:5c00
CPE#show ipv6 int brief
Dialer1 [administratively down/down]
FE80::ED8:A0FF:FEC6:5C00
# Après l'établissement de la session PPP, l'IID est 0000:0000:0000:0001
CPE#debug ipv6 address
[PPP Events]IPV6ADDR: Notification: Address FE80::ED8:A0FF:FEC6:5C00/10 is down on Dialer1
[PPP Events]IPV6ADDR: Notification: Address FE80::ED8:A0FF:FEC6:5C00 removed from Dialer1
[PPP Events]IPV6ADDR: Notification: Address FE80::1 added to Dialer1
[PPP Events]IPV6ADDR: Notification: Address FE80::1/10 is up on Dialer1
CPE#show ipv6 int brief
Dialer1 [up/up]
FE80::1
2001:DB8:CAFE:BABE::1
CPE#show run int dialer 1
interface Dialer1
ipv6 address FE80::1 link-local # commande automatiquement ajoutée par le CPE à la réception de l'IID assigné par le BNG !
Les logs dévoilent bien le comportement interne du CPE :
- initialement, il génère l'adresse LLA de l'interface PPP suivant la méthode EUI-64 (
FE80::ED8:A0FF:FEC6:5C00
) - à l'assignation de l'IID par le BNG, il regénère l'adresse LLA (
FE80::1
) puis génère l'adresse GUA (2001:DB8:CAFE:BABE::1
)
L'adresse GUA est générée dans le /64 annoncé par SLAAC—non visible dans la capture, car déjà illustré dans la première partie.
Bonne question car l'interface PPP (le Dialer1
) ne porte pas d'adresse MAC—plus généralement, d'identifiant au format EUI-48 ou EUI-64.
Le CPE emprunte alors, en l'occurrence, l'adresse MAC de l'interface Ethernet portant le PPPoE et liée à l'interface PPP, conformément à :
If an IEEE global identifier (EUI-48 or EUI-64) is available
anywhere on the node, it should be used to construct the tentative
interface identifier due to its uniqueness properties.
Conclusion
Voir le résumé en début de première partie !