Aller au contenu principal

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)

1
Résolveur → Racine
Query example.com A
2
Racine → Résolveur
Références NS pour .com
3
Résolveur → TLD
Query example.com A
4
TLD → Résolveur
Références NS pour example.com
5
Résolveur → Autoritatif
Query example.com A
6
Autoritatif → Résolveur
Réponse A/AAAA avec TTL

#Flow: résolution récursive (résumé)

1/5

#Diagramme: stub → résolveur → racine → TLD → autoritatif

Stub client
Résolveur récursif
. (root)
TLD
Autoritatif
appel async/retour activation fragments
REGION: Délégations
REGION: Réponse et cache
RD=1 (recursion desired)
  • 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.
Cache négatif (RFC 2308)

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.

Split-horizon DNS

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

Quel mécanisme chiffre les requêtes DNS via un canal HTTP ?
Quel mécanisme chiffre les requêtes DNS via un canal HTTP ?

#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:

bg-[rgba(var(--code-inline-bg),0.5)] text-[rgb(var(--fg))] px-1 roundedbg-[rgba(var(--code-inline-bg),0.5)] text-[rgb(var(--fg))] px-1 rounded
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>
NSEC/NSEC3

Les réponses négatives sont signées via NSEC/NSEC3 pour prouver l’inexistence d’un nom (preuvable, pas juste « NXDOMAIN »).

Glue records

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:

bg-[rgba(var(--code-inline-bg),0.5)] text-[rgb(var(--fg))] px-1 roundedbg-[rgba(var(--code-inline-bg),0.5)] text-[rgb(var(--fg))] px-1 rounded
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"
Quel standard définit la politique d’alignement et de traitement des emails ?
Quel standard définit la politique d’alignement et de traitement des emails ?
Alignement DMARC

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:
bashbash
1dig +dnssec example.com A2dig +dnssec +multi example.com DNSKEY
  • Vérifier l’AD bit (Authenticated Data) quand le résolveur valide:
bashbash
1dig +dnssec example.com @1.1.1.1 | grep " flags "  # chercher ad
  • Suivre la chaîne DS → DNSKEY:
bashbash
1dig +dnssec com. DS | sed -n '1,80p'2dig +dnssec example.com DNSKEY | sed -n '1,80p'
Ancre de confiance

Les résolveurs embarquent l’ancre de la racine (KSK). Assurez‑vous qu’elle est à jour (RFC 5011) pour une validation fiable.

#Quiz éclair

Quel enregistrement évite une dépendance circulaire lors d’une délégation ?
Quel enregistrement évite une dépendance circulaire lors d’une délégation ?

#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):

bashbash
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

  1. 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
  2. Implémentez une fonction resoudre_dns(nom_domaine) qui simule la résolution.
  3. Le processus doit suivre le chemin : résolveur → racine → TLD → autoritatif.
  4. Chaque serveur renvoie l'adresse du serveur suivant jusqu'à obtenir l'adresse IP.

#Exemple de code

pythonpython
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 = {
Chargement de l’éditeur...
TTL

Le TTL (Time To Live) indique combien de temps une réponse peut être mise en cache.

#Quiz

Quel enregistrement associe un nom à une autre étiquette de nom ?
Quel enregistrement associe un nom à une autre étiquette de nom ?