Skip to main content

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 :

  •  Les fichiers "db.<nom>" correspondent aux fichiers de zones intégrés par défaut dans Bind. Vous pouvez vous en inspirer en tant que modèle pour la création de vos fichiers de zones.
  • Le fichier "named.conf" est le fichier de configuration principal de Bind9. Il contient des directives "include" pour charger 3 autres fichiers :
    • "named.conf.options" contient les options de configuration de Bind
    • "named.conf.local" sert à déclarer des zones
    • "named.conf.default-zones" contient la définition des zones incluses par défaut avec Bind.

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 :

  •  "$TTL 604800" correspond à la durée de vie des informations fournies et donc la durée pendant laquelle elles sont gardées en cache par les autres serveurs DNS. Par défaut, ce temps est défini sur 24 heures (86400 secondes).
  • : désigne la racine de la zone, c'est-à-dire domaine.local.
  •  "SOA" signifie Start Of Authority, soit les paramètres principaux de la zone. Il indique le serveur qui a autorité sur la zone, puis l’adresse e-mail du contact technique dont le caractère « @ » est remplacé par un «.». La valeur "srv-dns.domaine.local." sert à indiquer le serveur DNS primaire (le point final indique un FQDN complet).
  •  Serial "1" : numéro de série de la zone. À incrémenter chaque fois que le fichier de zone est modifié pour notifier les serveurs secondaires d'une mise à jour.
  •  Refresh "604800" : c’est le délai de rafraichissement pour la synchronisation des configurations entre plusieurs serveurs DNS.
  •  Retry "86400" : c’est le délai au bout duquel un serveur DNS secondaire devra retenter une synchronisation si celle qu'il a faite au bout du temps "refresh" a échoué.
  •  Expire "2419200" : si toutes les tentatives de synchronisation échouent, un serveur DNS secondaire considérera qu'il ne peut plus répondre aux requêtes concernant cette zone une fois que le temps est écoulé. Par défaut, le temps est de "2419200" secondes, soit 28 jours.
  • Negative Cache TTL "86400" : durée de conservation dans le cache de l'information "NXDOMAIN" lorsqu'un incident se produit (échec de résolution).

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.

  • Dans les zones de recherche directes pour les enregistrements « A » :
<nom-de-l'hote>    IN   A    <IP>
  • Dans les zones de recherche directes pour les enregistrements « CNAME» :
<nom-de-l'alias> IN CNAME <nom-de-l'enregistrement-de-référence>

À partir de ces informations, ajoutons 2 enregistrements DNS :

  • Un alias "dns.domaine.local" pour le serveur "srv-dns.domaine.local"
  • Un nom d'hôte "srv-dhcp.domaine.local" associé à l'adresse IP "192.168.14.98"

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