Installation d'un serveur DNS avec BIND9 sur Ubuntu Server - guide complet
Dans ce guide, je t'explique comment installer et configurer un serveur DNS interne avec BIND9 sur Ubuntu Server. Nous allons créer une zone de résolution directe (nom -> IP) et une zone inversée (IP -> nom), et résoudre les bugs courants rencontrés en chemin.
Prérequis : Ubuntu Server 22.04, accès sudo.
Adapte les valeurs suivantes à ton environnement :
- Domaine local :
mondomaine.local- IP du serveur DNS :
192.168.1.10- Réseau :
192.168.1.0/24
C'est quoi BIND9 ?
BIND9 (Berkeley Internet Name Domain) est le serveur DNS le plus utilisé sous Linux. Il permet de :
- Résoudre des noms d'hôtes en adresses IP (zone directe)
- Résoudre des adresses IP en noms d'hôtes (zone inversée)
- Servir de DNS interne pour un réseau local
Étape 1 : Installer BIND9
sudo apt-get update
sudo apt-get install bind9 dnsutils
dnsutils installe des outils de diagnostic comme nslookup et dig.
Étape 2 : Comprendre les fichiers de configuration
ls -l /etc/bind
BIND9 s'appuie sur plusieurs fichiers :
named.conf- fichier principal, charge les 3 autres viaincludenamed.conf.options- options globales (forwarders, récursivité...)named.conf.local- déclaration de tes zones personnaliséesnamed.conf.default-zones- zones incluses par défaut (localhost, etc.)db.<nom>- fichiers de zones exemples, utiles comme modèles
Étape 3 : Sauvegarder les fichiers de base
cd /etc/bind
sudo cp named.conf.options named.conf.options.bkp
sudo cp named.conf.local named.conf.local.bkp
Étape 4 : Configurer les options globales
sudo nano /etc/bind/named.conf.options
Vérifie ensuite la syntaxe :
sudo named-checkconf
Bug rencontré :
named.conf:11: missing ';' before 'include'Cause : une directive
includesans point-virgule à la fin.Solution : ouvre
named.confet vérifie que chaque ligneincludese termine par;
Étape 5 : Déclarer les zones DNS
sudo nano /etc/bind/named.conf.local
//
// Do any local configuration here
//
//include "/etc/bind/zones.rfc1918";
zone "mondomaine.local" {
type master;
file "/etc/bind/db.mondomaine.local";
allow-update { none; };
};
zone "1.168.192.in-addr.arpa" {
type master;
file "/etc/bind/db.reverse.mondomaine.local";
allow-update { none; };
};
Remplace
1.168.192.in-addr.arpapar les 3 premiers octets de ton réseau inversés. Exemple : réseau10.0.2.0/24->2.0.10.in-addr.arpa
Étape 6 : Créer le fichier de zone directe
Copie le fichier exemple comme base :
sudo cp /etc/bind/db.local /etc/bind/db.mondomaine.local
sudo nano /etc/bind/db.mondomaine.local
Contenu :
;
; Zone directe pour mondomaine.local
;
$TTL 604800
@ IN SOA ns1.mondomaine.local. root.mondomaine.local. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns1.mondomaine.local.
@ IN A 192.168.1.10
ns1 IN A 192.168.1.10
localhost IN A 127.0.0.1
@ IN AAAA ::1
Explication des paramètres SOA :
- $TTL : durée de vie des enregistrements en cache (en secondes)
- SOA : Start Of Authority - serveur DNS primaire + email du responsable (le
@est remplacé par.) - Serial : numéro de version - à incrémenter à chaque modification
- Refresh : fréquence de synchronisation avec les serveurs secondaires
- Retry : délai de nouvelle tentative en cas d'échec de synchronisation
- Expire : délai au bout duquel un serveur secondaire cesse de répondre
- Negative Cache TTL : durée de mise en cache des réponses "introuvable"
Vérifie la syntaxe :
sudo named-checkzone mondomaine.local /etc/bind/db.mondomaine.local
Résultat attendu :
zone mondomaine.local/IN: loaded serial 2
OK
Étape 7 : Créer la zone de recherche inversée
La zone inversée permet de résoudre une IP en nom d'hôte.
sudo nano /etc/bind/db.reverse.mondomaine.local
Contenu :
;
; Zone inversée pour 192.168.1.0/24
;
$TTL 604800
$ORIGIN 1.168.192.in-addr.arpa.
@ IN SOA ns1.mondomaine.local. root.mondomaine.local. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns1.mondomaine.local.
10 IN PTR ns1.mondomaine.local.
L'enregistrement
PTRassocie le dernier octet de l'IP (10) au nom d'hôte.
Vérifie la zone inversée :
sudo named-checkzone 1.168.192.in-addr.arpa /etc/bind/db.reverse.mondomaine.local
Résultat attendu :
zone 1.168.192.in-addr.arpa/IN: loaded serial 2
OK
Étape 8 : Démarrer BIND9
sudo systemctl start bind9
sudo systemctl enable named.service
sudo systemctl status bind9
Étape 9 : Configurer la résolution locale
Pour que le serveur utilise son propre DNS :
sudo nano /etc/resolv.conf
search mondomaine.local
domain mondomaine.local
nameserver 127.0.0.1
Étape 10 : Tester la résolution DNS
Résolution directe (nom -> IP) :
nslookup ns1.mondomaine.local
Résultat attendu :
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: ns1.mondomaine.local
Address: 192.168.1.10
Résolution inversée (IP -> nom) :
nslookup 192.168.1.10
Résultat attendu :
10.1.168.192.in-addr.arpa name = ns1.mondomaine.local.
Bug rencontré :
SERVFAILsur la résolution inverséeCause : le fichier de zone inversée référencé dans
named.conf.localne correspondait pas au fichier réellement créé.Solution : vérifier que le nom du fichier dans
named.conf.localcorrespond exactement au fichier créé dans/etc/bind/.
Ce que j'ai appris
- BIND9 est puissant mais très sensible à la syntaxe - un
;manquant suffit à tout bloquer - Toujours utiliser
named-checkconfetnamed-checkzoneavant de redémarrer le service - La zone inversée nécessite que les octets du réseau soient écrits à l'envers dans le nom de zone
journalctl -xeu named.serviceest ton meilleur ami pour déboguer