🌍 DNS — BIND9 et zones

Séance 1 / 2 Bloc B2 Module M2.2 BTS SIO SISR 3h30
FormationBTS SIO option SISR — IRIS Mediaschool
Bloc / ModuleB2 — M2.2 | Compétences B2.2 / B2.3
Durée3h30
CoursC2.2.3 — Séance 1

🚀 Introduction (10 min)

La panne DYN du 21 octobre 2016 reste un cas d'école : un volumineux DDoS piloté par le botnet Mirai a saturé l'infrastructure DNS d'un fournisseur majeur et rendu tout un panel de services (Twitter, Netflix, Spotify…) inaccessibles pendant plusieurs heures. Cet incident illustre la dépendance critique des services en ligne au bon fonctionnement des serveurs DNS et l'importance de concevoir des résiliences (redondance, anycast, répartitions, caches locaux) dans une PME.

Dans le contexte d'InnovatTech, l'objectif est d'appréhender comment fonctionne la résolution DNS et comment déployer un service DNS interne (BIND9) fiable et testable.

🎯 Objectifs de la séance

  • Expliquer la différence entre résolution récursive et itérative et décrire la hiérarchie root → TLD → authoritative.
  • Configurer une zone DNS primaire sous BIND9 (named.conf, fichier de zone : SOA/NS/A/AAAA/CNAME/MX/PTR/SRV) et sa zone reverse.
  • Diagnostiquer les problèmes de résolution DNS à l'aide d'outils (dig, nslookup, host, resolvectl) et interpréter leurs sorties.

📖 1. Résolution DNS : récursive vs itérative et hiérarchie (60 min)

Le DNS est un système réparti qui transforme des noms lisibles (ex : nas01.innovattech.local) en adresses IP. La résolution peut être effectuée de façon itérative ou récursive selon le rôle de l'interrogateur :

  • Un client stub envoie une requête à un résolveur récursif (souvent fourni par le FAI ou un serveur local) et lui demande de lui rendre la réponse complète.
  • Le résolveur récursif, lui, peut effectuer des requêtes itératives auprès des différents serveurs de la hiérarchie (root → TLD → authoritative) pour remonter jusqu'à l'autorité de la zone demandée.
  • En pratique, pour les environnements d'entreprise, on installe un serveur récursif local (cache) qui répond aux clients et délègue les requêtes qu'il ne connaît pas vers des forwarders ou vers la racine.

Un échange typique se décompose ainsi : le client contacte le récursif ; si la réponse n'est pas en cache, le récursif interroge d'abord un root server, celui-ci renvoie l'adresse des serveurs responsables du TLD (.com, .net, .fr…), puis le résolveur interroge le serveur du TLD qui renvoie l'autorité finale, et ainsi de suite jusqu'au serveur faisant autorité pour le nom demandé.

Diagramme du flux de résolution

Client (stub) ──→ Résolveur récursif (cache local)
                          │
                     Root servers
                          │
                        TLD
                          │
                  Authoritative (innovattech.local)

Interroger un serveur DNS précis

Exemple de commande pour interroger le serveur DNS Windows DC win-srv01 :

# Interroger le serveur DNS situé à 192.168.10.5 pour l'enregistrement A de la racine de la zone
dig @192.168.10.5 innovattech.local A +short

Sortie attendue :

192.168.10.10
💡 Lecture de sortie

L'option +short fournit directement l'adresse IP associée à l'enregistrement A. Si la zone n'a pas d'enregistrement A à son apex, dig ne renverra rien ; on peut alors tester des hôtes précis (nas01.innovattech.local).

📖 2. Zones DNS, types d'enregistrements et BIND9 (70 min)

Une "zone" DNS est la portion de l'espace de noms pour laquelle un serveur est responsable. Il existe plusieurs modes de zone :

Type de zoneDescription
Primaire (master)Détient la copie principale du fichier de zone
Secondaire (slave)Reçoit ses données par transfert AXFR/IXFR depuis le master
StubContient uniquement les enregistrements NS d'une zone
Forward zoneRedirige les requêtes vers un autre serveur

Enregistrements courants d'une zone

TypeNom completRôle
SOAStart of AuthorityParamètres de la zone (serial, refresh, retry, expire, minimum)
NSName ServerServeurs faisant autorité pour la zone
AAddressMappage nom → adresse IPv4
AAAAIPv6 AddressMappage nom → adresse IPv6
CNAMECanonical NameAlias pointant vers un autre nom
MXMail ExchangerServeur de messagerie pour le domaine
PTRPointerRésolution inverse (IP → nom)
SRVServiceServices spécifiques (ex : _ldap._tcp pour AD)
⚠️ Ponctuation critique

La syntaxe des fichiers de zone est sobre mais exigeante. Un nom de domaine pleinement qualifié (FQDN) doit se terminer par un point (.). L'oublier génère des erreurs silencieuses difficiles à déboguer.

Configuration de BIND9

Exemple minimal du bloc options dans /etc/bind/named.conf.options :

options {
    recursion yes;
    allow-recursion { 192.168.0.0/16; };
    forwarders { 8.8.8.8; };
    dnssec-validation auto;
    listen-on { any; };
};

Déclaration des zones dans /etc/bind/named.conf.local :

zone "innovattech.local" IN {
    type master;
    file "/etc/bind/db.innovattech.local";
};

zone "10.168.192.in-addr.arpa" IN {
    type master;
    file "/etc/bind/db.10.168.192";
};

Fichier de zone forward

Exemple de /etc/bind/db.innovattech.local :

$TTL 3600
@   IN  SOA ns1.innovattech.local. admin.innovattech.local. (
        2026022001 ; serial YYYYMMDDNN
        3600       ; refresh
        600        ; retry
        604800     ; expire
        3600 )     ; minimum TTL

@   IN  NS  ns1.innovattech.local.
@   IN  A   192.168.10.10    ; enregistrement A pour la zone apex
ns1 IN  A   192.168.10.10
win-srv01     IN  A   192.168.10.5
debian-srv02  IN  A   192.168.30.5
proxmox01     IN  A   192.168.10.20
nas01         IN  A   192.168.10.15
mail          IN  A   192.168.30.5
www           IN  CNAME  debian-srv02.innovattech.local.
@             IN  MX 10 mail.innovattech.local.

Fichier de zone reverse

Exemple de /etc/bind/db.10.168.192 pour 192.168.10.0/24 :

$TTL 3600
@   IN  SOA ns1.innovattech.local. admin.innovattech.local. (
        2026022001 ; serial
        3600
        600
        604800
        3600 )

@   IN  NS ns1.innovattech.local.
5   IN  PTR win-srv01.innovattech.local.
10  IN  PTR ns1.innovattech.local.
15  IN  PTR nas01.innovattech.local.
20  IN  PTR proxmox01.innovattech.local.
30  IN  PTR debian-srv01.innovattech.local.
💡 Convention du serial

Utilisez la convention YYYYMMDDnn (ex : 2026022001) pour le champ serial. Il doit être incrémenté à chaque modification du fichier de zone ; sans cela, les serveurs secondaires ne reprendront pas les nouvelles données.

Les enregistrements PTR dans la zone reverse correspondent au dernier octet des adresses IPv4 (ex : 15 IN PTR correspond à 192.168.10.15).

Administration DNS Windows (PowerShell)

Les serveurs DNS Windows peuvent stocker des zones intégrées à Active Directory, bénéficiant de la réplication AD et d'un contrôle d'accès centralisé. Administration via PowerShell :

# Lister les zones DNS sur win-srv01
Get-DnsServerZone -ComputerName win-srv01

# Activer le scavenging pour nettoyer les enregistrements dynamiques obsolètes
Set-DnsServerScavenging -RefreshInterval 7.00:00:00 -NoRefreshInterval 7.00:00:00 -ComputerName win-srv01

# Créer un conditional forwarder vers 8.8.8.8 pour les requêtes non locales
Add-DnsServerConditionalForwarderZone -Name "example.com" -MasterServers 8.8.8.8 -ReplicationScope "Domain"

Diagnostics et commandes pratiques

# Interroger un serveur précis à la recherche d'un enregistrement A
dig @192.168.10.10 nas01.innovattech.local A +short

# Obtenir les enregistrements MX avec nslookup
nslookup -type=MX innovattech.local 192.168.10.10

# Interroger les NS d'une zone
host -t NS innovattech.local 192.168.10.10

# Avec systemd-resolved sur une machine Linux (ex: debian-srv01)
resolvectl query nas01.innovattech.local

Lecture des sorties dig

# Résolution directe
$ dig @192.168.10.10 nas01.innovattech.local A +short
192.168.10.15

# Résolution inverse (reverse DNS)
$ dig @192.168.10.10 -x 192.168.10.15 +short
nas01.innovattech.local.

Si dig renvoie l'adresse attendue, la résolution directe fonctionne. Pour le reverse, la sortie doit pointer vers le FQDN avec le point final.

🔬 Travaux Pratiques (80–90 min)

📋 Contexte

Vous êtes technicien chez InnovatTech SARL. La direction vous demande de déployer un serveur DNS interne sur debian-srv01 (192.168.10.10) pour remplacer temporairement un service tierce indisponible et d'autoriser les autres serveurs de l'infrastructure à résoudre les noms internes. Vous utiliserez BIND9 sur Debian 12, vous créerez la zone forward innovattech.local et la zone reverse 10.168.192.in-addr.arpa, puis vous validerez la configuration depuis plusieurs machines du parc.

Objectif

Déployer une zone DNS primaire sous BIND9 contenant tous les enregistrements A et PTR nécessaires pour les serveurs d'InnovatTech et valider la résolution depuis win-srv01 et les autres serveurs.

Prérequis techniques

  • Accès sudo sur debian-srv01 (Debian 12).
  • Paquets BIND9 installés (bind9, bind9utils).
  • Adresses IP des serveurs : win-srv01=192.168.10.5, debian-srv01=192.168.10.10, debian-srv02=192.168.30.5, proxmox01=192.168.10.20, nas01=192.168.10.15.

Étape 1 — Installation et préparation

# Sur debian-srv01
sudo apt update && sudo apt install -y bind9 bind9utils bind9-doc
sudo systemctl enable --now bind9

# Vérifier l'état
sudo systemctl status bind9 --no-pager

Étape 2 — Modifier les options globales

Éditez /etc/bind/named.conf.options et ajoutez / vérifiez les options suivantes :

options {
    directory "/var/cache/bind";
    recursion yes;
    allow-recursion { 192.168.0.0/16; };
    forwarders { 8.8.8.8; };
    dnssec-validation auto;
    auth-nxdomain no;    # conform RFC
    listen-on { any; };
};

Étape 3 — Déclarer les zones

Éditez /etc/bind/named.conf.local et ajoutez :

zone "innovattech.local" IN {
    type master;
    file "/etc/bind/db.innovattech.local";
};

zone "10.168.192.in-addr.arpa" IN {
    type master;
    file "/etc/bind/db.10.168.192";
};

Étape 4 — Créer les fichiers de zone

Créez /etc/bind/db.innovattech.local et /etc/bind/db.10.168.192 avec le contenu présenté en section 2 (respectez le serial). Exemple de départ :

sudo cp /etc/bind/db.empty /etc/bind/db.innovattech.local
# puis éditez avec votre éditeur préféré (nano / vi)

Étape 5 — Vérifier la syntaxe et charger les zones

sudo named-checkconf
sudo named-checkzone innovattech.local /etc/bind/db.innovattech.local
sudo named-checkzone 10.168.192.in-addr.arpa /etc/bind/db.10.168.192
sudo systemctl reload bind9

Sortie attendue de named-checkzone :

zone innovattech.local/IN: loaded serial 2026022001
OK

Étape 6 — Diagnostics depuis les autres serveurs

Depuis win-srv01 (ou toute autre machine) :

nslookup nas01.innovattech.local 192.168.10.10

Depuis debian-srv02 :

dig @192.168.10.10 nas01.innovattech.local A +short
dig @192.168.10.10 -x 192.168.10.15 +short

Étape 7 — Résolution des problèmes courants

  • Si named ne démarre pas : consulter les logs avec sudo journalctl -u bind9 -n 200 pour identifier les messages d'erreur sur la syntaxe des fichiers de zone.
  • Vérifier que le serial a été correctement incrémenté après modification ; sinon les esclaves ne reprendront pas les nouvelles données.

Livrable attendu

  • Les fichiers /etc/bind/db.innovattech.local et /etc/bind/db.10.168.192 présents sur debian-srv01 avec un serial à jour.
  • Un court rapport (1 page) listant les commandes de vérification lancées et les sorties clés (dig/nslookup) montrant la résolution directe et inverse depuis au moins deux machines différentes (win-srv01 et debian-srv02).

Critères de réussite

CommandeRésultat attendu
dig @192.168.10.10 nas01.innovattech.local A +short192.168.10.15
dig @192.168.10.10 -x 192.168.10.15 +shortnas01.innovattech.local.
named-checkzone (deux zones)OK

✅ Synthèse (10 min)

Cette séance a montré que le DNS est une chaîne d'autorités : un client demande à un résolveur récursif qui parcourt la hiérarchie root → TLD → authoritative si nécessaire. Nous avons vu la différence fondamentale entre :

  • Requêtes récursives — le résolveur rend la réponse finale au client.
  • Requêtes itératives — chaque serveur donne des pointeurs vers d'autres serveurs jusqu'à l'authoritative.

Nous avons aussi vu comment structurer des zones DNS avec les enregistrements SOA/NS/A/CNAME/MX/PTR et comment gérer concrètement des fichiers de zone BIND9, les vérifications syntaxiques (named-checkconf, named-checkzone) et les commandes de diagnostic (dig / nslookup / host / resolvectl) indispensables en production.

❓ Question de vérification

En une phrase, expliquez la différence entre une résolution récursive et une résolution itérative.

📅 Séance suivante

Séance 2 — DHCP et NTP (DORA, scopes, réservations, chrony) — nous configurerons le service DHCP sur Windows et la synchronisation horaire NTP sur les serveurs Linux.

📝 QCM — Testez vos connaissances

  1. Quel type de résolution DNS le client stub effectue-t-il vers son résolveur : il lui demande de faire tout le travail et de lui retourner la réponse complète ?
  2. Quel enregistrement DNS contient les paramètres de gestion de la zone comme le serial, refresh, retry, expire et minimum TTL ?
  3. Quelle commande BIND9 permet de vérifier la syntaxe d'un fichier de zone avant de le charger ?
  4. Quelle syntaxe dig permet d'interroger un serveur DNS situé à une adresse IP précise (ex : 192.168.10.10) ?
  5. Dans une zone reverse, quel type d'enregistrement associe le dernier octet d'une adresse IPv4 au nom d'hôte correspondant ?
📝 Afficher les corrections
  1. Récursive — En résolution récursive, le client stub confie entièrement la résolution à son résolveur qui retourne la réponse finale. En résolution itérative, chaque serveur contacté renvoie vers le suivant.
  2. SOA (Start of Authority) — L'enregistrement SOA est obligatoire dans chaque zone ; il contient le serial (version), refresh (fréquence de vérification par les secondaires), retry, expire et le minimum TTL pour les réponses négatives.
  3. named-checkzone — La commande named-checkzone innovattech.local /etc/bind/db.innovattech.local parse le fichier de zone et retourne OK si la syntaxe est valide, ou indique la ligne en erreur.
  4. dig @192.168.10.10 nom A +short — Le symbole @ suivi de l'adresse IP permet de cibler un serveur DNS précis, utile pour tester sa zone avant de modifier les paramètres réseau des clients.
  5. PTR (Pointer) — Dans la zone reverse (ex : 10.168.192.in-addr.arpa), l'entrée 15 IN PTR nas01.innovattech.local. associe l'adresse 192.168.10.15 au FQDN nas01.innovattech.local.
💡 À retenir

Le DNS suit une hiérarchie root → TLD → authoritative. BIND9 gère les zones via named.conf et des fichiers de zone distincts. Le serial SOA doit être incrémenté à chaque modification. Les outils dig, nslookup et named-checkzone sont vos alliés en production.

← C2.2.2 Séance 2 — GPO sécurité et diagnostic AD C2.2.3 Séance 2 — DHCP, NTP et Chrony →