Outils pour utilisateurs

Outils du site


sysadmin:configurer-bind9

Configurer BIND9

Installation du serveur de résolution de nom ISC BIND1). Configuration minimale en tant que serveur faisant autorité sur la zone “internal”.

Il est recommandé d'utiliser internal comme TLD pour assurer la résolution de noms sur nos réseaux privés pour éviter tout conflit avec lan utilisé par le protocole mdns.

Environnement

Date 2026-07
Architecture x86_64
Système Debian GNU/Linux 13 (trixie)
Noyau 6.12.96+deb13-amd64

Procédure

apt install -y bind9 bind9-doc bind9utils dnsutils

Pour vérifier le fonctionnement du service :

systemctl status named
 
ss -lptun | grep named

Avec le paquet bind9utils on installe également le binaire rndc2) qui permet de contrôler le service via le port TCP 953.

Invoquer la commande sans arguments pour obtenir la liste des options disponibles. Quelques exemples :

# Etat du serveur
rndc status
 
# Recharger la configuration
rndc reload
 
# Activer/désactiver la journalisation des requêtes
rndc querylog ON
rndc querylog OFF
 
# Vider le cache
rndc flush
 
# Augmente la verbosité des logs (à chaque appel ou en spécifiant le niveau)
rndc trace
 
# Dump des statistiques (par défaut dans /var/cache/bind/named.stats)
rndc stats

A propos de la configuration

Sans surprise, les fichiers de configuration du service BIND se trouvent dans le dossier /etc/bind. Le fichier de configuration principal /etc/bind/named.conf inclus les fichiers :

  • /etc/bind/named.conf.options définir les options globales (à compléter) ;
  • /etc/bind/named.conf.local définir les zones gérées par ce serveur (à compléter) ;
  • /etc/bind/named.conf.root-hints importation des serveurs DNS racines ;

Les nombreuses options de paramétrage sont détaillées dans la documentation :

man -S 5 named.conf

Dans le fichier de configuration /etc/bind/named.conf.options on peut définir précisément les interfaces IPv4 ou IPv6 sur lesquelles le serveur bind sera à l'écoute.

Écouter sur toutes les interfaces

listen-on { any; };
listen-on-v6 { any; };

Spécifier une ou plusieurs adresses IPv4 et le port

listen-on port 5353 { 127.0.0.1; 192.168.0.1; };
listen-on-v6 { none; };

Après toute modification de la configuration, vérifier la syntaxe avec la commande :

named-checkconf -z

Puis recharger la configuration :

rndc reload
 
# Alternative
systemctl reload named.service

A propos du support d'IPv6

Si IPv6 est utilisé seulement sur le réseau local et que le serveur BIND ne peut pas joindre les serveurs racines ou les forwarders via ce protocole, les réponses aux requêtes peuvent être très longues et comporter des erreurs de type SERVFAIL

dig @127.0.0.1 www.google.fr A
 
; <<>> DiG 9.20.26-1~deb13u1-Debian <<>> @127.0.0.1 www.google.fr A
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 20789
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
 
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 819fa453655def6b010000006a6f289ecc0afcf6f9ae8ce2 (good)
;; QUESTION SECTION:
;www.google.fr.                 IN      A
 
;; Query time: 255 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP)
;; WHEN: Sun Aug 02 13:23:10 CEST 2026
;; MSG SIZE  rcvd: 70

Dans ce cas, il faut paramétrer le service sans support du protocole IPv6.

Modifier le fichier /etc/default/named et ajouter l'option -4 pour forcer BIND à utiliser seulement la pile IPv4

#
# run resolvconf?
RESOLVCONF=no
 
# startup options for the server
OPTIONS="-u bind -4"

Relancer le service

systemclt restart named.service

Créer une zone

Nous allons créer la zone glp.internal. et définir le serveur en tant que serveur maître sur celle-ci : C'est lui qui fera autorité sur cette zone.

Modifier le fichier de configuration /etc/bind/named.conf.local afin de déclarer la zone glp.internal.

zone "glp.internal" { 
        type master; 
        file "/etc/bind/db.glp.internal"; 
        allow-update { none; };
};

Remarque: Pour éviter qu'un tiers ne mette à jour dynamiquement votre zone DNS, utiliser la déclaration allow-update

Le fichier /etc/bind/db.glp.internal contiendra la définition de la zone glp.internal. Créer le fichier.

touch db.glp.internal

Il contiendra les définitions suivantes

;
; BIND fichier de données pour la zone internal
;
$TTL    604800
@       IN      SOA     ns1.glp.internal. contact.glp.internal. (
                              2         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@        IN      NS      ns1.glp.internal.
;
gateway  IN      A       192.168.1.1
ns1      IN      A       192.168.1.15
test     IN      A       192.168.1.20

Créer la zone de recherche inversée

Cette zone va permettre au serveur DNS de convertir une adresse IP en nom. A nouveau modifier le fichier de configuration /etc/bind/named.conf.local pour ajouter la zone de recherche inversée.

zone "1.168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/db.reverse.glp.internal";
        notify no;
        allow-update { none; };
};

Ici c'est dans le fichier db.reverse.internal que seront définies les entrées de la zone. Utiliser un fichier existant en modèle pour créer le nouveau fichier de zone.

cp db.127 db.reverse.internal

Modifier le fichier de zone inversé /etc/bind/db.192. Attention a bien modifier l'entrée SOA, le nom du serveur doit correspondre à la zone lan. A chaque entrée A du fichier de zone lan doit correspondre un enregistrement PTR.

;
; BIND reverse data file
;
$TTL    604800
@       IN      SOA     ns1.glp.internal. admin.glp.internal. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL

@       IN      NS      ns1.glp.internal.

1       IN      PTR     gateway.glp.internal.
15      IN      PTR     ns1.glp.internal.
20      IN      PTR     test.glp.internal.

Vérifier la configuration et recharger les fichiers de configuration

named-checkzone 122.168.192.in-addr.arpa /etc/bind/db.reverse.glp.internal
 
named-checkconf -z && systemctl reload named.service

Tester la recherche inversée

Avec nslookup en passant l'adresse IP directement en paramètre ou en mode interactif en restreignant le type de réponses à PTR:

nslookup 
> set type=PTR
> 192.168.1.201
Server:         192.168.1.200
Address:        192.168.1.200#53
 
201.1.168.192.in-addr.arpa      name = pi-stache.lan.
>

A propos de la RFC 1918

Utilisation du service par l’hôte

:TODO_DOCUPDATE:

Une fois le service correctement paramétré, on peut configurer l’hôte pour qu'il utilise ce serveur DNS.

Pour afficher quel serveur DNS est utilisé par défaut sur le système :

cat /etc/resolv.conf

Les commentaires du fichiers indiquent quel service à définit le contenu du fichier (en général le client DHCP).

Le fichier /etc/resolv.conf doit maintenant indiquer l'adresse de notre serveur BIND :

systemctl start named-resolvconf.service

Statistiques

Les statistiques ne doivent pas être exposées sur une interface publique car elles peuvent fournir des informations importantes pouvant faciliter les attaques.

Deux méthodes exposent les statistiques du serveur BIND :

  • le fichier named.stats ;
  • le serveur HTTP (recommandé).

Pour activer le service d'export des statistiques via HTTP, ajouter la directive statistics-channels dans le fichier de configuration /etc/bind/named.conf.local :

statistics-channels { inet 127.0.0.1 port 8080 ; };

Valider la syntaxe et relancer le service :

named-checkconf -z
systemctl reload named.service

:TODO:

  • voir paramètre query logging affiché par la commande rndc status ;
  • directive
rndc querylog on

Références

1)
Berkeley Internet Name Domain
2)
remote name daemon controller
sysadmin/configurer-bind9.txt · Dernière modification : 2026/08/03 05:47 de yoann