Mise en place

image.png

Installation

Nous allons commencer par mettre à jour le cache des paquets et procéder à l'installation du paquet Bind9, ainsi qu'un autre paquet permettant d'obtenir des outils DNS supplémentaires.

apt-get update
apt-get install bind9 dnsutils

Fichiers

La liste des fichiers de configuration :

ls -l /etc/bind

image.png

Par défaut, ce répertoire contient déjà un ensemble de fichiers de configuration. Vous devez savoir que :

ce qui donne :

image.png

Configuration

Comme je l'ai dit précédemment, les options de configuration de Bind sont définies dans le fichier "named.conf.options". Voici un aperçu de ce fichier, dans sa configuration par défaut :

image.png

On peut voir qu'il y a beaucoup de lignes commentées (celles qui débutent par "//"), ainsi que plusieurs options définies par défaut. Nous allons devoir ajuster cette configuration.

nano /etc/bind/named.conf.options

Dans ce fichier, vous allez devoir définir plusieurs options, notamment pour permettre la résolution des noms externes, via les DNS publics de Cloudflare (1.1.1.1) et Quad9 (9.9.9.9), que vous pouvez remplacer par d'autres IP. Il convient aussi de mettre en écoute le serveur DNS.

Voici la configuration commentée que vous pouvez utiliser :

options {
        // Répertoire de travail de Bind
        directory "/var/cache/bind";

        // Redirecteurs DNS (résolveurs externes)
        forwarders {
                1.1.1.1;
                9.9.9.9;
        };

        // 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; };
};

Pour aller plus loin, nous pouvons définir une ACL (règle d'accès) pour indiquer que seules les machines du LAN peuvent contacter ce serveur DNS. Ainsi, nous autorisons "192.168.1.0/24", le serveur lui-même (localhost) et le réseau auquel il est connecté, soit "192.168.14.0/24" (localnets).

Cette ACL doit être déclarée avant le bloc "options" :

// Autoriser uniquement certains réseaux à solliciter ce DNS
acl "lan" {
        192.168.1.0/24;
        localhost;
        localnets;
};

Puis, dans le bloc "options", à la suite des directives "listen-on" mais avant la fermeture du bloc, ajoutez ceci :

        // Autoriser les requêtes pour les hôtes de l'ACL "lan"
        allow-query { lan; };

Quand c'est fait, enregistrez le fichier. Vous pouvez le fermer et exécuter la commande ci-dessous pour vérifier la syntaxe :

named-checkconf

Déclarer une zone DNS

Nous allons devoir déclarer notre nouvelle zone DNS. Pour cela, éditez ce fichier de configuration :

nano /etc/bind/named.conf.local

Puis, ajoutez le code suivant :

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

Pour rappel, nous allons créer la zone DNS "domaine.local" et le fichier de zone sera "/etc/bind/dbdomaine.local". L'instruction "allow-update { none; };" permet de refuser les mises à jour des enregistrements DNS par un tiers non autorisé.

Quand c'est fait, enregistrez et fermez le fichier.

Désormais, vous allez copier le fichier "db.local" pour l'utiliser comme base pour votre nouvelle zone :

cp /etc/bind/db.local /etc/bind/db.domaine.local

Quand c'est fait, vous pouvez passer à l'édition du fichier de zone.

Configurer la zone DNS

Nous allons modifier le fichier de zone pour le configurer et créer nos premiers enregistrements DNS. Nous verrons comment créer un enregistrement A, ainsi qu'un alias CNAME.

Commencez par ouvrir le fichier de zone :

nano /etc/bind/db.domaine.local

Après modifications, voici le fichier de zone "domaine.local" prêt à l'emploi. Il permet de déclarer le serveur local, à savoir SRV-DNS, comme serveur faisant autorité sur la zone. Nous déclarons également un enregistrement A avec l'adresse IP du serveur DNS, à savoir "192.168.14.99".

; BIND data file for domaine.local
$TTL    604800
@       IN      SOA     srv-dns.domaine.local. admin.domaine.local. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@               IN      NS      srv-dns.domaine.local.
srv-dns         IN      A       192.168.14.99

Quelques explications supplémentaires :

Créer un enregistrement DNS

Nous allons voir comment créer un enregistrement A et un enregistrement CNAME dans cette nouvelle zone. Voici quelques instructions sur la syntaxe à respecter.

<nom-de-l'hote>    IN   A    <IP>
<nom-de-l'alias> IN CNAME <nom-de-l'enregistrement-de-référence>

À partir de ces informations, ajoutons 2 enregistrements DNS :

Ainsi, dans le fichier de zone, il convient d'ajouter ceci :

dns             IN      CNAME   srv-dns
srv-dhcp        IN      A       192.168.14.98

Désormais, testez sa syntaxe avec la commande "named-checkzone" :

named-checkzone domaine.local /etc/bind/db.domaine.local 
zone domaine.local/IN: loaded serial 2
OK

Démarer Bind9

La configuration est terminée, nous allons démarrer notre serveur Bind9 et activer son démarrage automatique. Exécutez les commandes suivantes :

systemctl start bind9
systemctl enable named.service
systemctl status bind9

Tester la résolution de nom

Sur le serveur DNS lui-même, vous pouvez modifier la configuration réseau pour qu'il sollicite son propre résolveur DNS local pour la résolution des noms. Vous devez modifier le fichier de configuration "resolv.conf" (ou passer par Netplan).

nano /etc/resolv.conf

Puis, indiquez ceci :

search domaine.local
domain domaine.local
nameserver 127.0.0.1

ermez le fichier. Désormais, vous pouvez tenter de résoudre les noms de la zone "domaine.local".

Pour cela, l'outil "nslookyp" sera très utile. Précisez simplement le nom à résoudre et il va solliciter le DNS pour obtenir l'information. Vous pouvez faire plusieurs tests, tels que :

nslookup srv-dns.domaine.local
nslookup dns.domaine.local
nslookup srv-dhcp.domaine.local

Tout fonctionne à merveille !

Créer une zone inverse

Pour finir, nous allons créer une zone de recherche inversée pour le réseau "192.168.14.0/24", correspondant au réseau local utilisé pour cette mise en pratique. Ceci permettra d'obtenir un nom d'hôte à partir d'une adresse IP, soit l'inverse du fonctionnement d'une zone de recherche directe.

Sur le même principe que pour la zone de recherche directe, nous allons créer cette fameuse zone.

Commencez par éditer le fichier "named.conf.local" pour déclarer la zone :

sudo nano /etc/bind/named.conf.local

Voici la déclaration de la zone inversée :

zone "14.168.192.in-addr.arpa" {
    type master;
    file "/etc/bind/db.reverse.domaine.local";
    allow-update { none; };
};

Vous pouvez remarquer que le nom de la zone est « 14.168.192.in-addr.arpa », tout d’abord, on indique, dans l’ordre inverse, les 3 octets de l’adresse IP de la zone représentant le réseau, donc pour le réseau « 192.168.14.0 » cela donnera « 14.168.192 ». Ensuite, nous ajoutons « in-addr.arpa » qui est un espace de noms réservé et utilisé mondialement pour la résolution inverse.

Enregistrez et fermez le fichier.

Copiez le fichier de la zone "domainelocal" pour l'utiliser comme base. Le fichier de la zone inverse sera "db.reverse.domaine.local". Puis, éditez ce fichier.

sudo cp /etc/bind/db.domaine.local /etc/bind/db.reverse.domaine.local
sudo nano /etc/bind/db.reverse.domaine.local

Voici le contenu du fichier de zone inversé :

; BIND data file for 14.168.192.in-addr.arpa
$TTL    604800
@       IN      SOA     srv-dns.it-domaine. admin.domaine.local. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@               IN      NS      srv-dns.domaine.local.
99      IN      PTR     srv-dns.domaine.local.
98      IN      PTR     srv-dhcp.domaine.local.

Vous remarquerez l'absence d'enregistrement A, AAAA ou encore CNAME. Cela n'existe pas dans une zone inversée. À la place, nous utilisons des enregistrements PTR (pointeur) où l'on indique l'adresse IP de l'hôte (dernier octet, ici), et à droite, le nom d'hôte.

Quand c'est fait, enregistrez et fermez le fichier. Vérifiez la syntaxe du fichier :

named-checkzone 14.168.192.in-addr.arpa /etc/bind/db.reverse.domaine.local

Si tout est OK, relancez Bind9 sur la machine :

sudo systemctl restart bind9

Revision #1
Created 2025-10-29 12:40:41 UTC
Updated 2025-10-29 12:40:43 UTC