Mémento 7.1 - DNS avec BIND 9
Le service DNS statique reposera sur BIND 9 qui sera installé sur la VM srvlan pour gérer la zone LAN.
1 - Préambule
Le service gérera un sous-domaine de loupipfire.fr nommé intra.loupipfire.fr. Le nom de ce sous-domaine sera associé aux adresses IP de la zone LAN.
La VM srvlan doit conserver son IP fixe 192.168.3.1.
1.1 - Configuration actuelle de la zone LAN
a) Une IP fixe et un nom d'hôte pour chaque VM/CTN.
Ex : IP fixe 192.168.3.2 pour l'hôte debian-vm1
Cde utile pour découvrir les adresses IP :
[user@hostname] ip address ou ip aCdes utiles pour découvrir les noms d'hôtes :
[user@hostname] cat /etc/hostname
[user@hostname] cat /etc/hosts # Ligne 127.0.1.1b) Une Box Internet déclarée serveur DNS pour la zone LAN.
Cde utile pour découvrir les serveurs DNS exploités :
[user@hostname] cat /etc/resolv.confc) Des pings qui émis depuis le LAN montrent un retour :
- Positif sur un nom de domaine Internet
Ex : ping www.google.fr
- Positif sur leur propre nom d'hôte
Ex : ping debian-vm1 lancé depuis la VM debian-vm1
- Négatif sur les autres noms d'hôtes de la zone LAN
Ex : ping srvlan lancé depuis la VM debian-vm1
Retour normal :
ping: srvlan: Nom ou service inconnuUn serveur DNS local solutionnera le retour négatif.
2 - Mise en place du service DNS statique
Le système fournit bind 9 et unbound soit les 2 serveurs DNS les plus utilisés sous Debian.
Le choix se portera sur bind 9 qui contrairement à unbound peut être utilisé à la fois comme serveur de noms récursif et serveur de noms faisant autorité.
Un serveur DNS récursif recherchera le résultat d'une requête DNS dans son cache ou à défaut interrogera un serveur DNS faisant autorité pour obtenir le résultat.
Un serveur DNS faisant autorité contiendra le résultat, il n'interrogera pas d'autres serveurs et sera l’autorité finale contenant tous les noms d'hôtes et adresses IP d'une zone donnée.
Le service DNS sera statique car les données seront pour l'instant renseignées manuellement.
2.1 - Installation de bind 9
Installez bind9 :
[srvlan@srvlan] sudo apt install bind9et vérifiez le démarrage de celui-ci :
[srvlan@srvlan] systemctl status bind9Retour normal :
● named.service - BIND Domain Name Server
Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; preset: enabled)
Active: active (running) since Sun 2026-02-08 16:45:12 CET; 1min 9s ago
Invocation: 371cd0d2eddd44e69f461911d33f9dc0
Docs: man:named(8)
Main PID: 2785 (named)
Status: "running"
Tasks: 8 (limit: 1675)
Memory: 29.6M (peak: 29.9M)
CPU: 99ms
CGroup: /system.slice/named.service
└─2785 /usr/sbin/named -f -u bindVérifiez son lancement automatique au boot de la VM :
[srvlan@srvlan] systemctl is-enabled namedRetour normal :
enabled Vérifiez la version installée :
[srvlan@srvlan] sudo named -v Retour :
BIND 9.20.18-1~deb13u1-Debian (Stable Release) <id:>Vérifiez l'utilisation des ports TCP/UDP 53 et 953 :
[srvlan@srvlan] sudo ss -tulnp | grep named Retour partiel :
udp UNCONN 0 0 192.168.3.1:53 0.0.0.0:* users:(("named"...))
tcp LISTEN 0 10 127.0.0.1:53 0.0.0.0:* users:(("named"...))
tcp LISTEN 0 10 192.168.2.2:53 0.0.0.0:* users:(("named"...))
tcp LISTEN 0 5 127.0.0.1:953 0.0.0.0:* users:(("named"...))
tcp LISTEN 0 10 192.168.3.1:53 0.0.0.0:* users:(("named"...))53 = Port DNS TCP/UDP par défaut
953 = Port des Cdes rndc
Vérifiez l'activation de l'outil associé rndc :
[srvlan@srvlan] sudo rndc status Retour :
version: BIND 9.20.18-1~deb13u1-Debian (Stable Release) <id:>
running on localhost: Linux x86_64 6.12.63+deb13-amd64 ...
boot time: Sun, 08 Feb 2026 15:45:12 GMT
last configured: Sun, 08 Feb 2026 15:45:12 GMT
configuration file: /etc/bind/named.conf
CPUs found: 2
worker threads: 2
number of zones: 101 (100 automatic)
debug level: 0
xfers running: 0
xfers deferred: 0
xfers first refresh: 0
soa queries in progress: 0
query logging is OFF
response logging is OFF
memory profiling is INACTIVE
recursive clients: 0/900/1000
recursive high-water: 0
tcp clients: 0/150
TCP high-water: 0
server is up and runningLa ligne de Cde rndc permet de gérer le démon named localement ou à distance.
Pour finir, observez les fichiers de configuration DNS présents dans les dossiers suivants :
[srvlan@srvlan] ls /etc/bind
[srvlan@srvlan] ls /var/cache/bind 3 - Configuration de base
3.1 - Définition des zones de recherche
Une zone de recherche directe permet à un service DNS interrogé de renvoyer une adresse IP associée à un nom alors qu'une zone de recherche inverse fera le contraire.
Le fichier named.conf.local contient la configuration locale du serveur DNS bind9, vous y déclarerez donc les zones de recherche pour intra.loupipfire.fr.
Editez le fichier de configuration named.conf.local :
[srvlan@srvlan] sudo nano /etc/bind/named.conf.localet ajoutez les lignes suivantes à la fin de celui-ci :
# Zone ou Domaine intra.loupipfire.fr
# Définition des zones de recherche directe et inverse
# Serveur DNS maître pour le domaine (type)
# Fichiers de zones associés dans /etc/bind (file)
# MAJ dynamique des fichiers de zones > none (allow-update)
# zone de recherche directe
zone "intra.loupipfire.fr" {
type master;
file "/etc/bind/db.intra.loupipfire.fr.directe";
allow-update { none; };
};
# zone de recherche inverse
# Le réseau 192.168.3.0 aura pour adresse inverse
# 3.168.192.in-addr.arpa
zone "3.168.192.in-addr.arpa" {
type master;
file "/etc/bind/db.intra.loupipfire.fr.inverse";
allow-update { none; };
};3.2 - Construction des zones de recherche
Les fichiers de zones de recherche contiendront les directives et enregistrements de ressources pour le domaine intra.loupipfire.fr.
Créez le fichier pour la zone directe :
[srvlan@srvlan] cd /etc/bind
[srvlan@srvlan] sudo nano db.intra.loupipfire.fr.directeet insérez les lignes suivantes :
;
; DNS - Fichier de zone pour la résolution directe
;
$TTL 86400
@ IN SOA srvlan.intra.loupipfire.fr. root.intra.loupipfire.fr. (
1 ; Serial
604800 ; Refresh - 1w (1 semaine)
84600 ; Retry - 1d (1 jour)
2419200 ; Expire - 4w
604800 ) ; Negative Cache TTL - 1w
;
@ IN NS srvlan.intra.loupipfire.fr.
srvlan IN A 192.168.3.1
ovs IN A 192.168.3.15
debian-vm1 IN A 192.168.3.2
debian-vm2 IN A 192.168.3.4
ctn1 IN A 192.168.3.6
ctn2 IN A 192.168.3.8- Détail des paramètres -
a) Directives SOA (Start of Authority) :
| @ | Représente le nom de domaine de la zone soit intra.loupipfire.fr |
| IN SOA | Désigne srvlan comme autorité pour la zone intra.loupipfire.fr |
| 1 | N° de série du fichier, à changer à chaque modification de celui-ci |
| 604800 | Un DNS esclave attendra 1w avant de rafraichir ses données |
| 84600 | Si échec, il réessaiera 1d après |
| 2419200 | Si échec durant 4w, il cessera de répondre en tant qu'autorité |
| 604800 | Mise en cache des réponses négatives durant 1w |
Le n° de série peut être une date suivie d'un n° d'ordre :
Ex : AAAAMMJJxx
b) Enregistrements de type NS et A :
| IN NS | Indique le nom du serveur DNS pour la zone |
| IN A | Relie un nom d’hôte (domaine - s/domaine) à une adresse IPv4 |
Créez maintenant le fichier pour la zone inverse :
[srvlan@srvlan] cd /etc/bind
[srvlan@srvlan] sudo nano db.intra.loupipfire.fr.inverseet insérez les lignes suivantes :
;
; DNS - Fichier de zone pour la résolution inverse
;
$TTL 86400
@ IN SOA srvlan.intra.loupipfire.fr. root.intra.loupipfire.fr. (
1
1w
1d
4w
1w )
;
@ IN NS srvlan.intra.loupipfire.fr.
1 IN PTR srvlan.intra.loupipfire.fr.
15 IN PTR ovs.intra.loupipfire.fr.
2 IN PTR debian-vm1.intra.loupipfire.fr.
4 IN PTR debian-vm2.intra.loupipfire.fr.
6 IN PTR ctn1.intra.loupipfire.fr.
8 IN PTR ctn2.intra.loupipfire.fr.- Détail des paramètres -
a) Directives SOA (Start of Authority) :
Idem fichier de zone pour la résolution directe.
b) Enregistrements de type PTR :
| IN PTR | Relie une adresse IP à un nom d'hôte |
Nota : Le conteneur sécurisé rootless ctn3 n'a pas été traité, le service réseau slirp4netns ou pasta qui lui est associé manque de certaines fonctionnalités notamment celle de ne pas donner au conteneur une adresse IP routable.
3.3 - Prise en compte des modifications
Redémarrez le service DNS :
[srvlan@srvlan] sudo systemctl restart bind94 - Configuration finale et tests du DNS statique
4.1 - Configuration du fichier hosts
Editez le fichier DNS hosts :
[srvlan@srvlan] sudo nano /etc/hostset ajoutez le FQDN de srvlan (nom d'hôte + nom de domaine) comme suit :
127.0.0.1 localhost
127.0.1.1 srvlan
192.168.3.1 srvlan.intra.loupipfire.fr srvlanCe fichier est consulté avant l'accès au serveur bind et peut donc être utilisé pour un minimum de résolution de noms en cas de panne du serveur DNS.
N'effacez pas le groupe de lignes dédié à l'IPv6.
4.2 - Configuration du fichier resolv.conf
Vous allez modifier ce fichier actuellement traité dynamiquement par l'outil NetworkManager et qui indique à srvlan quel serveur DNS interroger.
Faites un clic droit sur l'applet réseau NetworkManager :
-> Modifier les connexions...
Une fenêtre Connexions réseau s'ouvre :
-> Sélectionnez la Connexion carte 2
-> Cliquez sur la roue dentée située en bas à gauche
Une fenêtre Modification de la Connexion ... s'ouvre :
-> Onglet Paramètres IPv4
Modifiez ensuite la valeur des champs suivants :
-> Serveurs DNS -> Entrez 192.168.3.1
-> Domaines de recherche -> Entrez intra.loupipfire.fr
-> Bouton Enregistrer
-> Authentifiez-vous si une demande est affichée
Modifiez ensuite la Connexion carte 1 en effaçant le contenu du champ Serveurs DNS.
Puis redémarrez le réseau pour une MAJ des nouveaux paramètres nameserver et search :
[srvlan@srvlan] sudo systemctl restart NetworkManagerAffichez pour finir le contenu du fichier resolv.conf :
[srvlan@srvlan] cat /etc/resolv.confqui doit montrer ceci :
# Generated by NetworkManager
search intra.loupipfire.fr
nameserver 192.168.3.14.3 - Tests DNS depuis la VM srvlan
a) Vérifiez la syntaxe du fichier /etc/bind/named.conf :
[srvlan@srvlan] sudo named-checkconfSont inclus dans la vérification les fichiers DNS :
- named.conf.options
- named.conf.local
- named.conf.default-zones
Aucune erreur ne sera retournée en cas de résultat OK.
b) Vérifiez la validité du fichier de zone directe :
[srvlan@srvlan] cd /etc/bind
[srvlan@srvlan] sudo named-checkzone -d intra.loupipfire.fr db.intra.loupipfire.fr.directeLa Cde retourne normalement :
loading "intra.loupipfire.fr" from "db.intra.loupipfire.fr.directe" class "IN"
zone intra.loupipfire.fr/IN: loaded serial 1
OKc) Vérifiez la validité du fichier de zone inverse :
[srlan@srvlan] sudo named-checkzone -d 3.168.192.in-addr.arpa db.intra.loupipfire.fr.inverse La Cde retourne normalement :
loading "3.168.192.in-addr.arpa" from "db.intra.loupipfire.fr.inverse" class "IN"
zone 3.168.192.in-addr.arpa/IN: loaded serial 1
OKd) Testez les outils de vérification host et dig :
Ceux-ci peuvent aider à détecter des problèmes dans la résolution de noms.
La Cde host provient du paquet bind9-host installé de base :
[srvlan@srvlan] sudo host -v srvlan.intra.loupipfire.frCelle-ci retourne normalement :
Trying "srvlan.intra.loupipfire.fr"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48529
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;srvlan.intra.loupipfire.fr. IN A
;; ANSWER SECTION:
srvlan.intra.loupipfire.fr. 86400 IN A 192.168.3.1
Received 60 bytes from 192.168.3.1#53 in 3 ms
Trying "srvlan.intra.loupipfire.fr"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44565
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;srvlan.intra.loupipfire.fr. IN AAAA
;; AUTHORITY SECTION:
intra.loupipfire.fr. 86400 IN SOA srvlan.intra.loupipfire.fr. root.intra.loupipfire.fr. 1 604800 84600 2419200 604800
Received 85 bytes from 192.168.3.1#53 in 0 ms
Trying "srvlan.intra.loupipfire.fr"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8587
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;srvlan.intra.loupipfire.fr. IN MX
;; AUTHORITY SECTION:
intra.loupipfire.fr. 86400 IN SOA srvlan.intra.loupipfire.fr. root.intra.loupipfire.fr. 1 604800 84600 2419200 604800
Received 85 bytes from 192.168.3.1#53 in 0 ms
Trying "srvlan.intra.loupipfire.fr"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15737
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;srvlan.intra.loupipfire.fr. IN HTTPS
;; AUTHORITY SECTION:
intra.loupipfire.fr. 86400 IN SOA srvlan.intra.loupipfire.fr. root.intra.loupipfire.fr. 1 604800 84600 2419200 604800
Received 85 bytes from 192.168.3.1#53 in 0 msLa Cde dig est incluse dans le paquet bind9-dnsutils installé de base :
[srvlan@srvlan] sudo dig SOA srvlan.intra.loupipfire.frCelle-ci retourne normalement :
; <<>> DiG 9.20.18-1~deb13u1-Debian <<>> SOA srvlan.intra.loupipfire.fr
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44042
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 470fdc1bdf28222d010000006988cdd27a83edb77808f9ca (good)
;; QUESTION SECTION:
;srvlan.intra.loupipfire.fr. IN SOA
;; AUTHORITY SECTION:
intra.loupipfire.fr. 86400 IN SOA srvlan.intra.loupipfire.fr. root.intra.loupipfire.fr. 1 604800 84600 2419200 604800
;; Query time: 0 msec
;; SERVER: 192.168.3.1#53(192.168.3.1) (UDP)
;; WHEN: Sun Feb 08 18:54:26 CET 2026
;; MSG SIZE rcvd: 124e) Testez la résolution DNS interne et externe :
[srvlan@srvlan] ping debian-vm1
[srvlan@srvlan] ping debian-vm2.intra.loupipfire.fr
[srvlan@srvlan] ping srvlan
[srvlan@srvlan] ping srvlan.intra.loupipfire.fr
[srvlan@srvlan] ping ctn2
[srvlan@srvlan] ping lemonde.frLe ping srvlan renvoie 127.0.1.1.
Le ping srvlan.intra.loupipfire.fr renvoie 192.168.3.1.
f) Pour finir, vérifiez le chargement des zones DNS :
[srvlan@srvlan] sudo named-checkconf -zRetour :
zone intra.loupipfire.fr/IN: loaded serial 1
zone 3.168.192.in-addr.arpa/IN: loaded serial 15 - Déclaration d'un serveur DNS externe
Le DNS utilise 13 destinations de serveurs racines pour gérer les requêtes d'accès à Internet. Ces serveurs sont chargés de renvoyer lesdites requêtes vers des serveurs DNS de premier niveau appropriés (.com, .fr, etc...).
Le résolveur bind9 exploite par défaut le fichier /usr/share/dns/root.hints pour interroger ces serveurs racines (adresses de a.root-servers.net à m.root-servers.net) et obtenir les réponses aux requêtes d'accès à Internet.
Actuellement bind9 traite les requêtes locales (Ex : ping debian-vm1.intra.loupipfire.fr) ainsi que les requêtes d'accès à Internet (Ex : ping lemonde.fr) et construit son cache en fonction.
Test d'une requête locale :
[srvlan@srvlan] nslookup ovs.intra.loupipfire.frRetour :
Server: 192.168.3.1 (IP serveur DNS soit srvlan)
Address: 192.168.3.1#53
Name: ovs.intra.loupipfire.fr
Address: 192.168.3.15La VM srvlan est l'autorité pour la réponse.
Test d'une requête d'accès à Internet :
[srvlan@srvlan] nslookup lemonde.frRetour :
Server: 192.168.3.1 (IP serveur DNS soit srvlan)
Address: 192.168.3.1#53
Non-authoritative answer:
Name: lemonde.fr
Address: 151.101.a.bConstat, srvlan n'est plus l'autorité pour la réponse.
Vous allez à présent, pour alléger le travail de srvlan, demander que les requêtes d'accès à Internet (les demandes de résolutions externes) soient dorénavant traitées par les serveurs DNS de Google.
Editez pour cela le fichier DNS named.conf.options :
[srvlan@srvlan] sudo nano /etc/bind/named.conf.optionset modifiez celui-ci afin qu'il contienne ces lignes :
options {
directory "/var/cache/bind";
dnssec-validation auto;
// Limiter les réponses récursives aux
// réseaux/IP des interfaces du serveur DNS srvlan
allow-recursion { localnets; };
// Pour les autres réseaux/IP,
// transfert des requêtes DNS vers Internet.
// Adresses IPv4 des serveurs DNS de Google.
forward only;
forwarders { 8.8.8.8; 8.8.4.4; };
listen-on-v6 { any; };
}; Redémarrez maintenant le service bind9 :
[srvlan@srvlan] sudo systemctl restart bind9 et testez une requête d'accès à Internet :
[srvlan@srvlan] nslookup yahoo.frRetour :
Server: 192.168.3.1
Address: 192.168.3.1#53
Non-authoritative answer:
Name: yahoo.fr
Address: 76.223.84.192
Name: yahoo.fr
Address: 13.248.158.7La résolution externe se fait toujours mais utilisez-vous les DNS de Google ?
Pour le savoir, remplacez les IP du paramètre forwarders par des IP quelconques, redémarrez le service bind9 afin de vider le cache DNS actif et relancez la requête :
[srvlan@srvlan] nslookup yahoo.fr Retour :
;; communications error to 192.168.3.1#53: timed out
;; Got SERVFAIL reply from 192.168.3.1
Server: 192.168.3.1
Address: 192.168.3.1#53
** server can't find yahoo.fr: SERVFAILLa résolution externe ne fonctionne plus, vous utilisiez bien les DNS de Google.
Remettez maintenant les bonnes adresses IP et redémarrez le service bind9.
6 - Tests DNS depuis les VM/CTN de la zone LAN
6.1 - VM ovs et CTN ctn1/ctn2
Se connecter en SSH sur la VM ovs (voir Mémento 6.1).
Editez ensuite son fichier DNS resolv.conf :
[switch@ovs] sudo nano /etc/resolv.confet remplacez le contenu existant par celui-ci :
# Generated by dhcpcd
# /etc/resolv.conf.head can replace this line
# /etc/resolv.conf.tail can replace this line
# Déclaration du serveur DNS à utiliser
# Fichier resolv.conf - Client DNS
# Nom du domaine local
domain intra.loupipfire.fr
# Ajout auto du nom de domaine local aux
# noms d'hôtes non pleinement qualifiés
search intra.loupipfire.fr
# Adresses IP du ou des serveurs DNS à interroger
nameserver 192.168.3.1Nota : Les 4 premières lignes sont présentes seulement sous Debian 13.
Rebootez la VM :
[switch@ovs] sudo rebootPuis, utilisez cette Cde pour interagir avec ctn1/ctn2 :
[switch@ovs] sudo podman exec -it ctn1 ou 2 bashet lancez la Cde cat /etc/resolv.conf qui doit retourner ceci :
search intra.loupipfire.fr
nameserver 192.168.3.1Le fichier resolv.conf a été mis à jour automatiquement lors de la reconstruction des 2 conteneurs Podman.
Vérifiez l'ID du Name Server pour intra.loupipfire.fr :
[switch@ovs] dig NS intra.loupipfire.fr +short Retour :
srvlan.intra.loupipfire.fr.Pour finir, depuis les 3 systèmes, pinguez les VM suivantes et observez les FQDN retournés :
ping srvlan
ping debian-vm1.intra.loupipfire.fr
ping debian-vm2FQDN = nom_hôte.nom_domaine
6.2 - VM debian-vm1 et debian-vm2
Idem srvlan.
Faites un clic droit sur l'applet réseau NetworkManager :
-> Modifier les connexions...
Une fenêtre Connexions réseau s'ouvre :
-> Sélectionnez la connexion réseau affichée
-> Cliquez sur la roue dentée située en bas à gauche
Une fenêtre Modification de la Connexion ... s'ouvre :
-> Onglet Paramètres IPv4
Modifiez ensuite la valeur des champs suivants :
-> Serveurs DNS -> Entrez 192.168.3.1
-> Domaines de recherche -> Entrez intra.loupipfire.fr
-> Bouton Enregistrer
-> Authentifiez-vous si une demande est affichée
Puis effectuez une MAJ des paramètres nameserver et search du fichier DNS /etc/resolv.conf :
[clientlinux@debian-vm*] sudo systemctl restart NetworkManagerInstallez le paquet incluant la Cde DNS nslookup :
[clientlinux@debian-vm*] sudo apt install dnsutils Nota : Non nécessaire sous Debian 13.
et vérifiez l'IP du Name Server pour intra.loupipfire.fr :
[clientlinux@debian-vm*] nslookup ovs.intra.loupipfire.frRetour :
Server: 192.168.3.1
Address: 192.168.3.1#53
Name: ovs.intra.loupipfire.fr
Address: 192.168.3.15Pinguez les VM suivantes et observez les FQDN retournés :
[clientlinux@debian-vm*] ping srvlan.intra.loupipfire.fr
[clientlinux@debian-vm*] ping ovsPour terminer, lancez le navigateur Web et vérifiez le bon accès à Internet.
7 - Simulation de panne
Arrêtez le service DNS fourni par srvlan :
[srvlan@srvlan] sudo systemctl stop bind9Redémarrez les clients debian-vm* et ovs afin de vider leurs caches DNS.
Les pings du § 6.2 lancés depuis les VM debian-vm* devraient échouer.
Redémarrez le service DNS et vérifiez que les pings fonctionnent à nouveau.

Voilà, c'est fini pour le DNS statique.
Le mémento 7.2 vous attend à
présent pour installer un
serveur DHCP.

