Comment configurer un serveur DNS avec BIND sur Ubuntu 22.04

BIND ou Berkeley Internet Name Domain est un logiciel serveur DNS gratuit et open-source. C’est l’un des logiciels de serveur DNS les plus populaires, utilisé par plus de 70% des DNS sur Internet. BIND existe depuis les années 1980, il est connu pour sa flexibilité, ses performances et ses fonctionnalités. BIND peut être utilisé à la fois comme DNS faisant autorité et comme DNS de mise en cache, il prend en charge l’équilibrage de charge, la mise à jour dynamique, le split DNS, DNSSEC, IPv6 et bien d’autres encore.

Le logiciel DNS BIND est l’un des serveurs DNS les plus fiables pour les systèmes d’exploitation de type Unix. Il est disponible sur la plupart des distributions Linux et fournit des outils supplémentaires pour le diagnostic et le test du serveur DNS.

Ce guide t’apprendra à installer un serveur DNS avec BIND sur le serveur Ubuntu 22.04. Ce tutoriel te montrera comment configurer une installation de serveur DNS BIND maître-esclave en utilisant deux serveurs Ubuntu.

Conditions préalables

Avant de commencer ce guide, tu dois avoir les conditions suivantes :

  • Deux serveurs Ubuntu 22.04.
  • Un utilisateur non root avec des privilèges root/administrateur.

Configuration du FQDN (Fully Qualified Domain Name)

Avant de commencer à installer les paquets BIND, tu dois t’assurer que le nom d’hôte et le FQDN de tes serveurs sont corrects. Dans cette démonstration, nous utiliserons deux serveurs Ubuntu avec les détails suivants :

Hostname    IP Address      FQDN                Used As
---------------------------------------------------------
ns1         192.168.5.21    ns1.hwdomain.io     BIND Master
ns2         192.168.5.22    ns2.hwdomain.io     BIND Slave

Connecte-toi maintenant à chaque serveur et exécute la commande suivante pour configurer le FQDN (Fully Qualified Domain Name).

Configure le FQDN sur le serveur« ns1« .

sudo hostnamectl set-hostname ns1.hwdomain.io

Configure le FQDN sur le serveur« ns2« .

sudo hostnamectl set-hostname ns2.hwdomain.io

Ensuite, modifie le fichier« /etc/hosts » à l’aide de la commande suivante.

sudo nano /etc/hosts

Ajoute la configuration suivante à chaque serveur.

192.168.5.21 ns1.hwdomain.io ns1
192.168.5.22 ns2.hwdomain.io ns2

Sauvegarde et ferme le fichier lorsque tu as terminé.

Enfin, contrôle et vérifie le FQDN sur chaque serveur à l’aide de la commande suivante. Sur le serveur« ns1« , tu obtiendras le FQDN comme« ns1.hwdomain.io« , et sur le serveur« ns2« , tu obtiendras la sortie« ns2.hwdomain.io« .

sudo hostname -f

Installer les paquets BIND

Les paquets Bind sont disponibles par défaut dans le référentiel du serveur Ubuntu. Tu peux maintenant installer facilement Bind à l’aide de la commande apt sur les deux serveurs « ns1 » et « ns2 ».

Exécute la commande apt ci-dessous pour mettre à jour et rafraîchir les dépôts Ubuntu.

sudo apt update

Ensuite, installe les paquets Bind à l’aide de la commande suivante. Entre Y pour confirmer l’installation et appuie sur ENTRÉE pour continuer. L’installation va commencer.

sudo apt install bind9 bind9utils bind9-doc dnsutils

installer bind

Une fois l’installation de Bind terminée, modifie la configuration« /etc/default/named » à l’aide de la commande suivante.

sudo nano /etc/default/named

La ligne« OPTIONS= » te permet de configurer des options spécifiques lorsque le service BIND est en cours d’exécution. Dans cette démo, tu exécuteras Bind uniquement avec IPv4, tu devras donc modifier la ligne« OPTIONS » comme ci-dessous.

OPTIONS="-u bind -4"

Sauvegarde et ferme le fichier lorsque tu as terminé.

Exécute maintenant la commande ci-dessous pour redémarrer le service Bind« named« . Ensuite, vérifie l’état du service BIND. Tu devrais voir que le service Bind« named » fonctionne sur les deux serveurs.

sudo systemctl restart named
sudo systemctl status named

L'installation de la liaison

Configuration de BIND Master

Après avoir installé les paquets BIND sur les serveurs « ns1 » et « ns2 », tu vas configurer le serveur DNS BIND. Tu vas configurer le serveur « ns1 » comme maître du serveur DNS BIND. Tu peux exécuter BIND sur un seul serveur, mais il est recommandé d’utiliser plusieurs serveurs pour configurer le serveur DNS à haute disponibilité.

Retourne à la session de terminal du serveur« ns1« .

Exécute la commande ci-dessous pour modifier le fichier de configuration« /etc/bind/named.conf.options« .

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

Ajoute la configuration suivante au fichier en haut de la ligne, avant la ligne« options {….} ;« .

Avec cette configuration, tu vas créer une ACL (Access Control List) avec le nom« trusted », qui inclut toutes les adresses IP et tous les réseaux de confiance de ton environnement. Veille également à ajouter l’adresse IP du serveur local« ns1 » et l’adresse IP du serveur DNS secondaire« ns2« .

acl "trusted" {
        192.168.5.21;    # ns1 - or you can use localhost for ns1
        192.168.5.22;    # ns2
        192.168.5.0/24;  # trusted networks
};

Apporte maintenant des modifications à la section« options {..} ; » comme ci-dessous.

Dans l’exemple suivant, nous désactivons la prise en charge d’IPv6 en commentant l’option« listen-on-v6« , nous activons et autorisons la récursion à partir de l’ACL« trusted » et nous exécutons le service BIND sur l’adresse IP spécifique« ns1« « 192.168.5.21« . De plus, nous désactivons le transfert de zone par défaut et définissons les forwarders spécifiques pour le serveur DNS BIND vers Google Public DNS« 8.8.8.8 » et« 8.8.4.4« .

options {

        directory "/var/cache/bind";

        //listen-on-v6 { any; };        # disable bind on IPv6

        recursion yes;                 # enables resursive queries
        allow-recursion { trusted; };  # allows recursive queries from "trusted" - referred to ACL
        listen-on { 192.168.5.21; };   # ns1 IP address
        allow-transfer { none; };      # disable zone transfers by default

        forwarders {
                8.8.8.8;
                1.1.1.1;
        };
};

Enregistre et ferme le fichier lorsque tu as terminé.

Enfin, exécute la commande suivante pour vérifier et contrôler le fichier de configuration« /etc/bind/named.conf.options« . S’il n’y a pas de message de sortie, alors ta configuration est correcte.

sudo named-checkconf /etc/bind/named.conf.options

Configuration des zones

Après avoir établi la configuration de base de BIND master, tu vas maintenant configurer les zones pour ton nom de domaine. Dans l’exemple suivant, nous allons utiliser le nom de domaine« hwdomain.io » avec le serveur de noms« ns1.hwdomain.io » et« ns2.hwdomain.io« .

Modifie le fichier de configuration« /etc/bind/named.local » à l’aide de la commande suivante.

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

Dans cette configuration, tu vas définir deux fichiers de zone, la zone avant et la zone arrière pour ton nom de domaine. La zone Forward contiendra la configuration de l’endroit où tes noms de domaine seront résolus en adresse IP, tandis que la zone reverse traduira l’adresse IP en nom de domaine.

Dans l’exemple suivant, nous allons définir la zone avant« /etc/bind/zones/db.hwdomain.io » pour le domaine« hwdomain.io » et la zone arrière « /etc/bind/zones/db.192.168.5 ».

zone "hwdomain.io" {
    type master;
    file "/etc/bind/zones/db.hwdomain.io"; # zone file path
    allow-transfer { 192.168.5.22; };           # ns2 IP address - secondary DNS
};


zone "5.168.192.in-addr.arpa" {
    type master;
    file "/etc/bind/zones/db.192.168.5";  # subnet 192.168.5.0/24
    allow-transfer { 192.168.5.22; };  # ns2 private IP address - secondary DNS
};

Enregistre et ferme le fichier lorsque tu as terminé.

Ensuite, exécute la commande suivante pour créer un nouveau répertoire« /etc/bind/zones » qui sera utilisé pour stocker les fichiers de configuration des zones.

sudo mkdir -p /etc/bind/zones/

Après cela, copie la configuration de la zone de transfert par défaut « /etc/bind/zones/db.hwdomain.io » et modifie le fichier à l’aide de la commande suivante.

sudo cp /etc/bind/db.local /etc/bind/zones/db.hwdomain.io
sudo nano /etc/bind/zones/db.hwdomain.io

Change l’enregistrement SOA par défaut avec ton nom de domaine. Tu devras également modifier le numéro desérie dans les enregistrements SOA chaque fois que tu apporteras des modifications au fichier, et ce numéro doit être le même que celui du serveur DNS secondaire/esclave.

Ensuite, tu peux définir les enregistrements NS et les enregistrements A pour ton serveur DNS. Dans cet exemple, le serveur de noms sera« ns1.hwdomain.io » avec l’enregistrement A de l’adresse IP« 192.168.5.21 » et« ns2.hwdomain.io » avec l’enregistrement A de l’adresse IP du serveur DNS secondaire« 192.168.5.22« .

Enfin, tu peux définir d’autres noms de domaine. Dans cet exemple, nous allons définir un enregistrement MX (gestionnaire de courrier) pour le domaine« hwdomain.io » qui sera géré par le serveur de courrier« mail.hwdomain.io« . Nous définirons également le nom de domaine« hwdomain.io » qui sera résolu sur le serveur avec l’adresse IP« 192.168.5.100 » et le sous-domaine pour le serveur de messagerie « mail.hwdomain.io » sur l’adresse IP du serveur« 192.168.5.120« .

;
; BIND data file for the local loopback interface
;
$TTL    604800
@       IN      SOA     ns1.hwdomain.io. admin.hwdomain.io. (
                              3         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;

; NS records for name servers
    IN      NS      ns1.hwdomain.io.
    IN      NS      ns2.hwdomain.io.

; A records for name servers
ns1.hwdomain.io.          IN      A       192.168.5.21
ns2.hwdomain.io.          IN      A       192.168.5.22

; Mail handler or MX record for the domain hwdomain.io
hwdomain.io.    IN     MX   10   mail.hwdomain.io.

; A records for domain names
hwdomain.io.            IN      A      192.168.5.100
mail.hwdomain.io.       IN      A      192.168.5.120

Enregistre et ferme le fichier lorsque tu as terminé.

zone d'avance de l'installation

Ensuite, copie le fichier de configuration de la zone inverse par défaut dans« /etc/bind/zones/db.192.168.5 » et modifie le nouveau fichier à l’aide de la commande suivante.

sudo cp /etc/bind/db.127 /etc/bind/zones/db.192.168.5
sudo nano /etc/bind/zones/db.192.168.5

Change l’enregistrement SOA par défaut en utilisant ton nom de domaine. N’oublie pas non plus de modifier le numéro desérie dans l’enregistrement SOA.

Définis les enregistrements NS pour tes serveurs DNS. Ce sont les mêmes serveurs de noms que tu as utilisés dans la zone de transfert.

Enfin, définis les enregistrements PTR pour tes noms de domaine. Le numéro figurant dans les enregistrements PTR est le dernier chiffre de l’adresse IP. Dans cet exemple, le serveur de noms« ns1.hwdomain.io » est résolu à l’adresse IP« 192.168.5.21« , donc maintenant l’enregistrement PTR sera« 21 » et ainsi de suite pour les autres noms de domaine.

;
; BIND reverse data file for the local loopback interface
;
$TTL    604800
@       IN      SOA     ns1.hwdomain.io. admin.hwdomain.io. (
                              3         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;

; name servers - NS records
      IN      NS      ns1.hwdomain.io.
      IN      NS      ns2.hwdomain.io.

; PTR Records
21   IN      PTR     ns1.hwdomain.io.    ; 192.168.5.21
22   IN      PTR     ns2.hwdomain.io.    ; 192.168.5.22
100  IN      PTR     hwdomain.io.  ; 192.168.5.100
120  IN      PTR     mail.hwdomain.io.  ; 192.168.5.120

Sauvegarde et ferme le fichier lorsque tu as terminé.

zone de configuration inversée

Maintenant, exécute la commande suivante pour vérifier les configurations de BIND et assure-toi de ne pas recevoir de message d’erreur.

sudo named-checkconf

Ensuite, exécute la commande suivante pour contrôler et vérifier chaque fichier de zone que tu viens de créer, le fichier de configuration de la zone avant et de la zone arrière. Si tes fichiers de zone ne comportent aucune erreur, tu devrais voir le message de sortie tel que« OK« . S’il n’y a pas d’erreur, la commande te montrera quelle ligne du fichier a provoqué une erreur.

sudo named-checkzone hwdomain.io /etc/bind/zones/db.hwdomain.io
sudo named-checkzone 5.168.192.in-addr.arpa /etc/bind/zones/db.192.168.5

Vérifier les fichiers de la zone

Pour terminer la configuration de BIND Master, exécute la commande ci-dessous pour redémarrer le service BIND et appliquer les nouvelles modifications aux configurations que tu as faites.

sudo systemctl restart named

Configuration de BIND Slave

Tu as maintenant terminé la configuration du serveur DNS BIND Maître. Il est temps de configurer le serveur « ns2 » comme serveur secondaire ou esclave du serveur DNS BIND.

Le serveur Maître stocke les fichiers de zone qui contiennent la configuration DNS de ton domaine et gère les requêtes récursives ou itératives. Le serveur DNS secondaire/esclave stocke temporairement les enregistrements DNS pour une période donnée, et ces enregistrements DNS sont automatiquement transférés depuis le serveur BIND maître.

Passe maintenant à la session de terminal« ns2 » et commence à configurer le serveur« ns2 » comme serveur DNS secondaire/esclave du serveur BIND.

Exécute la commande suivante pour modifier le fichier de configuration« /etc/bind/named.conf.options« .

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

En haut de la ligne, ajoute la configuration suivante. Cela créera la même ACL (Access Control List) que sur le serveur maître.

acl "trusted" {
        192.168.5.21;    # ns1
        192.168.5.22;    # ns2 - or you can use localhost for ns2
        192.168.5.0/24;  # trusted networks
};

Dans la ligne« options {…} ;« , tu peux modifier la configuration comme ci-dessous. Cette configuration est toujours la même que sur le serveur DNS BIND Maître, la seule différence ici est l’option « listen-on » qui est spécifiée à l’adresse IP du serveur« ns2« .

options {

        directory "/var/cache/bind";

        //listen-on-v6 { any; };        # disable bind on IPv6

        recursion yes;                 # enables resursive queries
        allow-recursion { trusted; };  # allows recursive queries from "trusted" - referred to ACL
        listen-on { 192.168.5.22; };   # ns2 IP address
        allow-transfer { none; };      # disable zone transfers by default

        forwarders {
                8.8.8.8;
                1.1.1.1;
        };
};

Enregistre et ferme le fichier lorsque tu as terminé.

Ensuite, modifie le fichier de configuration« /etc/bind/named.conf.local » en utilisant la commande suivante pour configurer le serveur« ns2 » comme serveur DNS secondaire/esclave.

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

Ajoute la configuration suivante au fichier. Comme tu peux le voir, nous définissons les zones avant et arrière, mais avec le« type esclave » et définissons le serveur DNS maître« 192.168.5.21« . Tu n’as pas besoin de créer le fichier de zone car les enregistrements et les données DNS seront automatiquement transférés depuis le serveur DNS Maître et seront stockés temporairement pendant un certain temps sur le serveur DNS secondaire/esclave.

zone "hwdomain.io" {
    type slave;
    file "/etc/bind/zones/db.hwdomain.io";
    masters { 192.168.5.21; };           # ns1 IP address - master DNS
};


zone "5.168.192.in-addr.arpa" {
    type slave;
    file "/etc/bind/zones/db.192.168.5";
    masters { 192.168.5.21; };  # ns1 IP address - master DNS
};

Enregistre et ferme le fichier lorsque tu as terminé.

Exécute maintenant la commande suivante pour contrôler et vérifier la configuration de BIND et t’assurer que toutes les configurations sont correctes. Ensuite, tu peux redémarrer le service BIND « named » sur le serveur« ns2 » pour appliquer les nouvelles modifications. Et tu as maintenant terminé la configuration sur le serveur« ns2 » en tant que secondaire/esclave du serveur DNS BIND.

sudo named-checkconf
sudo systemctl restart named

configuration d'un dns secondaire

Enfin, exécute la commande suivante pour contrôler et vérifier le service BIND« named » sur le serveur« ns2″. Et assure-toi que le service« named » fonctionne.

sudo systemctl status named

Vérifier le statut des noms secondaires dns

Vérification du serveur DNS depuis la machine cliente

Sur l’ordinateur client, il existe plusieurs façons de configurer le résolveur DNS. Tu peux configurer le résolveur DNS à partir de NetworkManager ou de la configuration netplan. Mais le moyen le plus simple est de configurer le résolveur DNS manuellement via le fichier « /etc/resolv.conf ». Cela te permet de configurer un résolveur DNS statique pour les machines clientes.

Exécute la commande suivante pour supprimer le fichier de liens par défaut« /etc/resolv.conf » et créer un nouveau fichier à l’aide de l’éditeur nano.

sudo unlink /etc/resolv.conf
sudo nano /etc/resolv.conf

Ajoute la configuration suivante au fichier. Dans la configuration suivante, nous définissons trois résolveurs différents, le maître BIND DNS, le serveur secondaire BIND DNS et le résolveur public Google DNS. Lorsque la machine cliente demande des informations sur le nom de domaine, les informations seront prises dans le résolveur DNS, du haut vers le bas.

nameserver 192.168.5.21
nameserver 192.168.5.22
nameserver 8.8.8.8
search hwdomain.io

Sauvegarde et ferme le fichier lorsque tu as terminé.

Ensuite, exécute la commande ci-dessous pour installer un utilitaire DNS sur ta machine cliente. Dans cet exemple, la machine cliente est un système Ubuntu, nous installons donc l’utilitaire DNS à l’aide de la commande apt comme ci-dessous.

sudo apt install dnsutils bind9-utils

Après avoir installé l’utilitaire DNS sur ton système, tu peux commencer à vérifier tous les enregistrements DNS de la machine cliente.

Exécute la commande dig ci-dessous pour vérifier le nom de domaine« hwdomain.io » et« mail.hwdomain.io« . Tu devrais voir que« hwdomain.io » est résolu par l’adresse IP du serveur« 192.168.5.100« , tandis que le sous-domaine« mail.hwdomain.io » est géré par l’adresse IP du serveur« 192.168.5.120« .

dig hwdomain.io +short
dig hwdomain.io

vérifier les enregistrements dns dig

dig mail.hwdomain.io +short
dig mail.hwdomain.io

Vérifie l'enregistrement DNS en utilisant dig

Ensuite, exécute la commande dig comme ci-dessous pour vérifier le gestionnaire de courrier pour le nom de domaine « hwdomain.io ». Tu devrais obtenir le résultat suivant :« mail.hwdomain.io » gère le courrier pour le domaine principal« hwdomain.io ».

dig hwdomain.io MX +short
dig hwdomain.io MX

Vérifier les dossiers mx

Maintenant, tu peux aussi vérifier la configuration de la zone inverse pour ton nom de domaine à l’aide de la commande nslookup.

Exécute la commande nslookup ci-dessous pour contrôler et vérifier le reverse DNS pour certaines adresses IP.

Tu devrais maintenant voir que l’adresse IP« 192.168.5.21 » est inversée vers le serveur de noms« ns1.hwdomain.io« , l’adresse IP« 192.168.5.22 » est inversée vers le serveur de noms« ns2.hwdomain.io« , et l’adresse IP« 192.168.5.100 » est inversée vers le nom de domaine principal« hwdomain.io« , et enfin l’adresse IP« 192.168.5.120 » est inversée vers le sous-domaine« mail.hwdomain.io« .

nslookup 192.168.5.21
nslookup 192.168.5.22
nslookup 192.168.5.100
nslookup 192.168.5.120

Vérifier les DNS inversés

Conclusion

Félicitations ! Tout au long de ce tutoriel, tu as appris l’installation et la configuration du serveur DNS BIND sur les serveurs Ubuntu 22.04. Tu as réussi à configurer le serveur DNS BIND maître-esclave en utilisant deux serveurs Ubuntu différents. Tu as également appris les commandes de base de Dig et Nslookup pour vérifier et contrôler les enregistrements et la configuration DNS.

Vous aimerez aussi...