Aller au contenu
Réseaux high

Comprendre le DNS — L'annuaire d'Internet

21 min de lecture

Votre connexion Internet fonctionne mais impossible d’accéder à un site web ? Le problème vient probablement du DNS (Domain Name System). Le DNS est l’annuaire d’Internet : il traduit les noms de domaine lisibles (github.com) en adresses IP (140.82.121.4). Ce module vous apprend comment fonctionne le DNS et comment diagnostiquer ses problèmes — une compétence quotidienne en administration système.

  • Le DNS traduit les noms en IP : github.com140.82.121.4
  • dig +short domaine : obtenir l’IP d’un domaine
  • NXDOMAIN = domaine inexistant, SERVFAIL = problème serveur DNS
  • resolvectl status : voir quel DNS votre système utilise réellement
  • dig +short google.com retourne une IP
  • dig @8.8.8.8 mon-domaine.com fonctionne (test avec DNS externe)
  • Je sais interpréter NOERROR, NXDOMAIN et SERVFAIL
Fenêtre de terminal
# 1. Résoudre un nom
dig +short github.com
# 2. Voir le DNS utilisé
resolvectl status | head -20
# 3. Tester avec un DNS externe
dig @8.8.8.8 github.com +short
  • Module 3 complété : vous savez ce qu’est une adresse IP et un masque
  • Module 5 complété : vous comprenez TCP/UDP et savez tester un port avec netcat
  • Une machine Linux connectée à Internet
  • Un terminal ouvert
  • Pourquoi le DNS existe : l’annuaire qui traduit les noms en IP
  • Comment fonctionne la résolution : resolver → root → TLD → autoritaire
  • Les types d’enregistrements : A, AAAA, CNAME, MX, TXT
  • Les commandes de diagnostic : nslookup et dig
  • Les erreurs courantes : NXDOMAIN, SERVFAIL, timeout
  • Cas pratiques : vérifier un domaine avant déploiement

Imaginez devoir retenir 140.82.121.4 au lieu de github.com, ou 142.250.179.110 pour google.com. Impossible à l’échelle d’Internet avec ses milliards de sites.

Le DNS résout ce problème en créant un système de traduction distribué et hiérarchique. Pensez-y comme l’annuaire téléphonique mondial : vous cherchez un nom, vous obtenez un numéro.

Quand vous tapez github.com dans votre navigateur :

  1. Votre système demande l’IP correspondante
  2. Le DNS répond 140.82.121.4
  3. Votre navigateur se connecte à cette IP

Cette traduction prend de quelques ms (réponse en cache) à parfois plus de 100 ms selon la distance au resolver, les retries, la validation DNSSEC ou le fallback TCP.

Le DNS n’est pas un serveur unique mais une hiérarchie de serveurs spécialisés. Quand votre machine cherche une adresse, elle interroge plusieurs niveaux.

Comment fonctionne la résolution DNS ?💻 Votre PCgithub.com ?🔍 Resolver(ex: 8.8.8.8)Cache local🌍 Serveur Root(13 dans le monde)📁 Serveur TLD(.com, .fr, .org)✅ Serveur Autoritaire(ns1.github.com)① Requête② .com ?③ github ?④ IP exacte⑤ Réponse140.82.121.4✅ Résolu !💡 En pratique, le resolver met en cache les réponses (TTL).Les requêtes suivantes sont instantanées jusqu'à expiration du cache.
  1. Votre PC envoie une requête au resolver configuré

  2. Le Resolver (ex: 8.8.8.8 de Google) fait le travail :

    • Il consulte d’abord son cache
    • Sinon, il interroge la hiérarchie DNS
  3. Le serveur Root répond : “Pour .com, demande à ce serveur TLD”

  4. Le serveur TLD (Top-Level Domain) répond : “Pour github.com, demande à ce serveur autoritaire”

  5. Le serveur Autoritaire (les NS du domaine) donne la réponse finale

    Pour connaître les serveurs autoritaires actuels d’un domaine :

    Fenêtre de terminal
    dig NS github.com +short

En production, comprendre qui fait quoi évite 80% des confusions :

ActeurRôleExemple
Stub resolverEnvoie les requêtes à un récursif, ne fait aucune résolution lui-même127.0.0.53 (systemd-resolved), libc
Résolveur récursifInterroge la hiérarchie DNS et met en cache8.8.8.8, 1.1.1.1, Unbound interne
Serveur autoritaireDétient les enregistrements officiels d’une zonens1.example.com

Sur Linux, ce fichier configure les serveurs DNS utilisés par votre système :

Fenêtre de terminal
cat /etc/resolv.conf

Sortie typique :

nameserver 8.8.8.8
nameserver 8.8.4.4
search home.lan

Signification :

DirectiveRôle
nameserverServeur DNS à interroger (jusqu’à 3)
searchDomaine ajouté automatiquement aux noms courts

Le DNS ne stocke pas que des adresses IP. Il existe plusieurs types d’enregistrements selon l’information recherchée.

Types d'enregistrements DNS📍 A (Address)Nom → IPv4github.com → 140.82.121.4📍 AAAA (Quad-A)Nom → IPv6google.com → 2607:f8b0::8a🔗 CNAME (Alias)Nom → Autre nomwww.github.com→ github.com📧 MX (Mail Exchange)Serveur mail du domainegoogle.com → alt1.aspmx.l.google.com🏛 NS (Name Server)Serveurs DNS du domainegithub.com →ns1.p16.dynect.net📝 TXT (Texte)Métadonnées diversesSPF, DKIM, validationde propriété💡 DevOps : A et CNAME les plus utilisés • MX pour le mail • TXT pour SPF/DKIM et validations Let's Encrypt
TypeNom completUsageExemple
AAddressNom → IPv4github.com → 140.82.121.4
AAAAQuad-ANom → IPv6google.com → 2607:f8b0:4004::8a
CNAMECanonical NameAlias vers un autre nomwww.github.com → github.com
MXMail ExchangeServeur mail du domainegmail.com → alt1.gmail-smtp-in.l.google.com
NSName ServerServeurs DNS du domainegithub.com → ns1.p16.dynect.net
TXTTextMétadonnées diversesSPF, DKIM, validation Let’s Encrypt

Deux outils sont indispensables pour le diagnostic DNS : nslookup (simple) et dig (complet).

nslookup permet des requêtes rapides et fonctionne sur Linux, macOS et Windows.

Syntaxe de base :

Fenêtre de terminal
nslookup github.com

Sortie :

Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
Name: github.com
Address: 140.82.121.4

Interroger un serveur DNS spécifique :

Fenêtre de terminal
nslookup github.com 8.8.8.8

Chercher un type d’enregistrement particulier :

Fenêtre de terminal
nslookup -type=MX google.com

getent hosts — Ce que l’application voit vraiment

Section intitulée « getent hosts — Ce que l’application voit vraiment »

dig interroge uniquement le DNS. Mais votre application peut résoudre via /etc/hosts, mDNS, ou NSS. Pour voir ce que le système retournera vraiment :

Fenêtre de terminal
# Résolution système complète (hosts + DNS)
getent hosts github.com
# IPv4 uniquement
getent ahostsv4 github.com
# IPv6 uniquement
getent ahostsv6 github.com

dig (Domain Information Groper) est l’outil de référence sous Linux. Il offre beaucoup plus de détails que nslookup.

Fenêtre de terminal
dig github.com

Sortie :

; <<>> DiG 9.18.18-0ubuntu0.22.04.2-Ubuntu <<>> github.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12345
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; ANSWER SECTION:
github.com. 60 IN A 140.82.121.4
;; Query time: 23 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Thu Jan 23 10:30:00 CET 2025
;; MSG SIZE rcvd: 55

Voici comment interpréter les sections d’une réponse dig :

SectionContenu
HEADERStatus (NOERROR, NXDOMAIN, etc.) et compteurs
QUESTIONCe qui a été demandé
ANSWERLa réponse (ex: l’IP)
AUTHORITYServeurs DNS faisant autorité
ADDITIONALInfos supplémentaires
Query timeTemps de réponse en ms
SERVERLe serveur DNS interrogé

Pour simuler une résolution itérative depuis les root servers :

Fenêtre de terminal
dig +trace github.com

Ces options sont précieuses lors d’un diagnostic :

Fenêtre de terminal
# Timeout court pour tests rapides
dig example.com +time=1 +tries=1
# Forcer TCP (si UDP bloqué ou réponse tronquée)
dig example.com +tcp
# Voir les infos DNSSEC
dig example.com +dnssec
# Combiner : test rapide via DNS Google
dig @8.8.8.8 example.com +short +time=2
ErreurSignificationCause probable
NXDOMAINDomaine inexistantFaute de frappe, domaine expiré, jamais enregistré
NODATANom existe mais pas ce typeDemander AAAA alors que seul A existe
SERVFAILÉchec du serveurVoir encart ci-dessous
REFUSEDRequête refuséeLe serveur n’accepte pas vos requêtes (ACL)
TimeoutPas de réponseProblème réseau, firewall, serveur down
  1. Vérifier la connectivité de base

    Fenêtre de terminal
    ping 8.8.8.8

    Si ça échoue, le problème est réseau, pas DNS.

  2. Tester avec un DNS public

    Fenêtre de terminal
    dig @8.8.8.8 github.com

    Si ça fonctionne, votre DNS local est le problème.

  3. Vérifier votre configuration DNS

    Fenêtre de terminal
    cat /etc/resolv.conf
    resolvectl status # sur systemd
  4. Vider le cache DNS local

    Fenêtre de terminal
    # Sur systemd-resolved
    sudo resolvectl flush-caches
    # Vérifier que le cache est vidé
    resolvectl statistics

Quand “je vide le cache” ne suffit pas, c’est souvent parce que plusieurs niveaux cachent les réponses :

NiveauCacheComment vider
NavigateurCache interne (Chrome, Firefox)Fermer/rouvrir, ou chrome://net-internals/#dns
OS / systemd-resolvedCache localsudo resolvectl flush-caches
Résolveur récursifCache partagé (ISP, entreprise)Impossible côté client
CDN / Load balancerCache applicatifDépend de la plateforme

Le cache DNS peut causer des comportements inattendus :

Fenêtre de terminal
# Voir les statistiques de cache (systemd)
resolvectl statistics
# Vider le cache
sudo resolvectl flush-caches
# Sur macOS
sudo dscacheutil -flushcache && sudo killall -HUP mDNSResponder

Par défaut, le DNS utilise UDP port 53 pour sa rapidité. Mais certaines situations nécessitent TCP :

SituationMécanisme
Réponse > 512 octets (sans EDNS0)Le serveur met TC=1 (truncated), le client retry en TCP
Réponse > taille EDNS0Même mécanisme avec le buffer EDNS0 annoncé
Transfert de zone (AXFR)Toujours TCP
Politique serveurCertains serveurs forcent TCP

Si un domaine fonctionne parfois mais pas toujours :

Fenêtre de terminal
# Tester en forçant TCP
dig example.com +tcp
# Si TCP fonctionne mais UDP non → problème firewall/MTU

Sans alourdir ce module, voici les concepts de sécurité DNS à connaître :

DNSSEC (RFC 4033) permet de vérifier l’authenticité des réponses DNS via des signatures cryptographiques. Il protège contre le cache poisoning mais ne chiffre pas les requêtes.

Fenêtre de terminal
# Voir si un domaine est signé DNSSEC
dig example.com +dnssec
# Vérifier la chaîne de confiance
dig example.com +sigchase +trusted-key=/etc/trusted-key.key
ProtocolePortDescription
DoT (DNS over TLS)853Chiffrement TLS, RFC 7858
DoH (DNS over HTTPS)443DNS dans HTTPS, RFC 8484

Ces protocoles chiffrent les échanges entre vous et le résolveur (pas au-delà). Ils empêchent l’espionnage de vos requêtes DNS par votre ISP ou un attaquant réseau.

Avant de signaler une panne, vérifiez que le DNS fonctionne :

Fenêtre de terminal
# Le domaine est-il résolu ?
dig +short production.company.com
# La réponse vient-elle du bon serveur ?
dig @ns1.company.com production.company.com
# Comparer avec un DNS public
dig @8.8.8.8 production.company.com

Lors d’un déploiement, vérifiez les enregistrements critiques :

Fenêtre de terminal
# Record A (site principal)
dig +short example.com A
# Record CNAME (sous-domaines)
dig +short www.example.com CNAME
# Records MX (mail)
dig example.com MX +short
# Records TXT (SPF, validation)
dig example.com TXT +short
Fenêtre de terminal
# Voir le TTL actuel
dig example.com | grep -A1 "ANSWER SECTION"
# Résultat : example.com. 300 IN A 1.2.3.4
# ↑ 300 secondes = 5 minutes de cache
  1. Résolvez l’adresse de GitHub

    Fenêtre de terminal
    dig github.com A
    dig github.com AAAA

    Notez l’IPv4 et vérifiez si GitHub a une IPv6.

  2. Examinez les serveurs mail de Google

    Fenêtre de terminal
    dig google.com MX

    Combien de serveurs mail sont configurés ? Lequel a la priorité ?

  3. Trouvez les serveurs DNS de github.com

    Fenêtre de terminal
    dig github.com NS

    Ces serveurs sont autoritaires pour le domaine.

  4. Comparez les réponses de différents resolvers

    Fenêtre de terminal
    dig @8.8.8.8 github.com +short # Google
    dig @1.1.1.1 github.com +short # Cloudflare
    dig @9.9.9.9 github.com +short # Quad9

    Les réponses sont-elles identiques ?

  5. Tracez une résolution complète

    Fenêtre de terminal
    dig +trace google.com

    Identifiez les serveurs root, TLD et autoritaires dans la sortie.

  1. Simulez un mauvais serveur DNS

    Fenêtre de terminal
    # Interroger un serveur qui n'existe pas
    dig @192.0.2.1 github.com

    Observez le timeout après ~5 secondes.

  2. Testez un domaine inexistant

    Fenêtre de terminal
    dig domaine-qui-nexiste-pas-12345.com

    Repérez le status NXDOMAIN dans la réponse.

  3. Mesurez les temps de réponse

    Fenêtre de terminal
    dig github.com | grep "Query time"
    dig @8.8.8.8 github.com | grep "Query time"

    Comparez votre DNS local au DNS Google.

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

10 questions
10 min.
80% requis

Informations

  • Le chronomètre démarre au clic sur Démarrer
  • Questions à choix multiples, vrai/faux et réponses courtes
  • Vous pouvez naviguer entre les questions
  • Les résultats détaillés sont affichés à la fin

Lance le quiz et démarre le chronomètre

Le DNS est l’annuaire distribué d’Internet. Retenez ces points clés :

  • Hiérarchie : Root (13 logiques, anycast mondial) → TLD → Autoritaire → Réponse
  • Trois acteurs : Stub (local) → Résolveur récursif (fait le travail) → Autoritaire (détient la zone)
  • Cache multi-niveaux : Navigateur, OS, résolveur, CDN — et negative caching pour NXDOMAIN
  • Types courants : A (IPv4), AAAA (IPv6), CNAME (alias), MX (mail), TXT (métadonnées)
  • Outils : dig pour le diagnostic DNS, getent hosts pour voir ce que l’application résout
  • Transport : UDP par défaut, TCP si réponse tronquée (TC=1), EDNS0 pour buffers > 512
  • SERVFAIL : Souvent DNSSEC ou timeouts, pas forcément “serveur down”
  • Sécurité : DNSSEC = intégrité, DoT/DoH = confidentialité client-résolveur

Troubleshooting réseau