DHCPv6

De Justine's wiki
Aller à la navigation Aller à la recherche

Configuration automatique des adresses sans état ICMPv6

Les adresses IPv6 qui sont configurée dynamiquement peuvent l'être de 2 façons :

  • SLAAC
  • DHCPv6

NB : Les commandes indiquées ici concernent du matériel Cisco

SLAAC

SLAAC permet à un périphérique de s'auto-configurer. ICMPv6 est au coeur de SLAAC, et il inclut des fonctions supplémentaires par rapport à ICMPv4. SLAAC utilise des messages d'annonce de routeur ICMPv6 pour fournir les informations d'adressage et d'autres informations de configuration qui seraient normalement fournies par un DHCP :

  • RS : Router Sollicitation, envoyé par un client lorsque celui-ci est configuré en SLAACpour demander un RA. Il est envoyé sur le groupe des routeurs FF02::2
  • RA : Router Anouncement envoyés par les routeurs toutes les 200 secondes ou en réponse à un RS; ils contiennent le préfixe et la longueur d'en-tête de l'adresse IPv6. Les clients utilisent ces informations pour s'auto-configurer. Ils sont envoyés sur le groupe de mutlidiffusion à tous les noeuds FF02::1

SLAAC est dit sans état car aucun service ne fait appel à un serveur. Aucun serveur quelles sont les adresses utilisées ou pas.

Fonctionnement de SLAAC

Pour qu'il puisse envoyer des RA, un routeur doit être activé en tant que routeur IPv6. Sur un routeur Cisco, cela se fait par la commande :

ipv6 unicast-routing

Ensuite, la logique suit l'image suivante :

SLAAC.png

Il est à noter que la création de l'ID interface peut se faire de deux façons :

  • Soit avec EUI-64 (cf IPv6 )
  • Soit par génération aléatoire

 

SLAAC et DHCPv6

Ce sont les paramètres indiqués dans le RA qui déterminent si un client est configuré pour obtenir automatiquement ses informations d'adressage par SLAAC, DHCPv6 ou les deux. Les RA contiennent deux indicateurs qui signalent l'option à utiliser par le client : l'indicateur de configuration des adresses générées (indicateur M) et l'indicateur de configuration autre (O). Différentes combinaisons d'indicateurs M et O permettent aux messages RA d'indiquer une des trois option d'adressage pour le périphérique, voir l'image :

SLAAC2.png

Quelle que soit l'option utilisée, d'après la RFC 4861 il faut faire une détection des adresses dupliquées (DAD) sur toutes les adresses de monodiffusion, y compris celles configurées via SLAAC ou DHCPv6. Bien entendu, l'OS peut choisir d'ignorer le contenu du RA et se configurer comme il le souhaite.

 

 

Rappel des indicateurs:

  • M : configuration des adresses générées (1 = "Récupère toutes informations de connexion (y compris ton adresse) chez un DHCP")
    • Commande Cisco : ipv6 nd managed-config-flag
  • O : Autre (1 = "Récupère tes autres informations de connexion chez un DHCP")
    • Commande Cisco : ipv6 nd other-config-flag
  • Une fois activé, le flag M prend le pas sur le flag O.
  Indicateur M Indicateur O
SLAAC 0 0
DHCP Stateless 0 1
DHCP Stateful 1 0

 

Nous allons détailler les 3 options :

Option SLAAC

C'est l'option par défaut sur les routeurs Cisco : les indicateur M et O sont tous les deux à 0. Le RA contient alors toutes les informations dont un ordinateur aurait besoin pour s'autoconfigurer.

Cette option indique au client d'utiliser exclusivement les informations fournies dans le message RA; aucune information supplémentaire n'est disponible auprès d'un serveur DHCPv6. Je ne détaillerais pas son fonctionnement ici, il est disponible dans les cours sur IPv6 et Cisco.

Côté routeur, les messages RA sont activés par rapport à une interface. Pour les remettre sur une interface, les indictauer M et O doivent retrouver leur valeur initiale par les commandes suivantes:

Router(config-if)# no ipv6 nd managed-config-flag

Router(config-if)# no ipv6 nd other-config-flag

Option DHCPv6 sans état

Cette option enjoint le client à utiliser des informations dans le RA pour l'adressage, mais les paramètres de configuration supplémentaires sont fournis par un serveur DHCPv6.

Le client commence par configurer son adresse après réception d'un RA. Il communique ensuite avec le serveur DHCPv6 sans état pour obtenir des informations complémentaires non fournies dans le message RA. Il peut s'agir d'une liste d'adresses de serveurs DNS, par exemple. Ce processus est dit sans état car le serveur ne conserve aucune information sur l'état des clients (c'est-à-dire une liste des adresses IPv6 utilisées): il ne fournit que des paramètres de configuration.

L'indictauer O est à 1 et l'indicateur M est à 0. Le O à 1 informe le client que des informations de configuration supplémentaires sont à demander auprès d'un serveur DHCPv6. On peut configurer ce type de RA sur un routeur Cisco par la commande :

Router(config-if)# ipv6 nd other-config-flag

Option DHCPv6 avec état (DHCPv6 uniquement)

Cette option est la plus proche de DHCPv4. Dans ce cas le RA enjoint le client de ne pas utiliser les informations qu'il contient. Toutes les informations d'adressage et de configuration doivent être obtenues auprès d'un serveur DHCPv6 avec état.  On dit "avec état" car le serveur conserve des informations sur les clients. L'indicateur M indique si DHCPv6 stateful est activé. L'indicateur O n'as pas d'effet. Pour activer l'indicateur M sur un routeur Cisco :

Router(config-if)# ipv6 nd managed-config-flag

Fonctionnement de DHCPv6

DHCPv6, que ce soit avec ou sans état, commence toujours pas un message d'annonce de routeur, qu'il soit périodique ou sollicité. Si le DHCPv6 avec ou sans état est indiqué dans le message d'annonce de routeur, le périphérique commence alors les communications DHCPv6 avec le serveur.

Communications DHCPv6

Le processus DHCPv6 est alors invoqué. LEs messages DHCPv6 sont envoyés par UDP; le port côté serveur est le port 546. Le port côté client est le port 547. Les étapes sont alors :

  • Le client doit localiser un serveur DHCPv6. Il envoie donc un message SOLLICITATION DHCPv6 au groupe des serveurs DHCPv6, FF02::1:2. Cette adresse de mutlidiffusion n'as qu'une portée de lien local, ce qui signifie que les routeurs ne routent pas les messages envoyés à cette adresse.
  • Un ou plusieurs serveurs répondent par une message ANNONCE DHCPv6, envoyé en monodiffusion. Ce message informe le client que le serveur est disponible pour le service DHCPv6.
  • Le client répond alors au serveur par un message REQUETE ou DEMANDE D'INFORMATIONS, selon qu'il utilise DHCPv6 avec ou sans état:
    • En mode sans état, le client envoie un message DEMANDE D'INFORMATIONS au serveur, demandant uniquement les paramètres de configuration tels que l'adresse du serveur DNS. Le client a généré sa propre adresse IPv6 avec la méthode SLAAC.
    • En mode avec état, le client envoie un message REQUETE DHCPv6 au serveur pour obtenir une adresse IPv6 et tous les autres paramètres de configuration.
  • Le serveur envoie une message REPONSE DHCPv6 au client, qui contient les informations demandées dans le message REQUETE ou DEMANDE D'INFORMATIONS.

RTENOTITLE

Configuration d'un routeur avec DHCPv6 sans état (en tant que serveur ou client)

4 étapes sont nécessaires:

Activation du routage IPv6

La commande ipv6 unicast-routing n'est pas indispensable pour que le routeur soit un serveur DHCPv6 sans état, mais elle indispensable pour que le routeur envoie ses RA.

ipv6 unicast-routing

Configuration d'un pool DHCPv6

La commande suivante crée un pool et sélectionne le routeur en mode de configuration DHCPv6, identifié par l'invite de type "Router(config-dhcpv6)#".

ipv6 dhcp pool pool-name

Configuration des paramètres du pool

Lors du processus SLAAC, le client a déjà reçu les informations dont il avait besoin pour créer une adresse de monodiffusion IPv6. Il a également les informations sur la passerelle par défaut grâce au message RA, qui est l'adresse link-local du routeur. Le serveur DHCPv6 peut cependant fournir d'autres informations, comme les informations concernant DNS.

dns-server adresse-du-serveur-DNS
domain-name nom-de-domaine

Configuration de l'interface DHCPv6

La commande suivante relie le pool DHCPv6 à l'interface. Le routeur répond aux requêtes DHCPv6 sans état sur cette interface avec les informations contenues dans le pool. L'indicateur O doit être passé de 0 à 1. Les RA qui seront ensuite envoyés sur cette interface indiqueront que des informations supplémentaires sont disponibles auprès d'un serveur DHCPv6.

interface nom-de-l'interface
ipv6 dhcp server pool-name
ipv6 nd other-config-flag

 

Exemple complet

ipv6 unicast-routing
ipv6 dhcp pool IPV6-STATELESS
dns-server 2001:db8:cafe:aaaa::5
domain-name example.com
exit
interface g0/1
ipv6 address 2001:db8:cafe:1::1/64
ipv6 dhcp server IPV6-STATELESS
ipv6 nd other-config-flag

Configuration en tant que client DHCPv6 avec ou sans état

Bien que ce scénario soit peu fréquent, il est toujours possible (un routeur est généralement en IP fixe).

Le routeur client a besoin d'une adresse de lien local IPv6 sur l'interface pour envoyer et recevoir des messages IPv6 tels que les RS et message DHCPv6. Cette adresse est crée automatiquement lorsqu'IPv6 est configuré sur une interface. Cela peut se produire soit en configurant une adresse de monodiffusion globale sur l'interface, soit avec la commande IPv6 enable. Les commandes pour activer l'autoconfiguration sont ensuite assez simples :

interface nom-de-l'interface
ipv6 enable
ipv6 address autoconfig #Stateless

ipv6 address dhcp #Stateful

Ce que fera ensuite le routeur (SLAAC, DHCPv6 stateless ou statefull) dépend de ce qu'il recevra dans les RA (il faudra, du coup, un autre routeur pour configurer celui-ci !).

Vérification de DHCPv6 sans état

Côté serveur

Pour vérifier le serveur, on utilise les commandes suivantes:

show ipv6 dhcp pool
show running config

La première donne des informations sur le serveur en lui-même (Clients actifs, informations configurées comme DNS, domain name, etc) et la seconde montre les commandes entrées.

Côté client

Pour vérifier comment notre routeur client DHCPv6 s'est configuré, il suffit d'utiliser la commande :

show ipv6 interface nom-de-l'interface

Celle-ci renvoie nombre d'informations, parmi lesquelles l'adresse utilisée et la méthode de configuration ("Stateless address autoconfig enabled" signifie que la configuration automatique sans état est activée et que le routeur dispose d'une adresse de monodiffusion IPv6). Pour voir le détail des messages échangés entre client et serveur, on peut utiliser la commande :

debug ipv6 dhcp detail

Celle-ci permet de voir de façon détaillée les échanges de message qui ont eu lieu.

Configuration d'un routeur en tant que serveur DHCPv6 avec état

La configuration d'un serveur DHCPv6 avec état est similiaire à celle d'un serveur sans état : la seule différence est que le routeur dispose également des informations d'adressage.

Activation du routage IPv6

De la même façon qu'en stateless, on utilise la commande :

ipv6 unicast-routing

Configuration d'un pool DHCPv6

On va créer un pool et mettre le routeur en mode de configuration DHCPv6:

ipv6 dhcp pool pool-name

Configuration des paramètres du pool

Dans le cas du statefull, tous les paramètres d'adressage et de configuration doivent être attribués par le serveur. On va commencer par indiquer le pool d'adresses à attribuer par le serveur :

address prefix/length [lifetime {valid-lifetime preferred-lifetime | infinite}]

À ne pas confondre avec l'adresse qui sera attribuée à l'interface en elle-même, il s'agit ici bien du pool d'adresses qui seront distribuée aux clients. Les deux informations sont différentes et doivent être cohérentes!

L'option lifetime indique la durée de validité et la durée préférée des baux en secondes. Le client utilisera l'adresse IPv6 source du RA. On inclue également les informations concernant DNS:

dns-server dns-server-address
domain-name nom-de-domaine

Configuration de l'interface

Nous allons enfin choisir une interface, y relier notre pool pour que le serveur DHCP y soit actif, et modifier notre indicateur M pour le passer à 1.

interface type numéro
ipv6 dhcp server pool-name
ipv6 nd managed-config-flag

Exemple complet

CISCO Statefull.png

Vérification de DHCPv6 avec état

Si la plupart des commandes utilisées pour vérifier DHCPv6 Stateless s'appliquent ici aussi, d'autres viennent s'ajouter :

  • show ipv6 dhcp pool : Donne des informations sur le pool que l'on a configuré, avec entre autre le nombre de clients
  • show ipv6 dhcp binding : Voir les clients : ils sont d'abord présentés par leur adresse de lien-local, et on a un peu plus bas l'adresse qu'ils ont récupéré
  • (côté client) : show ipv6 interface nomiunterface : Montre l'adresse IPv6 utilisée et la passerelle

Configuration d'un routeur en tant qu'agent de relais DHCPv6

Si le serveur DHCPv6 se trouve sur un autre réseau que celui du client, il peut être utile de configurer le routeur comme agent de relais DHCPv6. La configuration est similaire à celle d'un agent de relais en DHCPv4 (même si les messages sont transférés d'une façon légèrement différente).

Un exemple de topologie dans laquelle s'applique cette situation :

RzoDHCPv6RELAI.png

Ici, on veut faire en sorte que notre serveur DHCPv6 distribue des adresses à tous les clients : ceux-ci doivent alors communiquer avec le serveur. Les messages DHCPv6 provenant des clients sont envoyés à l'adresse IPv6 FF02::1:2, qui porte le nom (barbare) : All_DHCPv6_Relay_Agents_and_Servers. Cette adresse a une portée de lien local, ce qui veut dire que les routeurs ne transfèrent pas les messages. Le routeur doit être configuré en tant qu'agent de relais pour permettre au serveur et au client de communiquer.

 

Configuration de l'agent de relais

RTENOTITLE

Je commence par sélectionner l'interface sur laquelle seront reçues les demandes DHCPv6, et la destination vers laquelle elles seront transférées. J'effectue ensuite une vérification. Si je me réfère à l'infrastructure présentée au-dessus, ces commandes seront entrées sur R1, ce qui est logique : cependant, les mêmes seront rentrées sur l'interface G0/0 de R3. En effet, lorsque R3 recevra des demandes en provenance de PC3, il les relaiera ainsi jusqu'au serveur DHCPv6. En effet, une fois la demande DHCPv6 récupérée par le routeur, elle est envoyé en unicast au serveur DHCPv6, comme un paquet normal ! Les messages seront transférés sous la forme de paquets "relay-forward" et "relay-reply", qui sont traités par les routeurs et les serveurs, et qui sont bel et bien des paquets unicast.

À noter : si l'adresse spécifiée à la fin de la commande est non pas une adresse globale, mais une adresse de lien local, il faut ajouter après l'adresse l'interface sur laquelle la demande sortira du routeur.

Note sur le DUID

D'après Wikipédia, un DUID (DHCP Unique IDentifier) est "utilisé par le client pour obtenir une adresse IP de la part d'un serveur DHCPv6. Il a un champ de deux octets nommé Type, et un champ de longueur variable, pouvant aller jusqu'à 128 octets, d'identification." Les deux premiers octets servent à identifier le type de DUID; le reste dépend du type de DUID. Les 4 types de DUID sont :

  • Link-Layer Address plus time (DUID-LLT)
  • Identifiant unique assigné par le constructeur basé sur un numéro d'entreprise (DUID-EN)
  • Adresse de lien local (DUID-LL)
  • UUID-based DUID (DUID-UUID)

Un UUID est un identifiant à 128 bits, utilisé pour identifier des informations dans un système informatique. On utilise aussi le terme GUID.

La RFC 6939 permet d'identifier un hôte en se basant sur son adresse MAC. Cela permet à un relai DHCPv6 de passer cette information à un serveur DHCPv6. Cette option sur les relais DHCPv6 n'est pas encore largement supportée.

Un exemple pris sur Wikipédia :

In this example, the server's link-local address is fe80::0011:22ff:fe33:5566 and the client's link-local address is fe80::aabb:ccff:fedd:eeff.

  • DHCPv6 client sends a Solicit from [fe80::aabb:ccff:fedd:eeff]:546 for [ff02::1:2]:547.
  • DHCPv6 server replies with an Advertise from [fe80::0011:22ff:fe33:5566]:547 for [fe80::aabb:ccff:fedd:eeff]:546.
  • DHCPv6 client replies with a Request from [fe80::aabb:ccff:fedd:eeff]:546 for [ff02::1:2]:547. (Client messages are sent to the multicast address, per section 13 of RFC 3315.)
  • DHCPv6 server finishes with a Reply from [fe80::0011:22ff:fe33:5566]:547 for [fe80::aabb:ccff:fedd:eeff]:546.

Une autre citation plus claire :

Afin de connaître l'état des ressources gérées (représentées par les paramètres de configuration), le serveur DHCP maintient une liste d'associations entre le paramètre attribué et le client. Comme l'adresse unicast du client est une ressource dépendant du serveur, celle-ci n'est pas utilisable par le serveur DHCP pour identifier un client. Le serveur identifie donc le client par un identifiant unique à usage exclusif de DHCP : le DUID (DHCP Unique IDentifier). Cet identifiant est généré par le client et ne doit plus en changer dans le temps. Le DUID concerne le client (le noeud) et non une interface du client. Plusieurs schémas de génération sont proposés reposant sur l'adresse de lien-local complétée par un élément qui garantit l'unicité comme par exemple une estampille temporelle. Une fois qu'un client a un DUID, il doit le conserver même s'il change d'adresse lien local.

(Source : http://livre.g6.asso.fr/index.php/DHCPv6 )

L'explication claire et précise (ce que j'en ai retenu)

En gros, lorsque le client commence sa demande de DHCPv6, il génère un identifiant unique, qui permettra au serveur de le "suivre", même à travers des relais. Cet identifiant peut être basé sur l'adresse de lien local ou sur autre chose : il faut simplement qu'il soit unique, et il existe plusieurs façons de le générer (un peu sur le même principe que l'EUID-64). Une fois celui-ci généré, même si l'adresse IP change, le DUID ne change pas. En effet, l'adresse du client est un ressource externe au serveur, et le client peut en générer une autre si il le souhaite. Cependant il faut bien que le serveur DHCP ait un moyen de "suivre" son client, et ce moyen c'est le DUID. Le DUID ne changera pas tant que le client sera dans le réseau.

Tâches de dépannage

Le dépannage est similaire à celui effectué en DHCPv4.

Les tâches sont :

  • Résoudre les conflits d'adressage : avec la commande show ipv6 dhcp conflict
  • Vérifier la méthode d'allocation des adresses indiquée dans le RA: show ipv6 interface interface
  • Tester avec une IPv6 statique : c'est une bonne idée, en cas de soucis de connectivité, d'essayer d'accéder aux ressources réseau avec une adresse statique
  • Vérification de la configuration du port du commutateur : toujours dans les problèmes de connectivité, c'est une chose à faire. Il faut vérifier les problèmes liés aux VLAN, à STP, etc. Les configuration PortFast et port de périphérie permettent de résoudre ce genre de problèmes.
  • Tester le DHCPv6 sur le même sous-réseau ou VLAN : le problème peut en effet venir d'un agent de relai DHCPv6.

Vérification de la configuration du DHCPv6 du routeur

Les configurations des routeurs pour les services avec et sans état présentent de nombreux points communs, mais aussi des différences : principalement les flags, et aussi le fait qu'un routeur en DHCP stateful aient une plage d'adresses à distribuer. 

Dans tous les cas, les informations peuvent être obtenues via la commande show ipv6 interface interface. La sortie en est plutôt explicite.

Il faut également rappeller l'existence de la commande debug ipv6 dhcp detail, utile pour voir le détail des transactions.