DNS
Progression
#DNS
Résolution de noms, zones, enregistrements (A/AAAA/CNAME/TXT), récursif vs itératif. DNS traduit des noms en adresses et porte des métadonnées critiques (mail, politiques, clés).
Objectifs d’apprentissage
- Décrire la résolution itérative (racine → TLD → autoritatif) et le rôle du résolveur récursif.
- Choisir et configurer correctement les enregistrements (A/AAAA, CNAME, NS, TXT) et les TTL.
- Comprendre DNSSEC (chaîne de confiance, RRSIG/DNSKEY/DS) et le caching (positif/négatif).
#Requêtes et réponses
Un message DNS contient un identifiant, des flags (QR, RD, RA, AA, RCODE), et jusqu’à 4 sections: Question, Answer, Authority, Additional. RD
(Recursion Desired) indique que le client souhaite une résolution récursive; RA
(Recursion Available) signale qu’un serveur la fournit.
Les réponses peuvent inclure des enregistrements de glue (A/AAAA pour des NS) dans la section Additional pour briser les dépendances.
#Animation: résolution récursive (schéma)
#Flow: résolution récursive (résumé)
#Diagramme: stub → résolveur → racine → TLD → autoritatif
- Les « glue records » brisent les dépendances dans les délégations.
- TTL positifs/négatifs influencent propagation et charge.
- Le résolveur peut valider DNSSEC (bit AD) et propager l’état.
- Cache: TTL positifs/négatifs influencent la propagation.
- DNSSEC: le résolveur peut valider et propager l’état (bit AD).
- Glue: fournis par le parent pour briser les dépendances.
- Recurseur (résolveur) interroge itérativement les serveurs (racine → TLD → autoritatif).
- Enregistrements: A/AAAA (adresse), CNAME (alias), NS (serveurs), TXT (infos).
#Récursif vs itératif
- Itératif: le résolveur suit les délégations étape par étape (racine → TLD → autoritatif).
- Récursif: le stub resolver (client) demande « résous pour moi », et le résolveur récursif fait les étapes ci‑dessus puis répond.
#Caching et TTL
- Les résolveurs mettent en cache réponses positives et négatives (NXDOMAIN) pendant le TTL.
- Baisser trop les TTL augmente la charge; trop longs retardent la propagation.
La durée de cache des réponses négatives est contrôlée par le SOA (champ Minimum ou negative TTL). Anticipez lors de créations/suppressions de noms.
Servir des réponses différentes selon l’origine (interne/externe) aide pour des besoins d’entreprise, mais complexifie le debug. Documentez et testez séparément.
#DoH et DoT
- DoT (DNS over TLS): DNS chiffré sur TCP/TLS port 853.
- DoH (DNS over HTTPS): DNS dans HTTP/2/3, traversant mieux les middleboxes et partageant l’infra TLS.
- Vie privée améliorée, mais déplace la confiance vers un résolveur public; attention aux politiques et au split‑DNS.
#Quiz
#DNSSEC (intégrité et authenticité)
- Objectif: empêcher l’empoisonnement de cache en signant les zones (RRSIG) et publiant clés (DNSKEY/DS).
- Chaîne de confiance: Racine → TLD → zone. Le résolveur valide les signatures jusqu’à une ancre de confiance.
Exemples d’enregistrements liés:
1example.com. 3600 IN DNSKEY 257 3 13 <clé_publique>2example.com. 3600 IN RRSIG A 13 2 3600 <signature>3com. 86400 IN DS <hash de la DNSKEY de example.com>
Les réponses négatives sont signées via NSEC/NSEC3 pour prouver l’inexistence d’un nom (preuvable, pas juste « NXDOMAIN »).
Quand une zone délègue vers des NS situés dans le même domaine (ex: ns1.example.com pour example.com), des « glue records » (A/AAAA au parent) sont nécessaires pour éviter les dépendances circulaires.
#Autres types utiles
- MX: serveurs mail avec priorités.
- SRV: services et ports (ex.: _sip._tcp.example.com → host:port).
- CAA: autorise quelles AC peuvent émettre des certificats pour votre domaine.
- PTR: résolution inverse (adresse → nom) dans les zones in-addr.arpa/ip6.arpa.
#E‑mail: SPF, DKIM, DMARC
- SPF (TXT): déclare les hôtes autorisés à envoyer des emails pour le domaine.
- DKIM: signature cryptographique des messages; clé publique publiée en DNS.
- DMARC: politique d’alignement et de traitement (none/quarantine/reject) + reporting.
Exemples:
1example.com. IN TXT "v=spf1 ip4:203.0.113.0/24 include:_spf.provider.com -all"2selector._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqh..."3_dmarc.example.com. IN TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@exemple.com; adkim=s; aspf=s"
Alignement strict (s
): le domaine exact doit correspondre; alignement relaxé (r
): sous‑domaines acceptés. Réglez adkim
/aspf
selon votre politique.
#Pièges fréquents
- CNAME au sommet (apex) d’une zone: non standard (le sommet doit porter SOA/NS). Utiliser des alias spécifiques au DNS provider (ALIAS/ANAME) si disponibles.
- Chaînes de CNAME trop longues: augmentent la latence et fragilisent la résolution; limiter et surveiller.
- TTL incohérents entre A/AAAA et CNAME d’un même service: propagation imprévisible.
- Filtrage ICMP cassant PMTUD en chemin vers les serveurs d’autorité: impacts indirects sur les services.
#Outils: dig pour DNSSEC
- Interroger avec validation et voir les signatures:
1dig +dnssec example.com A2dig +dnssec +multi example.com DNSKEY
- Vérifier l’AD bit (Authenticated Data) quand le résolveur valide:
1dig +dnssec example.com @1.1.1.1 | grep " flags " # chercher ad
- Suivre la chaîne DS → DNSKEY:
1dig +dnssec com. DS | sed -n '1,80p'2dig +dnssec example.com DNSKEY | sed -n '1,80p'
Les résolveurs embarquent l’ancre de la racine (KSK). Assurez‑vous qu’elle est à jour (RFC 5011) pour une validation fiable.
#Quiz éclair
#Exercice : Simulation de résolution DNS récursive
#Lab pratique: TTL et propagation
Observez la mise en cache et le TTL en conditions réelles (adapter le domaine):
1# Requête simple et TTL2dig +nocmd example.com A +noall +answer3 4# Résolution itérative (suivre les délégations)5dig +trace example.com6 7# Observer la différence entre résolveurs (cache/TTL restants)8dig example.com @1.1.1.1 +noall +answer9dig example.com @8.8.8.8 +noall +answer10 11# CNAME vs A: notez que le TTL affiché est celui de chaque RR12dig www.example.com CNAME +noall +answer13 14# TTL négatif (NXDOMAIN) et durée de cache
Astuce: si vous préparez une bascule, réduisez le TTL en amont (heures/jours) puis remontez‑le après le changement. Vérifiez la propagation avec plusieurs résolveurs publics.
Implémentez une simulation simplifiée du processus de résolution DNS récursive.
#Instructions
- Créez des structures de données pour représenter les différents types de serveurs DNS :
- Serveurs racine
- Serveurs TLD (Top Level Domain)
- Serveurs autoritatifs
- Implémentez une fonction
resoudre_dns(nom_domaine)
qui simule la résolution. - Le processus doit suivre le chemin : résolveur → racine → TLD → autoritatif.
- Chaque serveur renvoie l'adresse du serveur suivant jusqu'à obtenir l'adresse IP.
#Exemple de code
1# Simulation simplifiée de la résolution DNS2 3# Données des serveurs4serveurs_racine = {5 ".": "192.168.1.1"6}7 8serveurs_tld = {9 "com.": "192.168.2.1",10 "org.": "192.168.2.2",11 "fr.": "192.168.2.3"12}13 14serveurs_autoritatifs = {
Le TTL (Time To Live) indique combien de temps une réponse peut être mise en cache.