6. Resolver DNS

Même si cette section fait formellement partie de l'autoconfiguration du poste client, on lui réserve un traitement particulier. Comme indiqué dans la Section 2, « Préambule : Stateful versus Stateless », l'autoconfiguration IPv6, telle qu'elle est présentée dans la section précédente, se limite strictement à la couche réseau de la modélisation. Relativement à un service DHCP classique, il manque la désignation du serveur DNS. On se retrouve dans une situation assez paradoxale. Un service d'autoconfiguration limité à la couche réseau convient très bien aux équipements d'interconnexion réseau. Or, on peut dire que jusqu'à présent, ces équipements ont des besoins limités dans ce domaine. À l'opposé, les hôtes raccordés aux réseaux ont un grand besoin du service d'autoconfiguration et ne peuvent pas se passer de la configuration du resolver DNS. En effet, la moindre communication réseau utilise les noms de domaines sur un hôte et il est impossible d'initier cette communication si les programmes de la couche application ne disposent pas d'un serveur DNS à contacter.

Dans la Section 4, « Autoconfiguration côté routeur », le paquet radvd a été configuré pour annoncer deux adresses de serveur DNS. Il faut maintenant que ces annonces soient exploitées côté client. Cette opération implique l'utilisation de deux paquets.

resolvconf

Le paquet resolvconf n'est pas lié à priori à l'autoconfiguration IPv6. Son rôle est d'arbitrer les accès au fichier /etc/resolv.conf. Les entrées placées dans ce fichier sont utilisées par la bibliothèque standard dès qu'il est question d'une opération sur un nom d'hôte. On peut citer l'exemple de l'appel à getaddrinfo() présenté dans le document Initiation au développement C sur les sockets IPv4 & IPv6.

Historiquement, de nombreuses applications de configuration réseau avaient la possibilité d'écrire dans le fichier /etc/resolv.conf sans tenir compte de la «concurrence». Le script resolvconf est appelé dès qu'une interface réseau est activée ou désactivée. Il se charge alors d'éditer le contenu du fichier de configuration si besoin.

Dans le cas présent, resolvconf est là pour implanter les entrées de serveur DNS annoncées dans les paquets RAs.

rdnssd

Le démon rdnssd scrute les annonces RDNSS et les traduit dans son propre fichier resolv.conf. Ce fichier est ensuite traité par le script resolvconf de façon à fournir au système un fichier /etc/resolv.conf.

Dans le cas de la maquette, seul le protocole IPv6 est utilisé. Dans un cas de fonctionnement en double pile IPv4 et IPv6, le script resolvconf veille à conserver les entrées des deux protocoles pour respecter les choix des programmes de la couche application.

Voici le résultat produit lorsque les deux paquets sont installés sur le système.

etu@vm21:~$ cat /etc/resolv.conf 
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 2001:db8:feb2:2::1
nameserver 2001:4860:4860::8888

On retrouve bien les deux adresses IPv6 définies dans le fichier de configuration du démon radvd.

On teste simplement l'utilisation de la bibliothèque standard à l'aide de la commande host du paquet bind9-host.

etu@vm21:~$ host www.nic.fr
www.nic.fr is an alias for web01.nic.fr.
web01.nic.fr has address 192.134.5.5
web01.nic.fr has IPv6 address 2001:67c:2218:30::5