Réseau IPv6 : SLAAC, DHCPv6, Router Advertisements#
Pourquoi#
Ce guide vise un serveur accessible en dual-stack (IPv4 + IPv6) ; la plupart des exemples de configuration montrés (nftables, chrony, nginx) gèrent déjà les deux familles d’adresses. Mais IPv6 a un mécanisme d’attribution d’adresse fondamentalement différent d’IPv4, avec un piège classique qui peut laisser un serveur apparemment configuré mais injoignable en IPv6, sans qu’aucun message d’erreur ne le signale clairement.
Comment fonctionne l’attribution d’adresse IPv6#
Contrairement à IPv4 où DHCP fournit systématiquement adresse, passerelle et DNS en un seul mécanisme, IPv6 sépare ces responsabilités entre plusieurs mécanismes qui peuvent être combinés :
| Mécanisme | Fournit | Contrôle de l’adresse |
|---|---|---|
| SLAAC (Stateless Address Autoconfiguration, RFC 4862) | Adresse calculée par le client lui-même à partir du préfixe /64 annoncé | Non, dérivée de l’interface (ou aléatoire avec les privacy extensions, RFC 4941) |
| DHCPv6 stateful (RFC 8415) | Adresse attribuée par un serveur, depuis un pool ou une réservation | Oui, adresse fixe possible via une réservation par DUID |
| Router Advertisement (RA) | Annonce du préfixe réseau et de la passerelle | sans objet (le RA n’attribue pas d’adresse) |
Point souvent méconnu, et source d’un piège classique : DHCPv6 stateful ne fournit jamais la route par défaut. La passerelle IPv6 vient toujours des Router Advertisements, jamais de DHCPv6. Un serveur DHCPv6 actif sans RA sur le même segment réseau distribue des adresses… vers lesquelles personne ne peut router de trafic.
Le RA porte deux indicateurs qui déterminent le comportement du client :
| M (Managed) | O (Other) | A (Autonomous, dans le préfixe) | Mode |
|---|---|---|---|
| 0 | 0 | 1 | SLAAC pur |
| 0 | 1 | 1 | SLAAC + DHCPv6 stateless (DNS uniquement) |
| 1 | 1 | 0 | DHCPv6 stateful, adresse fixe + passerelle via RA |
| 1 | 1 | 1 | DHCPv6 stateful + SLAAC en parallèle |
Pour un serveur où l’on veut une adresse fixe et prévisible (condition
nécessaire pour un enregistrement DNS AAAA stable), le mode Managed
(M=1, O=1, A=0) est le bon choix : DHCPv6 fournit une adresse réservée par
DUID, et les RA (activés en parallèle sur le routeur) fournissent la
passerelle.
Erreurs à éviter#
Un serveur DHCPv6 stateful actif, sans Router Advertisements sur le même segment, est un état incohérent qui ne se révèle qu’à l’usage. Le symptôme est déroutant : le routeur a bien une réservation DHCPv6 pour l’adresse du serveur, le DNS public a bien un enregistrement
AAAApointant dessus, et pourtant le serveur n’a aucune adresse IPv6 globale, seulement son adressefe80::link-local. Le trafic IPv6 entrant légitime arrive (visible entcpdumpsous forme de Neighbor Solicitations répétées, “qui a cette adresse ?”), mais personne ne répond. Cause : sans RA actif, le client ne déclenche même pas de requête DHCPv6 : c’est le flag M=1 du RA qui déclenche ce comportement côté client (RFC 4861 §4.6.2). Un pool DHCPv6 configuré côté routeur mais jamais sollicité ne sert donc à rien.
- Confondre “le serveur ne répond pas au ping6 sortant” avec “IPv6 ne
fonctionne pas”. Une requête ICMPv6 echo-request sortante qui
timeout peut simplement signifier qu’elle est filtrée par le pare-feu
amont en sortie (configuration par défaut fréquente), ce qui n’empêche
absolument pas les clients IPv6 externes de joindre le serveur en TCP
(HTTPS) ou UDP (NTP). Le trafic entrant réel (logs nginx,
chronyc serverstats) doit toujours être vérifié avant de conclure à une panne IPv6 complète. - Activer SLAAC en plus de DHCPv6 stateful sans besoin identifié
(mode
Assisted, A=1). Le serveur se retrouve alors avec deux adresses IPv6 globales simultanées, une dérivée de l’EUI-64/aléatoire via SLAAC, une fixe via DHCPv6. Fonctionnellement correct, mais cela complique la cohérence des enregistrements DNS et le diagnostic. Sauf besoin spécifique, le modeManagedpur (A=0) reste préférable.
Vérifier#
# Adresses IPv6 actuellement attribuées
ip -6 addr show
# Présence effective de Router Advertisements sur le segment
# 134 = type ICMPv6 "Router Advertisement" (RFC 4861), le byte 40 étant le
# premier de l'en-tête ICMPv6 qui suit l'en-tête IPv6 fixe de 40 octets
timeout 30 tcpdump -i end0 -n -v 'icmp6 and ip6[40] = 134'
# Doit capturer au moins un message dans les 30 secondes (les routeurs
# émettent des RA périodiques, généralement toutes les quelques minutes,
# en plus de répondre aux sollicitations)
# Route par défaut IPv6 effectivement apprise
ip -6 route show default
# Test de bout en bout depuis une machine tierce
curl -6 https://time.example.org/Si ip -6 addr show ne montre qu’une adresse fe80::/10 (link-local)
malgré une configuration DHCPv6 censée fournir une adresse globale, le
diagnostic doit se porter immédiatement sur l’absence de RA côté routeur :
c’est la cause la plus fréquente de ce symptôme précis.
📚 Pour aller plus loin
- RFC 8200 définit IPv6 lui-même (adressage 128 bits).
- RFC 4862 spécifie SLAAC (Stateless Address Autoconfiguration).
- RFC 8415 spécifie DHCPv6, y compris le mécanisme stateful et les types de DUID (DHCP Unique Identifier) utilisés pour les réservations.
- RFC 4861 (Neighbor Discovery Protocol) définit le format et la sémantique des Router Advertisements, notamment les flags M/O et les options Prefix Information (flag A).
- RFC 4941 introduit les privacy extensions pour SLAAC (adresses temporaires aléatoires plutôt que dérivées du MAC), pertinentes pour des clients mais non souhaitables pour un serveur dont l’adresse doit rester stable pour le DNS. Obsolète depuis 2021, remplacée par la RFC 8981 (Temporary Address Extensions…), qui couvre le même mécanisme.