<?xml version="1.0" encoding="utf-8"?>
<rfcdesc title="Operational Guidelines for DNS Transport in Mixed IPv4/IPv6 Environments" num="10001" status="bcp" wg="dnsop">
  <authors><author>Momoka (WIDE Project)</author><author>T. Fiebig (MPI-INF)</author></authors>
  <rfcdate><month>August</month><year>2026</year></rfcdate>
  <date>2026-08-31</date>
<content>
  <p>Vous gérez des serveurs <wikipedia name="Domain Name
  System">DNS</wikipedia> (qu'ils soient des <link
  local="resolveur-dns">résolveurs</link> ou des <link
  local="serveur-dns-faisant-autorite">serveurs faisant
  autorité</link>) dans un environnement où il y a à la fois
  <wikipedia>IPv4</wikipedia> et <wikipedia>IPv6</wikipedia> ? Alors,
  ce <wikipedia name="Request for comments">RFC</wikipedia> va vous
  aider. Il remplace le <rfc num="3901" local="false"/>, qui avait été
  écrit pour un monde très différent, où IPv6 était
  marginal. Désormais, la recommandation est que tout serveur DNS
  doit pouvoir servir les
  requêtes avec les deux versions d'<wikipedia name="Internet
  Protocol">IP</wikipedia>.</p>
  <p>Alors que le plan de transition initial pariait sur une migration
  de quelques années suite à laquelle IPv4 ne serait plus qu'un
  souvenir, la réalité est celle d'une co-existence de longue durée
  des deux versions (cf. <rfc num="9386" local="false"/>). Le retard
  avec lequel certains acteurs de l'Internet ont migré fait que le
  paysage d'aujourd'hui est très complexe, avec des réseaux purement
  <wikipedia>IPv4</wikipedia>, des réseaux purement
  <wikipedia>IPv6</wikipedia> et des réseaux mixtes. Si une zone
  <wikipedia name="Domain Name System">DNS</wikipedia> n'est servie
  que par des <link
  local="serveur-dns-faisant-autorite">serveurs</link> en IPv6, un
  <link local="resolveur-dns">résolveur</link> n'ayant qu'IPv4 ne
  pourra pas la résoudre, et c'est pareil en sens inverse. On aurait
  une <emphasis>fragmentation</emphasis> de l'espace des noms de
  domaine, et c'est ce qu'il faut éviter. (Du fait du caractère
  arborescent du DNS, la fragmentation pourrait aussi se produire si
  un domaine parent, quelque part entre la racine et le domaine que
  vous voulez résoudre, n'avait qu'IPv4 ou qu'IPv6. Le RFC cite un cas
  encore plus amusant où, dans la chaine des noms, certains domaines
  ne sont accessibles qu'en IPv4 et d'autres qu'en IPv6 ; seul un
  résolveur à double pile - IPv4 <emphasis>et</emphasis> IPv6 -
  pourrait résoudre les noms situés au bout de cette chaine.) La
  lecture de « <foreign><link
  url="https://link.springer.com/chapter/10.1007/978-3-031-28486-1_22">How
  Ready is DNS for an IPv6-Only World?</link></foreign> est
  recommandée.</p>
  <p>Lorsque le <rfc num="3901" local="false"/>, premier <wikipedia
  name="Request for comments">RFC</wikipedia> à parler de la version
  d'IP utilisée pour transporter les requêtes et les réponses DNS, a
  été écrit, le paysage était nettement dominé par IPv4. Ce <rfc
  num="3901" local="false"/> se préoccupait surtout de maintenir la
  résolution de noms avec les zones existantes, dont l'écrasante
  majorité n'était servie qu'en IPv4. Aujourd'hui (voyez le <link
  url="https://www.arcep.fr/cartes-et-donnees/nos-publications-chiffrees/transition-ipv6/barometre-annuel-de-la-transition-vers-ipv6-en-france.html">rapport
  ARCEP</link>), IPv6 est dans une position très différente, dans
  certains pays, la grande majorité des réseaux d'accès fournit IPv6,
  et les gros services Web populaires ont souvent IPv6. Bien des
  réseaux sont purement IPv6 à la base, IPv4 étant désormais un service
  fourni au-dessus d'IPv6. Le <rfc num="6540" local="true"/> considère
  à juste titre que <wikipedia name="Internet
  Protocol">IP</wikipedia>, aujourd'hui, implique IPv6. Notre
  <wikipedia name="Request for comments">RFC</wikipedia> remplace donc
  le <rfc num="3901" local="false"/> pour demander de l'IPv6 sur tous
  les serveurs faisant autorité et tous les résolveurs.</p>
  <p>Un petit rappel au passage : ce RFC parle du transport des
  données dans les requêtes et les réponses DNS,
  <emphasis>pas</emphasis> des données elles-mêmes. Une requête/réponse
  pour des données de type A (adresses IPv4) peut se faire sur des
  messages échangés sur IPv6 et une requête/réponse pour des données
  de type AAAA (adresses IPv6) peut se faire sur des messages échangés
  sur IPv4.</p>
  <p>Donc, il faut IPv4 et IPv6 sur les serveurs. Mais il ne suffit
  pas de croire qu'on a activé les deux. Des erreurs de configuration
  peuvent faire qu'on pense avoir IPv4 et IPv6 mais qu'un des deux ne
  marche pas. Cela peut être dû à un <wikipedia name="Pare-feu
  (informatique)">pare-feu</wikipedia> qu'on a mis devant le serveur
  DNS (une mauvaise idée, en général, mais c'est une autre histoire)
  et qui n'autorise qu'une des deux versions. Mais il peut aussi y
  avoir des erreurs spécifiquement DNS :
  <enum>
    <item>Les serveurs faisant autorité ont IPv4 mais pas
    d'enregistrements de type A (ou bien ils ont IPv6 mais on a oublié
    de publier un AAAA),</item>
    <item>les serveurs ont bien les enregistrements A et AAAA dans
    leur zone mais on a oublié <link url="https://www.afnic.fr/observatoire-ressources/papier-expert/le-dns-ca-colle-ou-ca-ne-colle-pas/">la
    colle</link> (<rfc num="9471" local="false"/>),</item>
    <item>il y a la colle mais pas d'enregistrements dans la zone, ce
    qui empêcherait les résolveurs qui revalident (cf. <computer><link
    url="https://datatracker.ietf.org/doc/draft-ietf-dnsop-ns-revalidation/">draft-ietf-dnsop-ns-revalidation</link></computer>) de résoudre le
    nom,</item>
    <item>le nom du serveur de noms est dans une autre zone, qui n'est
    pas elle-même résolvable en IPv4 et IPv6,</item>
    <item>une des zones situées au dessus, dans l'arbre du DNS, n'est
    pas résolvable avec les deux versions d'IP (la <link url="https://www.afnic.fr/wp-media/uploads/2024/09/DNS-resolution-web.jpg">résolution DNS</link> part
    de la racine et suit un chemin descendant dans l'arbre des noms de
    domaine).</item>
  </enum>
  Toutes ces erreurs possibles imposent à l'administrateurice DNS de
  <emphasis>vérifier</emphasis> sa zone. On ne doit pas se contenter de
  se dire « c'est bon, j'ai tout configuré, on doit
  <emphasis>tester</emphasis>, par exemple avec <link
  url="https://zonemaster.fr/">Zonemaster</link> (ou, en plus léger et
  moins riche, <link url="https://framagit.org/bortzmeyer/check-soa">check-soa</link>).
  Et re-tester régulièrement car des erreurs peuvent survenir par la
  suite.
  <code>
% check-soa bortzmeyer.org
ns-global.kjsl.com.
	23.128.97.53: OK: 2026083000
	2607:7c80:53::53: OK: 2026083000
ns.eu.org.
	78.194.169.74: OK: 2026083000
ns1.bortzmeyer.org.
	80.77.95.49: OK: 2026083000
	2602:fbb1:1:245b::42: OK: 2026083000
ns1.shaftinc.fr.
	2001:41d0:404:200::49e1: OK: 2026083000
	51.178.53.118: OK: 2026083000
ns2.bortzmeyer.org.
	2400:8902::f03c:91ff:fe69:60d3: OK: 2026083000
	172.104.125.43: OK: 2026083000
ns2.shaftinc.fr.
	2a05:f480:1c00:28a:5400:2ff:fee7:316f: OK: 2026083000
	136.244.112.196: OK: 2026083000
ns4.bortzmeyer.org.
	2001:4b98:dc0:41:216:3eff:fe27:3d3f: OK: 2026083000
	92.243.4.211: OK: 2026083000
  </code>
  </p>
  <p>Il peut aussi y avoir des problèmes dûs au réseau. L'un des plus
  courants est un problème de <wikipedia name="Maximum Transmission
  Unit">MTU</wikipedia>. Si la réponse, notamment en raison des
  signatures <wikipedia name="Domain Name System Security
  Extensions">DNSSEC</wikipedia>, dépasse la MTU du chemin, elle devra
  être <wikipedia xml:lang="en" name="IP fragmentation">fragmentée</wikipedia> et, dans l'Internet tel qu'il
  est, cela se passera souvent mal (cf. <rfc num="8900" local="true"/>
  et <rfc num="9715" local="true"/>). Il vaut mieux, pour un serveur
  DNS, éviter d'envoyer des réponses trop grosses (le RFC suggère
  1 232 octets maximum), pour être sûr qu'il n'y ait pas de
  fragmentation. (Attention, le mot « fragmentation » ici n'a pas le
  même sens que plus haut, quand on parlait de fragmentation de
  l'espace de noms.) Notez que DNSSEC n'est pas nécessaire pour faire
  des grosses réponses. Essayez <computer>oracle.com/TXT</computer>
  pour voir.</p>
  <p>Ça, c'était pour <wikipedia name="User Datagram Protocol">UDP</wikipedia>. Et pour <wikipedia name="Transmission Control Protocol">TCP</wikipedia> ?  Bien sûr, la
  <wikipedia name="Path MTU discovery">découverte de la MTU du chemin</wikipedia> existe (<rfc
  num="8201" local="true"/>, <rfc num="8899" local="true"/>) mais
  elle prend du temps alors que le DNS est censé avoir une très faible
  <link local="latence">latence</link>. Le RFC recommande donc de
  configurer la <wikipedia name="Maximum Segment Size">MSS</wikipedia>
  à moins de 1 388 octets.</p>
  <p>Mais il n'y a pas que la MTU. Par exemple, un résolveur peut
  avoir des problèmes de connectivité. Un cas où elle sera interrompue
  de manière intermittente (et donc difficile à déboguer) est celui
  où le résolveur est derrière un routeur <wikipedia name="Carrier-grade NAT">CGNAT</wikipedia>
  (<rfc num="6888" local="true"/>) avec des délais d'expiration des
  « connexions » très court. Le trafic DNS, plutôt variable, ne sera
  pas suffisant pour maintenir la « connexion » ouverte. Et le RFC
  cite de nombreux autres exemples de problèmes réseau possibles.</p>
  <p>Il est aussi possible qu'un serveur ne soit pas accessible avec
  une des deux versions d'IP suite à un choix délibéré. Si on regarde
  le domaine de la <wikipedia name="Bibliothèque nationale de France">BNF</wikipedia>, par exemple :
  <code>
% check-soa bnf.fr
ariane.bnf.fr.
	193.50.133.237: OK: 2026081807
galatee.bnf.fr.
	193.50.133.202: OK: 2026081807
  </code>
  Pas d'IPv6 du tout. Comme le <wikipedia name="Fournisseur d'accès à
  Internet">FAI</wikipedia> de la BNF route l'IPv6, c'est certainement
  un choix délibéré. En 2023 (étude « <foreign><link
  url="https://link.springer.com/chapter/10.1007/978-3-031-28486-1_22">How
  Ready is DNS for an IPv6-Only World?</link></foreign> »), presque
  aucun domaine n'avait que IPv6 alors que presque la moitié de ceux
  testés n'avait que IPv4 (comme <computer>bnf.fr</computer>).</p>
  <p>Après ces observations et analyses, le RFC, dans sa section 4, en
  arrive aux recommandations. Pour les serveurs faisant autorité, il faut, notamment :
  <enum>
    <item>La règle « au moins deux serveurs faisant autorité par
    zone » devrait désormais être entendue comme « au moins deux en
    IPv4 et deux en IPv6 ». (On notera que cela ne figure pas dans
    <link url="https://www.iana.org/help/nameserver-requirements">les
    recommandations IANA</link>, cf. section 6 du RFC.) <link
    url="https://zonemaster.fr/">Zonemaster</link> fait déjà <link
    url="https://zonemaster.fr/fr/result/11e8b6128b27cdf2/">ce
    test</link> (« Les serveurs de noms de la zone ne retournent pas assez de serveurs (1) faisant autorité ayant une adresse IPv6. La limite inférieure étant fixée à 2.  »).</item>
    <item>Évidemment, ces (au moins) deux serveurs IPv6 ne doivent pas
    utiliser des adresses IPv6 spéciales, genre
    <foreign>IPv4-embedded</foreign> (<rfc num="6052" local="true"/>),
    et la résolution de leurs noms ne doit pas nécessiter IPv4.</item>
    <item>Toujours aussi évidemment, les serveurs faisant autorité
    doivent servir les mêmes données en IPv4 et IPv6.</item>
    <item>Et pour être sûr de pouvoir passer des données de grande
    taille, sans compter sur la fragmentation, tous les serveurs
    doivent accepter TCP (<rfc num="9210" local="true"/>).</item>
  </enum>
  Pour les résolveurs :
  <enum>
    <item>Dans presque tous les cas, le résolveur devrait pouvoir
    parler IPv4 et IPv6.</item>
    <item>Si le résolveur n'a qu'IPv6 (ce qui sera de plus en plus
    fréquent), il faut qu'il puisse utiliser un mécanisme de
    coexistence qui lui permette de résoudre des zones purement
    IPv4 (par exemple <rfc num="6146" local="true"/>, peut-être avec
    <rfc num="8781" local="true"/>, ou bien en étant capable de faire
    suivre à un autre résolveur ayant tout ce qu'il faut).</item>
    <item>Pour les résolveurs simplifiés (<foreign>stub
    resolvers</foreign>), comme celui dans la
    <wikipedia name="Bibliothèque standard du C">libc</wikipedia>, il faut s'assurer que les résolveurs
    complets à qui ils transmettent leurs requêtes savent faire IPv4
    et IPv6 (en indiquer plusieurs, par exemple dans
    <computer>/etc/resolv.conf</computer> sur
    <wikipedia>Unix</wikipedia>, ne marche pas bien, en raison de la
    limite sur leur nombre mais aussi du retard que cela entraine).</item>
  </enum></p>
  <p>Le RFC ne semble pas en parler mais je tiens à ajouter une de mes
  obsessions personnelles : il faut <wikipedia name="Supervision (informatique)">superviser</wikipedia>
  automatiquement vos serveurs DNS, en IPv4 <emphasis>et</emphasis>
  IPv6. Voici par exemple la configuration que j'utilise avec
  <wikipedia xml:lang="en">Icinga</wikipedia> :
  <code>
apply Service "dns-auth4" {                                   
  check_command = "dig"
  assign where host.address &amp;&amp; host.vars.dns_auth
  vars.dig_server = host.address
  vars.dig_ipv4 = true
  …
}
  
apply Service "dns-auth6" {
  check_command = "dig"     
  assign where host.address6 &amp;&amp; host.vars.dns_auth
  vars.dig_server = host.address6
  vars.dig_ipv6 = true
  …
}

object Host "mononoke" {
  address = "mononoke.bortzmeyer.org"                               
  address6 = "mononoke.bortzmeyer.org"   
  vars.dns_auth = 1                   
  …
}
  </code>
  Et le serveur DNS sera alors testé avec les deux versions d'IP.
  </p>
  <p>L'annexe A du RFC résume les changements depuis le <rfc
  num="3901" local="false"/> :
  <enum>
    <item>Longue discussion sur la question de la
    fragmentation,</item>
    <item>Et surtout recommandation d'avoir les deux versions d'IP
    partout (et de le tester).</item>
  </enum>
  </p>
</content>
</rfcdesc>
