IPv6 – Attribution dynamique d’adresses (1ere Partie) : Auto-configuration

A quelque heures du lancement mondial d’IPv6 (World IPv6 Launch), il est de bon ton d’aborder un sujet concernant ce protocole d’adressage. Voilà pourquoi dans cet article je décris les différentes techniques d’attribution d’adresses dynamiques en IPv6…

Par attribution d’adresses dynamique, j’entends bien sur, toute technique qui ne consiste pas à configurer manuellement et statiquement une adresse sur une interface (qu’il s’agisse d’un PC, d’un routeur, …).

En IPv4, à part la méthode statique, il y a bien entendu le célèbre DHCP dont la mission principale est d’attribuer une adresse IPv4 et toutes les options nécessaires au bon fonctionnement sur le réseau à une machine qui en fait la demande. Mais qu’en est-il en IPv6 ?

Voici de manière succincte la liste des techniques possibles:

  • Configuration statique.
  • DHCP Statefull (exactement le même principe que le DHCP en IPv4, on fourni l’ensemble de la configuration de l’interface, et des options).
  • DHCP Stateless: une méthode où le serveur DHCP est relégué au second plan, son rôle se limite ici à fournir les options (serveur DNS, …), alors que la partie principale, à savoir l’adresse du réseau (appelé préfixe en IPv6), le masque du réseau (appelé longueur du préfixe en IPv6) ainsi que la passerelle par défaut sont annoncés par le routeur.
  • Stateless Auto-configuration: ici il n’y a plus de serveur DHCP, c’est le routeur qui donne les infos nécessaires (préfixe, longueur du préfixe, mais pas d’options possible).

Dans les deux dernières méthodes, la machine qui se configure ne reçoit que, au maximum les 64 premiers bits de l’adresses IPv6, il lui reste à définir les 64 derniers afin de constituer son adresse complète. Pour cela deux techniques existent:

  • Génération selon le format EUI-64, basé sur l’adresse MAC de l’interface ethernet utilisée (où celle d’une interface disponible sur la machine), cette méthode est décrite dans mon article concernant le protocole IPv6 lui-même.
  • Génération « aléatoire » des 64 derniers bits.

Afin d’éviter une duplication d’adresse dans le réseau, chaque machine qui se configure une adresse procédera à une vérification de duplication d’adresse (DAD = Duplicate Adresse Detection) en profitant d’ICMPv6 et plus précisément du principe de Neighbor Sollicitation (remplaçant de ARP). L’idée est simple, si je demande sur le réseau qui est la machine disposant de mon adresse, et que personne ne répond, c’est que personne ne l’utilise.

Nous allons nous pencher sur la méthode de l’auto-configuration, les autres techniques, ce sera pour un autre article.

IPv6 Stateless auto-configuration

Afin d’illustrer cet configuration, voici la topologie utilisée, rien de compliqué: un routeur, connecté à un switch auquel est raccordé une PC (Ubuntu 12.04 64bits Server). Le but est donc que le routeur fournisse les informations nécessaires pour que le PC puisse s’auto-configurer.

L’adresse du LAN sera 2001:CAFE:BEEF:C0DE::/64 et le routeur aura la première adresse du subnet, c’est à dire: 2001:CAFE:BEEF:C0DE::1/64

Commençons par activer le routage IPv6 (sans quoi le routeur n’enverra aucune information concernant le préfixe du réseau).

R1(config)#ipv6 unicast-routing

Configurons ensuite l’interface au strict minimum, adresse et longueur du préfixe.

R1(config)#interface fa0/0
R1(config-if)#ipv6 address 2001:CAFE:BEEF:C0DE::1/64

! Définit le préfixe à annoncer et sa taille (optionnel ou non selon les versions d'IOS et de plateforme)
R1(config-if)#ipv6 nd prefix 2001:CAFE:BEEF:C0DE::/64

! Ne pas supprimer les RAs (optionnel selon les plateformes et versions d'IOS)
R1(config-if)#no ipv6 nd ra suppress

R1(config-if)#no shut

Voyons le résultat, et pour se faire rien de mieux qu’une capture avec Wireshark!

Comme vous pouvez le voir, le routeur envoi déjà des « Router Advertisement » (RA), qui sont justement les messages dont ont besoin les machines pour s’auto-configurer. Mais tout n’est pas encore en ordre bien sur.

Voici le résultat d’un « debug ipv6 nd »:

*Mar 1 00:28:32.527: ICMPv6-ND: Request to send RA for FE80::C200:CFF:FE28:0
*Mar 1 00:28:32.527: ICMPv6-ND: Sending RA from FE80::C200:CFF:FE28:0 to FF02::1 on FastEthernet0/0
*Mar 1 00:28:32.527: ICMPv6-ND: MTU = 1500
*Mar 1 00:28:32.531: ICMPv6-ND: prefix = 2001:CAFE:BEEF:C0DE::/64 onlink autoconfig
*Mar 1 00:28:32.531: ICMPv6-ND: 2592000/604800 (valid/preferred)

Nous avons donc bien des RAs envoyés parle routeur annonçant le préfixe, et ayant une durée de vie (au même titre qu’avec DHCP en IPv4, la configuration dynamique n’est valable qu’un certain temps). Voyons voir maintenant ce que cela donne du côté du PC:

Dans /etc/network/interfaces

auto eth1
  iface eth1 inet6 auto

Redémarrage du service réseau via « /etc/init.d/networking restart » et hop … « ifconfig »

eth1 Link encap:Ethernet HWaddr 08:00:27:d5:cd:ef
 adr inet6: 2001:cafe:beef:c0de:94f2:fd3:8445:672b/64 Scope:Global # Aléatoire
 adr inet6: 2001:cafe:beef:c0de:a00:27ff:fed5:cdef/64 Scope:Global # EUI-64
 adr inet6: fe80::a00:27ff:fed5:cdef/64 Scope:Lien
 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
 Packets reçus:49 erreurs:0 :0 overruns:0 frame:0
 TX packets:61 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 lg file transmission:1000
 Octets reçus:5110 (5.1 KB) Octets transmis:7989 (7.9 KB)

On constate que le PC s’est auto-configuré deux adresses, rien d’étonnant, en IPv6 une interface n’est pas limitée à une seule adresse … et en plus, on a ici une générée sur base du EUI-64(reconnaissable par la séquence FF:FE) et l’autre par la méthode aléatoire.

Un petit test de connectivité « ping6 2001:CAFE:BEEF:C0DE::1 » depuis le PC pour confirmer le tout ?

PING 2001:CAFE:BEEF:C0DE::1(2001:cafe:beef:c0de::1) 56 data bytes
64 bytes from 2001:cafe:beef:c0de::1: icmp_seq=1 ttl=64 time=4.08 ms
64 bytes from 2001:cafe:beef:c0de::1: icmp_seq=2 ttl=64 time=11.2 ms
64 bytes from 2001:cafe:beef:c0de::1: icmp_seq=3 ttl=64 time=17.7 ms
64 bytes from 2001:cafe:beef:c0de::1: icmp_seq=4 ttl=64 time=15.1 ms
--- 2001:CAFE:BEEF:C0DE::1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3009ms
rtt min/avg/max/mdev = 4.085/12.060/17.703/5.147 ms

Et la passerelle par défaut dans tout ça ? … Un coup d’oeil sur la table de routage IPv6 du PC … « ip -6 route »:

2001:cafe:beef:c0de::/64 dev eth1 proto kernel metric 256 expires 2592146sec
fe80::/64 dev eth1 proto kernel metric 256
default via fe80::c200:cff:fe28:0 dev eth1 proto kernel metric 1024 expires 1622sec

Elle y est ! … la dernière ligne, la seule chose particulière, la passerelle est renseignée par son adresse link-local.

Bon, ne crions pas victoire trop vite, il manque encore quelques détails, aucune option n’est fournie, donc pas de serveur DNS etc … et malheureusement, si on applique strictement cette méthode, il n’y a pas la possibilité d’annoncer un serveur DNS ou autre. Il faut alors les configurer manuellement côté PC.

La solution est donc d’utiliser un serveur DHCP en mode Stateless, pour justement fournir les détails manquant, mais ce sera le sujet d’un prochain article.

11 Comments on “IPv6 – Attribution dynamique d’adresses (1ere Partie) : Auto-configuration

  1. bonjour, quelque chose m’intrigue.
    On est d’accord pour dire que seules les @ globales sont routable sur le LAN et le WAN.
    Ce qui m’interpelle, c’est qu’est-ce je mets comme @ip globale ? Comment être sûr qu’elle ne sera pas utilisée par une autre entreprise ?

  2. Mais si on n’a que des routeurs sur un réseau ? Er on a une adress IPv6 préfixe /48,

  3. Bonjour,
    Merci pour l’article, cependant j’ai cherché la 2 partie mais je n’ai rien trouver, peut être que vous ne l’avez pas publiée du tout?

    • Cela n’existe pas dans Packet Tracer. Dans mon exemple il s’agissait d’une machine virtuelle. Le topologie est alors à réaliser soit avec du matériel physique, soit avec GNS3.

  4. merci c’est trop claire mais seulement la commande ipv6 nd prefix 2001:CAFE:BEEF:CODE::/64 donne un message d’erreur avec le simulateur cisco packet tracer que j’utilise.comment faire intervenir le serveur dhcp

    • Packet Tracer est fort limité en IPv6. Il est fort probable que ce genre de configuration n’y soit pas possible. Peut-être en utilisant un autre modèle de routeur. Dans la dernière version de PT, ce sont les c2911 qui sont les plus avancés dans ce domaine.

  5. Très bon article ! clair et bien présenté. Par contre une petite erreur sur la dernière ligne : « La solution est donc d’utiliser un serveur DHCP en mode Stateless » : en mode Statefull tu veux dire ?

    • Non, il s’ agit bien d’un serveur dhcp stateless. On appelle cela aussi parfois dhcp light… au lieu d’attribuer l’adresse etc, il ne sert qu’à fournir l’adresse du serveur dns ou d’un proxy par exemple. Un stateful dhcp fournit la configuration complète.