Debian : Installer et configurer un serveur DNS avec bind
Table des matières
BIND (Berkeley Internet Name Domain) est le serveur DNS le plus utilisé sur Internet, spécialement sur les systèmes de type Unix.
Dans cet article, nous allons voir comment le mettre en place sur Debian.
Cet article a été mis à jour et est fonctionnel avec Debian 13.
Les commandes seront toutes exécutées en tant que root.
Chaque commande devra être préfixée de sudo ou on se connecte en root via :
On est sur un tuto mémo, je ne rappelle pas les concepts de zone directe, zone inverse, ni n'explique les enregistrements A AAAA NS CNAME PTR ...
Dans le tuto, j'utiliserai le nom de domainelinuxtrickstest.lan
On installe le service et les outils :
Le fichier principal est le fichier /etc/bind/named.conf. Il fait référence à 2 autres fichiers de configuration que nous modifierons :
Le fichier named.conf.options contiendra les options de configuration de notre serveur DNS
Le fichier named.conf.local contiendra les informations sur les zones DNS à gérer.
On va configurer dans un premier temps les options :
On va y ajouter un bloc acl pour définir une règle d'accès nommée lan.
On y ajoute un bloc d'options définissant les résolveurs externe, les interfaces d'écoutes, ...
Voici le fichier commenté :
On pourra vérifier la syntaxe du fichier de config avec :
Ensuite, on complète la configuration de bind.
On édite le fichier de configuration named.conf.local :
On configure notre zone directe :
On créé le fichier /etc/bind/db.linuxtrickstest.lan (dans mon exemple), mais plus généralement, celui qu'on a déclaré précédemment :
On y renseigne les informations sur la zone et les entrées DNS en question (A, AAAA, CNAME, MX, ...) :
On peut vérifier la syntaxe via :
Si tout est OK, on a ce type de retour :
On va évidemment activer le service au démarrage de notre système :
Et on le recharge pour prendre en compte les modifications apportées précédemment (il est démarré depuis l'installation, car Debian l'a démarré automatiquement après installation) :
On vérifie que le service tourne bien :
On modifie le fichier /etc/resolv.conf du serveur pour lui forcer à utiliser le DNS installé :
En y mettant :
Avec les outils installés, on peut tester une interrogation d'un enregistrement de la zone :
Ce qui donne :
Ou un FQDN externe pour vérifier qu'il y a bien un forward :
Ce qui donne :
On édite le fichier named.conf.local :
On ajoute à la suite notre zone inverse :
On créé le fichier associé à notre zone, ici /etc/bind/db.reverse.linuxtrickstest.lan :
On y renseigne les informations sur la zone et les entrées DNS en question (PTR, ...) :
On peut vérifier la bonne syntaxe via :
Ce qui donne :
Après chaque modif, on recharge le service :
Et on peut tester avec nslookup une requête :
Et la réponse est renvoyée :
Introduction
BIND (Berkeley Internet Name Domain) est le serveur DNS le plus utilisé sur Internet, spécialement sur les systèmes de type Unix.
Dans cet article, nous allons voir comment le mettre en place sur Debian.
Cet article a été mis à jour et est fonctionnel avec Debian 13.
Les commandes seront toutes exécutées en tant que root.
Chaque commande devra être préfixée de sudo ou on se connecte en root via :
Code BASH :
sudo -i
On est sur un tuto mémo, je ne rappelle pas les concepts de zone directe, zone inverse, ni n'explique les enregistrements A AAAA NS CNAME PTR ...
Installation
Dans le tuto, j'utiliserai le nom de domainelinuxtrickstest.lan
On installe le service et les outils :
Code BASH :
apt install bind9 bind9-utils bind9-dnsutils
Configuration du DNS
Configuration générale
Le fichier principal est le fichier /etc/bind/named.conf. Il fait référence à 2 autres fichiers de configuration que nous modifierons :
Code TEXT :
include "/etc/bind/named.conf.options"; include "/etc/bind/named.conf.local";
Le fichier named.conf.options contiendra les options de configuration de notre serveur DNS
Le fichier named.conf.local contiendra les informations sur les zones DNS à gérer.
On va configurer dans un premier temps les options :
Code BASH :
vim /etc/bind/named.conf.options
On va y ajouter un bloc acl pour définir une règle d'accès nommée lan.
On y ajoute un bloc d'options définissant les résolveurs externe, les interfaces d'écoutes, ...
Voici le fichier commenté :
Code TEXT :
// Autoriser uniquement certains réseaux à solliciter ce DNS acl "lan" { // réseaux à définir 192.168.0.0/16; // Serveur lui même localhost; // réseau du serveur (réseau des interfaces réseaux) localnets; }; options { // Répertoire de travail de Bind directory "/var/cache/bind"; // Redirecteurs DNS (résolveurs externes), ici cloudflare + blocage malware + contenus adultes forwarders { 1.1.1.3; 1.0.0.3; }; // Mode récursif, pour résoudre les noms externes recursion yes; // Active la validation DNSSEC (vérifier l'authenticité des réponses DNS signées) dnssec-validation auto; // Ecouter sur toutes les interfaces réseau en IPv4 et IPv6 listen-on { any; }; listen-on-v6 { any; }; // Autoriser les requêtes pour les hôtes de l'ACL "lan" allow-query { lan; }; };
On pourra vérifier la syntaxe du fichier de config avec :
Code TEXT :
named-checkconf
Configuration de la zone Directe
Ensuite, on complète la configuration de bind.
On édite le fichier de configuration named.conf.local :
Code BASH :
vim /etc/bind/named.conf.local
On configure notre zone directe :
Code TEXT :
zone "linuxtrickstest.lan" { type master; file "/etc/bind/db.linuxtrickstest.lan"; // refuser les mises à jour des enregistrements DNS par un tiers non autorisé. allow-update { none; }; };
On créé le fichier /etc/bind/db.linuxtrickstest.lan (dans mon exemple), mais plus généralement, celui qu'on a déclaré précédemment :
Code BASH :
vim /etc/bind/db.linuxtrickstest.lan
On y renseigne les informations sur la zone et les entrées DNS en question (A, AAAA, CNAME, MX, ...) :
Code TEXT :
; BIND data file for linuxtrickstest.lan ; Durée de vie (pour le cache des autres DNS) $TTL 86400 ; @ = Racine de la zone // Start of Authority paramètres principaux de la zone, DNS autorité + adresse de l admin @ IN SOA debinfra.linuxtrickstest.lan. admin.linuxtrickstest.lan. ( 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ; Negative Cache TTL ) ; Enregistrements @ IN NS debinfra.linuxtrickstest.lan. debinfra IN A 192.168.221.2 gw IN A 192.168.221.254
On peut vérifier la syntaxe via :
Code BASH :
named-checkzone linuxtrickstest.lan /etc/bind/db.linuxtrickstest.lan
Si tout est OK, on a ce type de retour :
Code TEXT :
zone linuxtrickstest.lan/IN: loaded serial 1 OK
Configuration du système
On va évidemment activer le service au démarrage de notre système :
Code BASH :
systemctl enable named.service
Et on le recharge pour prendre en compte les modifications apportées précédemment (il est démarré depuis l'installation, car Debian l'a démarré automatiquement après installation) :
Code BASH :
systemctl reload named.service
On vérifie que le service tourne bien :
Code BASH :
systemctl status named.service
Code TEXT :
● named.service - BIND Domain Name Server Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; preset: enabled) Active: active (running) since Wed 2025-07-09 21:17:30 CEST; 2s ago Invocation: dc6215fc7ff948cca77e56de6eeea9a4 Docs: man:named(8) Main PID: 1958 (named) Status: "running" Tasks: 10 (limit: 4639) Memory: 40.9M (peak: 41.4M) CPU: 24ms CGroup: /system.slice/named.service └─1958 /usr/sbin/named -f -u bind
On modifie le fichier /etc/resolv.conf du serveur pour lui forcer à utiliser le DNS installé :
Code BASH :
vim /etc/resolv.conf
En y mettant :
Code TEXT :
domain linuxtrickstest.lan search linuxtrickstest.lan nameserver 127.0.0.1
Test du service
Avec les outils installés, on peut tester une interrogation d'un enregistrement de la zone :
Code BASH :
nslookup gw.linuxtrickstest.lan
Ce qui donne :
Code TEXT :
Server: 127.0.0.1 Address: 127.0.0.1#53 Name: gw.linuxtrickstest.lan Address: 192.168.221.254
Ou un FQDN externe pour vérifier qu'il y a bien un forward :
Code BASH :
nslookup www.linuxtricks.fr
Ce qui donne :
Code TEXT :
Server: 127.0.0.1 Address: 127.0.0.1#53 Non-authoritative answer: Name: www.linuxtricks.fr Address: 172.67.185.67 Name: www.linuxtricks.fr Address: 2606:4700:3037::6815:1337
Configuration de la zone inverse
On édite le fichier named.conf.local :
Code BASH :
vim /etc/bind/named.conf.local
On ajoute à la suite notre zone inverse :
Code TEXT :
zone "221.168.192.in-addr.arpa" { type master; file "/etc/bind/db.reverse.linuxtrickstest.lan"; allow-update { none; }; };
On créé le fichier associé à notre zone, ici /etc/bind/db.reverse.linuxtrickstest.lan :
Code BASH :
vim /etc/bind/db.reverse.linuxtrickstest.lan
On y renseigne les informations sur la zone et les entrées DNS en question (PTR, ...) :
Code TEXT :
; BIND data file for db.reverse.linuxtrickstest.lan ; Durée de vie (pour le cache des autres DNS) $TTL 86400 ; @ = Racine de la zone // Start of Authority paramètres principaux de la zone, DNS autorité + adresse de l admin @ IN SOA debinfra.linuxtrickstest.lan. admin.linuxtrickstest.lan. ( 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ; Negative Cache TTL ) ; Enregistrements @ IN NS debinfra.linuxtrickstest.lan. 2 IN PTR debinfra.linuxtrickstest.lan. 254 IN PTR gw.linuxtrickstest.lan.
On peut vérifier la bonne syntaxe via :
Code BASH :
named-checkzone 221.168.192.in-addr.arpa /etc/bind/db.reverse.linuxtrickstest.lan
Ce qui donne :
Code TEXT :
zone 221.168.192.in-addr.arpa/IN: loaded serial 1 OK
Après chaque modif, on recharge le service :
Code BASH :
systemctl reload named
Et on peut tester avec nslookup une requête :
Code BASH :
nslookup 192.168.221.254
Et la réponse est renvoyée :
Code BASH :
254.221.168.192.in-addr.arpa name = gw.linuxtrickstest.lan.