Utiliser Debian et dérivées

Debian : Installer et configurer un serveur DNS avec bind

Table des matières

dns_bind



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.
Cette page a été vue 33671 fois