Chapitre 117 minIntermédiaire
Comment fonctionne le DNS : résolution récursive et itérative
Par Josselyn C., prof de BTS SIO. Mis à jour le .
À la fin de ce chapitre, tu sauras
- distinguer un résolveur d'un serveur faisant autorité ;
- dérouler la résolution d'un nom, de la racine jusqu'à la réponse ;
- expliquer le rôle du cache, du TTL et du cache négatif ;
- lire les codes de réponse et les drapeaux d'une réponse DNS ;
- citer les attaques contre le DNS et leurs parades.
4 exercices corrigés1 schéma
Le DNS (Domain Name System) est l'annuaire distribué qui traduit un nom comme intranet.sorbier.example en adresse IP, et l'inverse. Pour trouver une réponse, un résolveur interroge, de proche en proche, des serveurs faisant autorité : la racine, puis le domaine de premier niveau, puis le serveur qui connaît la zone. Ce chapitre décrit cette mécanique pas à pas, le rôle du cache et du TTL, et ce qui se passe sur le poste avant même la première question.
Pourquoi un annuaire distribué
Au début d'Internet, un seul fichier, HOSTS.TXT, listait toutes les machines du réseau. Chacun le téléchargeait régulièrement. Quand le réseau a dépassé quelques milliers de machines, le fichier est devenu ingérable : trop gros, jamais à jour, modifiable par une seule équipe. Le DNS, normalisé en 1987 (RFC 1034 et 1035), a remplacé ce fichier par une base hiérarchique et répartie : chaque organisation gère elle-même la partie de l'arbre qui la concerne, sur ses propres serveurs.
Le fichier hosts a survécu sur chaque machine (C:\Windows\System32\drivers\etc\hosts sous Windows, /etc/hosts sous Linux). Il est lu avant le DNS : une ligne oubliée dedans peut fausser toute une résolution. C'est un des premiers endroits à regarder en dépannage.
L'arborescence des noms
Les noms forment un arbre, lu de droite à gauche :
| Niveau | Exemple | Qui le gère |
|---|---|---|
| Racine | . (le point final, souvent omis) | 12 opérateurs, coordonnés par l'IANA |
| Domaine de premier niveau (TLD) | fr, com, org, example | Un registre : l'AFNIC pour .fr, Verisign pour .com |
| Domaine de deuxième niveau | sorbier.example | L'organisation qui l'a acheté, via un bureau d'enregistrement |
| Sous-domaines | ad.sorbier.example | L'organisation elle-même |
| Nom d'hôte | srv-fichiers.ad.sorbier.example | L'administrateur de la zone |
Un FQDN (Fully Qualified Domain Name) est un nom complet jusqu'à la racine, avec son point final : srv-fichiers.ad.sorbier.example.. Chaque partie entre deux points est une étiquette de 63 caractères au plus, et le nom complet ne dépasse pas 253 caractères. Les noms ne tiennent pas compte de la casse : SRV-AD et srv-ad désignent la même machine.
Le TLD .example est réservé à la documentation (RFC 2606), comme les adresses 203.0.113.0/24 et 198.51.100.0/24 : aucun de ces noms n'existe vraiment sur Internet, c'est pour cela que le cours les utilise.
Les deux rôles d'un serveur DNS
Le mot « serveur DNS » désigne deux métiers très différents. Les confondre est l'erreur la plus fréquente en TP comme en épreuve.
| Résolveur (serveur récursif) | Serveur faisant autorité | |
|---|---|---|
| Question à laquelle il répond | « Trouve-moi l'adresse de ce nom, quel qu'il soit » | « Que contient ma zone ? » |
| Qui l'interroge | Les postes et les serveurs du réseau | Les résolveurs du monde entier |
| D'où vient sa réponse | De son cache, ou d'une enquête auprès d'autres serveurs | De ses propres fichiers de zone ou de l'annuaire |
| Exemples | Le DNS de ta box, srv-ad pour les postes de Sorbier, le résolveur de pfSense, Quad9 (9.9.9.9) | Les serveurs racines, ceux de l'AFNIC, ceux qui hébergent la zone sorbier.example |
| Danger s'il est mal configuré | Ouvert à tout Internet, il sert à des attaques par amplification | Il transfère sa zone à n'importe qui |
Un même logiciel peut tenir les deux rôles. Les contrôleurs de domaine de Sorbier le font : ils font autorité pour la zone interne ad.sorbier.example et ils résolvent les noms d'Internet pour les postes. Sur Internet, on sépare les deux : un serveur public qui fait autorité ne doit pas faire de résolution pour les inconnus (chapitre 4).
La résolution d'un nom, étape par étape
Julie Lefèvre, comptable chez Sorbier, ouvre www.service-public.fr depuis son poste du VLAN 10. Son poste a reçu par DHCP les résolveurs 192.168.10.177 (srv-ad) et 192.168.10.181 (srv-ad2). On suppose que les caches sont vides et que srv-ad utilise les indications de racine (il fait lui-même l'enquête, sans redirecteur).
- Le poste vérifie son cache DNS et son fichier
hosts. Rien. Il envoie àsrv-adune requête récursive : « donne-moi l'adresse dewww.service-public.fr, et débrouille-toi pour la trouver ». Le bit RD (Recursion Desired) de la requête est à 1. srv-adne connaît pas la réponse. Il interroge un des 13 serveurs racines, dont il connaît les adresses par ses indications de racine. C'est une requête itérative : le serveur interrogé répond avec ce qu'il sait, sans enquêter.- La racine ne connaît pas
www.service-public.fr, mais elle sait qui gère.fr. Elle répond par une délégation (referral) : la liste des serveurs de noms de.fr, avec leurs adresses. srv-adpose la même question à un serveur de.fr.- Le serveur de
.frdélègue à son tour : voici les serveurs qui font autorité pourservice-public.fr. srv-adinterroge un de ces serveurs.- Celui-ci fait autorité pour la zone : il donne la réponse, marquée du bit AA (Authoritative Answer). Ici, c'est un alias (CNAME) suivi d'une adresse.
srv-adgarde la réponse et les délégations en cache, puis répond au poste. Le poste garde aussi la réponse dans son propre cache.
Les étapes 2 à 7 n'ont lieu qu'au premier accès. Dix secondes plus tard, Karim Morel ouvre le même site : srv-ad répond directement depuis son cache, en moins d'une milliseconde. Et s'il demande www.impots.gouv.fr, srv-ad sait déjà qui gère .fr : il saute l'étape de la racine.
Requête récursive, requête itérative : la différence
| Requête récursive | Requête itérative | |
|---|---|---|
| Envoyée par | Le poste (le « résolveur de souche », stub resolver), ou un serveur vers son redirecteur | Le résolveur, vers les serveurs faisant autorité |
| Ce qu'on attend | La réponse finale, ou un échec | La meilleure réponse que le serveur connaît : la réponse, ou une délégation |
| Bit RD | 1 | 0 en général |
| Travail fourni par le serveur interrogé | Toute l'enquête | Aucune enquête |
Un redirecteur (forwarder) change le schéma : au lieu d'enquêter lui-même, srv-ad envoie une requête récursive à un autre résolveur (celui de pfSense, du fournisseur d'accès ou d'un service comme Quad9), qui fait l'enquête à sa place. Le chapitre 3 compare les deux choix.
Le cache et le TTL
Chaque enregistrement porte un TTL (Time To Live), en secondes : la durée pendant laquelle un résolveur a le droit de garder la réponse en cache. Il est fixé par l'administrateur de la zone.
| TTL | Effet | Quand le choisir |
|---|---|---|
| Court (300 s, 5 minutes) | Un changement d'adresse se propage vite, mais les serveurs faisant autorité reçoivent plus de requêtes | Avant une migration, ou pour un service qui bascule (reprise d'activité) |
| Moyen (3 600 s, 1 heure) | Le compromis le plus courant | La plupart des enregistrements |
| Long (86 400 s, 1 jour) | Peu de requêtes, mais une erreur reste visible un jour entier | Les enregistrements qui ne changent jamais (NS, MX stables) |
Le cache garde aussi les réponses négatives : si un nom n'existe pas (réponse NXDOMAIN), le résolveur s'en souvient pendant une durée fixée par la zone, dans son enregistrement SOA (RFC 2308). Si tu crées un nom juste après qu'un poste l'a demandé en vain, ce poste peut continuer à recevoir « nom inexistant » pendant ce délai. La solution : vider le cache (ipconfig /flushdns sur le poste, Clear-DnsServerCache sur le serveur Windows, rndc flush sur BIND).
Les ports : UDP 53, TCP 53, et au-delà
Une requête DNS ordinaire tient dans un seul datagramme UDP, sur le port 53 du serveur : pas de connexion à établir, c'est rapide. Le DNS utilise aussi TCP 53 :
- quand la réponse est trop grosse pour UDP : le serveur renvoie une réponse tronquée (bit TC) et le client recommence en TCP ;
- pour les transferts de zone entre serveurs (chapitre 2) ;
- pour les variantes chiffrées : DNS over TLS sur TCP 853, DNS over HTTPS sur TCP 443 (chapitre 5).
À l'origine, une réponse UDP était limitée à 512 octets. L'extension EDNS(0) permet d'annoncer une taille plus grande ; depuis le « DNS Flag Day » de 2020, la valeur recommandée est de 1 232 octets, pour éviter la fragmentation IP. C'est la valeur que dig affiche dans la ligne udp: 1232.
Ce qui se passe sur le poste avant la requête
Une application ne parle presque jamais directement au DNS : elle demande au système « quelle est l'adresse de ce nom ? ». Le système suit un ordre précis.
| Étape | Windows 11 et Windows Server 2025 | Debian 13 |
|---|---|---|
| 1 | Cache du client DNS (ipconfig /displaydns), où sont aussi chargées les lignes du fichier hosts | Fichier /etc/hosts, si /etc/nsswitch.conf dit hosts: files dns |
| 2 | Serveurs DNS de la carte réseau, dans l'ordre (le second n'est interrogé que si le premier ne répond pas) | Serveurs de /etc/resolv.conf (lignes nameserver), ou le service systemd-resolved s'il est installé |
| 3 | Si le nom est court (srv-fichiers), le système ajoute le suffixe DNS (ad.sorbier.example) reçu par DHCP ou du domaine | Directive search de /etc/resolv.conf |
| 4 | En dernier recours, diffusion locale LLMNR, mDNS ou NetBIOS : à désactiver en entreprise, car un attaquant peut y répondre à la place du serveur | mDNS si Avahi est installé |
Retiens deux conséquences pratiques. Un poste qui a un serveur DNS public (8.8.8.8) en premier ne trouvera jamais les noms internes. Et un poste dont le second DNS est public peut basculer dessus au premier incident réseau : les deux serveurs configurés doivent connaître les mêmes zones. Chez Sorbier, les postes reçoivent srv-ad et srv-ad2, et seulement eux.
Les codes de réponse et les drapeaux
Chaque réponse DNS porte un code de retour (RCODE) et des drapeaux. Ce sont les premières choses à lire dans une sortie de dig ou une capture Wireshark.
| Code | Sens | Cause habituelle |
|---|---|---|
NOERROR | La requête a abouti | Si la section réponse est vide, le nom existe mais pas avec ce type (pas de AAAA, par exemple) : on parle de réponse NODATA |
NXDOMAIN | Le nom n'existe pas | Faute de frappe, enregistrement absent, mauvais suffixe, ou serveur qui ne connaît pas la zone interne |
SERVFAIL | Le serveur n'a pas pu répondre | Serveurs faisant autorité injoignables, zone mal chargée, échec de validation DNSSEC |
REFUSED | Le serveur refuse de répondre | Récursion interdite pour ce client, transfert de zone non autorisé |
| Drapeau | Signification |
|---|---|
qr | C'est une réponse (et non une question) |
aa | Réponse faisant autorité : elle vient du serveur qui détient la zone |
rd | Récursion demandée par le client |
ra | Récursion disponible sur ce serveur |
tc | Réponse tronquée : recommencer en TCP |
ad | Données authentifiées : le résolveur a validé la signature DNSSEC |
Voici une réponse lue avec dig depuis un serveur Debian de Sorbier :
$ dig @192.168.10.177 srv-fichiers.ad.sorbier.example
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41872
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; QUESTION SECTION:
;srv-fichiers.ad.sorbier.example. IN A
;; ANSWER SECTION:
srv-fichiers.ad.sorbier.example. 3600 IN A 192.168.10.178
;; Query time: 1 msec
;; SERVER: 192.168.10.177#53(192.168.10.177) (UDP)
status: NOERROR, une réponse ; aa : srv-ad fait autorité pour cette zone ; ra : il accepte aussi la récursion ; TTL de 3 600 secondes. La même question posée pour www.service-public.fr reviendrait sans le drapeau aa : srv-ad répondrait depuis son cache, en résolveur.
Le DNS et la sécurité
Le DNS a été conçu sans aucune protection : les réponses ne sont ni signées ni chiffrées. Les attaques qui en profitent, à connaître pour l'E7 :
| Attaque | Principe | Symptômes et détection | Parades |
|---|---|---|---|
| Empoisonnement de cache | Faire accepter à un résolveur une fausse réponse, qu'il resservira à tous ses clients | Un nom connu pointe vers une adresse inattendue ; écart entre la réponse du résolveur et celle du serveur faisant autorité | Ports source aléatoires (par défaut sur tous les résolveurs actuels), validation DNSSEC |
| Usurpation locale | Répondre plus vite que le vrai serveur sur le réseau local, ou se poser en faux serveur DHCP qui distribue un faux DNS | Postes avec un serveur DNS inconnu dans ipconfig /all | Surveillance DHCP sur les switchs, désactivation de LLMNR et NetBIOS |
| Amplification | Envoyer de petites requêtes à un résolveur ouvert avec l'adresse source de la victime, qui reçoit de grosses réponses | Trafic DNS sortant massif vers une seule adresse | Ne jamais ouvrir la récursion à Internet, limiter le débit des réponses |
| Tunnel DNS | Faire sortir des données dans des noms de requêtes très longs vers un domaine contrôlé par l'attaquant | Requêtes nombreuses, longues et aléatoires vers un même domaine, souvent de type TXT | Obliger les postes à passer par le résolveur interne, journaliser et analyser les requêtes (SIEM) |
Le chapitre 5 détaille les protections : DNSSEC pour l'authenticité des réponses, DNS over TLS et DNS over HTTPS pour la confidentialité.
Exercices
Exercice 1 sur 4 Résolveur ou serveur faisant autorité ? Réussi À revoir
Pour chaque serveur, dis s'il agit en résolveur, en serveur faisant autorité, ou les deux.
- Le serveur
a.root-servers.net. - Le service DNS de pfSense, que les postes du Wi-Fi invité de Sorbier utilisent.
srv-ad, qui porte la zonead.sorbier.exampleet que les postes utilisent comme serveur DNS.- Le serveur de l'hébergeur qui détient la zone publique
sorbier.example.
Voir la réponseMasquer la réponse de l'exercice 1
- Faisant autorité pour la zone racine. Il ne fait aucune récursion : il renvoie vers les serveurs des TLD.
- Résolveur : il enquête (ou fait suivre) pour le compte des invités. Il peut aussi répondre pour quelques noms locaux, mais son rôle est la résolution.
- Les deux : il fait autorité pour
ad.sorbier.exampleet résout les noms d'Internet pour les postes. - Faisant autorité pour
sorbier.example. S'il acceptait la récursion pour tout le monde, ce serait un résolveur ouvert, utilisable pour des attaques par amplification.
Tu avais trouvé ?
Exercice 2 sur 4 Compter les requêtes Réussi À revoir
Le cache de srv-ad est vide. Il fonctionne avec les indications de racine, sans redirecteur.
- Un poste demande
www.service-public.fr. Combien de requêtessrv-adenvoie-t-il au minimum, et à qui ? - Une minute plus tard, un autre poste demande
www.impots.gouv.fr. Combien de requêtes, au minimum, cette fois ? - Le TTL de l'enregistrement de
www.service-public.frest de 3 600 secondes. Pendant combien de tempssrv-adpeut-il le servir depuis son cache ?
Voir la réponseMasquer la réponse de l'exercice 2
- Trois au minimum : un serveur racine (qui délègue vers
.fr), un serveur de.fr(qui délègue versservice-public.fr), un serveur deservice-public.fr(qui répond). Si la réponse est un alias vers un autre domaine, il faut encore résoudre la cible, d'où des requêtes supplémentaires. - Deux au minimum : la délégation de
.frest en cache,srv-adinterroge directement un serveur de.fr, qui délègue versgouv.fr; puis un serveur degouv.fr, qui peut à son tour déléguerimpots.gouv.frà d'autres serveurs, ce qui ajoute une requête. - Une heure au plus, à compter de la réception de la réponse. Le TTL affiché par
srv-adaux postes diminue au fil du temps : un poste qui demande au bout de 20 minutes reçoit un TTL de 2 400 secondes.
Tu avais trouvé ?
Exercice 3 sur 4 Lire une réponse de dig Réussi À revoir
Un technicien obtient :
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 6123
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;intranet.sorbier.example. IN A
;; SERVER: 9.9.9.9#53(9.9.9.9) (UDP)
- Le nom existe-t-il pour le serveur interrogé ?
- Ce serveur fait-il autorité pour le nom demandé ?
- Le technicien est sur le réseau interne de Sorbier. Quelle est la cause la plus probable, et que doit-il vérifier ?
Voir la réponseMasquer la réponse de l'exercice 3
- Non :
NXDOMAIN, le nom n'existe pas pour lui. - Non : pas de drapeau
aa. C'est un résolveur public (Quad9) qui a interrogé les serveurs de la zone publique. - Le nom
intranet.sorbier.examplen'existe que dans le DNS interne (chapitre 3). Le technicien a interrogé un résolveur public, volontairement ou parce que son poste en utilise un. Il doit vérifier les serveurs DNS de sa carte (ipconfig /allou/etc/resolv.conf) et refaire la requête vers192.168.10.177.
Tu avais trouvé ?
Exercice 4 sur 4 UDP ou TCP ? Réussi À revoir
Pour chaque échange, indique le protocole et le port utilisés.
- Un poste demande l'adresse de
srv-ad2. - Un serveur secondaire copie toute la zone de son serveur primaire.
- Un résolveur reçoit une réponse avec le drapeau
tc. - Le navigateur d'un poste envoie ses requêtes DNS chiffrées dans HTTPS.
Voir la réponseMasquer la réponse de l'exercice 4
- UDP 53.
- TCP 53 : le transfert de zone (AXFR ou IXFR) passe toujours en TCP.
- Il recommence la requête en TCP 53 pour obtenir la réponse complète.
- TCP 443 (ou UDP 443 si le navigateur utilise HTTP/3) : c'est du DNS over HTTPS, indiscernable du reste du trafic web.
Tu avais trouvé ?