Si vous voulez fournir de l’IPv6 sur votre réseau local (par exemple, si vous avez un sous-réseau de routé sur votre tunnel SixXS, ou un FAI fournissant de l’IPv6), il vous faut un moyen de distribuer des IPv6 aux machines de votre réseau. Un des moyens les plus simples de le faire sous un système GNU/Linux et BSD est d’utiliser le démon radvd (Router ADVertisment Daemon) sur le routeur IPv6. Comme son nom l’indique, ce démon sert à avertir les machines situées sur le même lien (en l’occurrence le même réseau ethernet) de la présence d’un routeur.

Attention toutefois : ne vous attendez pas à trouver toute la richesse du DHCP, comme la configuration du domaine WINS ou encore le boot PXE : radvd fournit juste les paramètres vitaux pour se connecter au réseau, à savoir une route par défaut et un préfixe pour la construction de l’adresse IP. De plus, radvd ne peut pas logguer les IPs attribuées. En fait, radvd n’attribue même pas d’adresse IP : une machine voulant se connecter construira seule son adresse IP avec le préfixe annoncé par le routeur et son adresse MAC (ou une valeur aléatoire). Si vous voulez un équivalent de DHCP en IPv6, tournez vous vers DHCPv6, qui fonctionne de la même manière qu’en IPv4. Il est alors nécessaire qu’il y ait un client DHCP sur la machine à connecter.

Radvd ou la configuration sans état

Contrairement au DHCP, qui envoie une offre avec une adresse et attend la confirmation du client, l’autoconfiguration d’IPv6 se contente d’envoyer régulièrement en multicast un certain nombre de paramètres (comme un préfixe et une route par défaut), le client se débrouillant ensuite pour construire son adresse IP. L’approche est radicalement différente. On dit que DHCP fait une configuration avec état, alors qu’avec radvd on se contente d’une configuration sans état.

Pour plus d’informations sur le fonctionnement de la configuration sans état d’IPv6, je vous renvoie à cet article sur Geekfault. Un point qui a son importance : c’est le routeur qui doit s’annoncer lui-même. Radvd doit donc absolument être installé sur le routeur IPv6. Dans le cadre d’un tunnel, il s’agit du bout du tunnel situé sur votre réseau. De plus, avant le démarrage, le routage d’IPv6 doit-être actif et l’interface doit avoir une IP du sous-réseau annoncé par radvd.

Les préparatifs

Pour activer le routage IPv6, vous devez utiliser cette commande (en root):

sysctl -w net.ipv6.conf.all.forwarding=1

Attention, cette manipulation est à réitérer à chaque démarrage. Pour activer l’IP forwarding de manière permanente, vous devez ajouter au fichier /etc/sysctl.conf la ligne suivante :

net.ipv6.conf.all.forwarding=1

Ensuite, vous devez ajouter votre interface une adresse appartenant au préfixe à annoncer (en général, on annonce un /64). Si vous avez un tunnel SixXS, choisissez un /64 dans le sous-réseau /48 que l’on vous a alloué, le plus simple étant de remplacer /48 par /64 pour avoir le premier d’entre-eux. Par exemple, si SixXS vous a alloué le sous-réseau 2001:db8:1337:::/48, le premier réseau est 2001:db8:1337::/64 (et le dernier est 2001:db8:1337:ffff::/64). Si votre FAI ou votre tunnel broker ne vous a alloué qu’un /64, vous n’aurez pas le choix du sous-réseau.

Pour ajouter cette adresse, vous pouvez utiliser la commande suivante (bien entendu, remplacez eth0 par votre interface et 2001:db8:1337:a::1/64 par l’adresse du sous-réseau que vous avez choisi) :

ifconfig eth0 inet6 add 2001:db8:1337:a::1/64

Là encore, cette commande doit-être refaite à chaque démarrage. Mais rien ne vous empêche de configurer votre distribution pour qu’elle rajoute cette adresse automatiquement au démarrage de la machine. Sur Debian et ses dérivées, cela se fait dans le fichier /etc/network/interfaces.

Attention, chez SixXS, vous DEVEZ avoir demandé un sous-réseau routé vers votre tunnel. Un tunnel simple permet juste de relier votre routeur à celui de SixXS. C’est un /64, donc il n’est pas divisible, et vous ne pouvez pas vous en servir pour adresser votre réseau local.

Service minimal

Voici un fichier de configuration minimal (le fichier de configuration est /etc/radvd.conf):

interface eth0 { 
    AdvSendAdvert on; 
    prefix 2001:db8:1337:a::/64 
    { 
        AdvOnLink on;
        AdvAutonomous on; 
        AdvRouterAddr on; 
    }; 
};

Ce fichier de configuration permet d’annoncer le préfixe 2001:db8:1337:a::/64 sur l’interface eth0. Bien entendu, là encore, adaptez le fichier à votre cas particulier.

Améliorations possibles

La première chose à faire est de régler la fréquence d’envoi du préfixe. Pour cela, il faut ajouter les directives MinRtrAdvInterval et MaxRtrAdvInterval dans les propriétés de l’interface. La première indique le temps minimal entre 2 annonces en secondes, la seconde quant-à elle paramètre le temps maximal entre 2 annonces, toujours en secondes. Personnellement, sur mon LAN, j’ai respectivement mis les valeurs 3 et 10.

Ensuite, on peut indiquer un temps de péremption de l’adresse plus faible que celui par défaut (30 jours !) et un temps de dépréciation également plus court. C’est utile notamment quand le routeur tombe. Enfin, il est possible d’annuler l’expiration d’une adresse. Pour indiquer une durée de vie, il faut ajouter dans la configuration du préfixe la directive AdvValidLifetime. Cette directive prend en paramètre un temps en secondes, ou alors la valeur « infinity », qui indique que l’adresse n’expirera jamais. Toutefois, la valeur de la directive AdvValidLifetime doit-être supérieure à celle de la directive AdvPreferredLifetime, qui indique le temps avant que l’adresse ne soit dépréciée. Cette directive se configure de la même manière que la précédente.

Dernier point important à régler, le MTU. Le sigle MTU signifie « Maximum Tranfert Unite ». En clair, il s’agit de la taille maximale d’un paquet. Par défaut, cette taille maximale est de 1500 sur un réseau ethernet. Mais sur un tunnel SixXS, le MTU est de 1280 par défaut. Si votre FAI vous fournit une connectivité IPv6 native et que vous vous connectez en PPPoE, le MTU sera alors de 1492. Pour éviter que les gros paquets ne soient rejetés par votre routeur (avec à la clé le message ICMP « Packet too big »), puis découpés et réexpédié par votre PC, on peut indiquer à radvd d’annoncer un MTU. Pour cela, on utilise la directive AdvLinkMTU dans les propriétés de l’interface, avec en paramètre le MTU du lien.

Au final, on obtient un fichier semblable à celui-ci :

interface eth0 { 
    AdvSendAdvert on; 
    MinRtrAdvInterval 3; #Temps minimal entre 2 annonces
    MaxRtrAdvInterval 10; #Temps maximal entre 2 annonces
    AdvLinkMTU 1280; #MTU du lien (ici 1280 pour passer dans le tunnel, 1492 en PPPoE, etc)
    prefix 2001:db8:1337:a::/64 
    { 
        AdvOnLink on; 
        AdvAutonomous on; 
        AdvRouterAddr on; 
         
        AdvPreferredLifetime 43200; #Temps avant qu'une addr ne soit dépréciée
        AdvValidLifetime 86400; #Durée de vie d'une addr
    }; 
};

Ici, le MTU est de 1280 (celui de mon tunnel SixXS), la durée de vie d’une adresse est de 24h et elle est dépréciée au bout de 12h. Enfin, les annonces de préfixes sont espacées de 3 à 10 secondes.

Autres options

Bien entendu, il existe d’autres options qui peuvent vous intéresser pour configurer radvd. Ici, je n’ai mis que celles qui m’avaient été utiles. Pour les connaitre, je vous renvoie au manuel de radvd.conf :

man 5 radvd.conf

J’espère que cet article vous aura été utile.