Bind9 : installer et configurer un serveur DNS sur Ubuntu


Ubuntu 22.04

Présentation

Dans ce tutoriel, je vais vous expliquer comment installer un configurer un serveur DNS Bind9 sur Ubuntu.

Un serveur DNS permet de résoudre un nom de domaine du type rdr-it.io ou www.google.com en une adresse IP afin que l’ordinateur puisse contacter le serveur distant.

Les serveurs DNS héberge également les domaines que l’on appelle zones et qui vont contenir la liste des enregistrements DNS liés à cette zones.

En entreprise, on utilise des services DNS pour ces 2 cas d’usage et dans ce tutoriel, je vais vous expliquer comment configurer Bind9.

Pour ce tutoriel, je vais utiliser deux serveurs Ubuntu :

  • 172.xx.xx.119
  • 172.yy.yy.106

Installer Bind9 sur Ubuntu

Pour commencer ce tutoriel, je vais installer Bind9 sur le serveur 172.xx.xx.119.

L’installation de Bind9 ne présente pas beaucoup de difficulté, il suffit d’entrer la commande suivante :

sudo apt install bind9 -y

Patienter pendant le téléchargement des paquets et leur installation …

Une fois installé, vérifier que le service Bind9 est démarré avec la commande suivante :

sudo systemctl status bind9

Voici quelques commandes pour contrôleur le service Bind9.

Activer le service au démarrage :

sudo systemctl enable bind9

Démarrer le service :

sudo systemctl start bind9

Arrêter le service :

sudo systemctl stop bind9

Redémarrer le service :

sudo systemctl restart bind9

Durant le tutoriel, quand il sera indiquer de redémarrer le service bind9, il faudra utiliser la commande ci-dessus.

Tester la configuration :

sudo named-checkconf

Si le pare-feu est activé sur votre serveur Ubuntu, il faut autoriser le trafic sur le port 53.

sudo ufw allow 53

Pour vérifier l’ajout de règle :

sudo ufw status

Notre serveur DNS est prêt.

Les fichiers de configuration de Bind9

Avant de passer à la configuration de Bind9, on va voir où se trouve les fichiers de configuration sur le serveur.

Comment beaucoup d’application, les fichiers se trouve dans le dossier /etc/ puis dans un dossier au nom du service : bind9

Les fichiers sont donc dans :

/etc/bind9

Voici les fichiers de configuration à l’installation :

Dans ce tutoriel, les fichiers qui vont nous intéresser sont les suivants :

  • named.conf.options qui contient la configuration de générale de Bind9
  • named.conf.local qui va contenir les déclarations des zones DNS
  • db.local que l’on va utiliser comme template pour les fichiers de zone.

Configurer Bind9 comme serveur DNS et cache DNS

On va commencer par l’utilisation classique de Bind9, qui va être de l’utiliser comme serveur DNS pour résoudre n’importe quel les requêtes DNS qui va envoyer la réponse à l’ordinateur qui en fait la demande puis stocker la réponse dans son cache.

Pour cela, on va configurer des forwarders dans Bind9 pour qu’il transfère les requêtes à un serveur DNS publique.

La durée de conservation dans le cache avant de refaire une autre requête DNS va dépendre du TTL (Time To Live) de l’enregistrement.

Cette configuration se fait dans le fichier named.conf.options.

Comme vous pouvez le voir, par défaut la configuration des forwarders est commentée.

Ouvrir le fichier pour l’éditer :

sudo nano named.conf.options

Décommenter les lignes et indiquer un ou plusieurs DNS publiques :

Ici, j’ai indiqué les serveurs 1.1.1.1 de Cloudflare et 8.8.8.8 de Google.

N’oublier pas le ; à la fin de chaque ligne.

Une fois le fichier enregistré, redémarrer le service Bind9.

Pour tester la configuration, sur un ordinateur client, j’ai configuré le serveur 172.xx.xx.119 comme serveur DNS dans le fichier /etc/resolv.conf

Pour tester la résolution de nom et avoir des informations sur celle-ci j’ai utilisé la commande dig.

dig google.com

Comme on peut le voir sur la capture, on voit que le nom a bien été résolu par le serveur DNS 172.xx.xx.119.

Cette résolution a été effectué en utilisant l’un des forwarder configuré.

Ce type de requête DNS faite par notre serveur Bind9 est un requête récursive, c’est à dire qu’il a une seule requête à un autre serveur DNS pour obtenir la réponse souhaité.

L’autre type de requête DNS sont les requêtes itératives, dans ce cas, le serveur Bind9 va faire une succession de requêtes DNS hiérarchique pour obtenir pour obtenir le résultat.

Si vous souhaitez en savoir plus sur les requêtes DNS, je vous conseille le visionnage de cette vidéo : Comprendre le DNS en 5 minutes (youtube.com)

Si vous souhaitez activer le mode itératif sur Bind9 ajouter la ligne ci-dessous dans le fichier named.conf.options dans le bloc options { ... } :

allow-recursion { any; };

Configurer une zone DNS sur Bind9

Maintenant, on va voir comment configurer une zone DNS, c’est à dire comme héberger un domaine sur un serveur Bind9.

Dans ce tutoriel, je vais héberger le nom DNS 247-it.local.

Pour commencer, on va déclarer à Bind9 la zone DNS.

Ouvrir le fichier named.conf.local :

sudo nano named.conf.local

Dans le fichier ajouter le bloc suivant :

zone "247-it.local" IN {
    type master;
    file "/etc/bind/db.247-it.local";
};

Ce bloc permet de déclarer à Bind9 la zone en indiquant :

  • Le nom : zone « 247-it.local » IN {
  • Le type de zone : master
  • L’emplacement et le fichier qui contenir les enregistrements DNS : file « /etc/bind/db.247-it.local »;

Maintenant, on va copier le fichier db.local que l’on va éditer après pour configurer la zone DNS.

sudo cp db.local db.247-it.local

Editer le fichier :

sudo nano db.247-it.local

Voici le fichier avant modification :

Voici le fichier modifié :

Pas panique, si vous débutez avec le protocole DNS et les zones DNS, je vous explique ci-dessous.

Voici les éléments importants du fichier de configuration :

LigneParamètreExplication
6SerialCorrespond au numéro de version du fichier de zone, ce numéro doit être incrémenté à chaque changement dans le fichier de zone. Ceci permet au serveur esclave de savoir si ils ont le bon fichier de zone.
Ici j’ai utilisé le format suivant YYYYMMDDX ou X est un incrément de 1 à 9, si vous faite plus de 9 mordications à la journée, il faut placer X sur 2 chiffres XX. Une autre astuce est d’utilisé le timestamp Unix.
12NSEnregistrement de type NS qui permet d’indiquer le ou les serveurs DNS qui ont la zone
13AEnregistrement de type A pour résoudre le nom DNS ns.247-it.local
14/15AEnregistrement de type A qui associe un nom à une adresse IP, que l’on va utiliser dans les tests.

Redémarrer le service Bind9 pour la prise en compte de la configuration.

Pour tester le bon fonctionnement de la résolution DNS de la zone 247-it.local, j’ai utilisé mon ordinateur client avec la commande dig.

Comme on peut le voir sur la capture ci-dessous, la résolution est fonctionnel depuis le serveur (172.xx.xx.119) DNS Bind9.

Configuration d’un serveur secondaire (esclave)

Pour continuer ce tutoriel, on va voir comment configurer un serveur DNS Bind9 secondaire également appeler esclave qui va avoir une copie de la zone 247-it.local afin d’assurer la disponibilité du service en cas de problème sur le premier serveur.

Le serveur secondaire va contenir une copie de la zone est celui-ci va pouvoir répondre aux requêtes DNS.

Installer Bind9 sur un second serveur.

Sur le serveur principal (maitre), il faut éditer la déclaration de la zone dans le fichier named.conf.local pour indiquer que l’on autorise le transfert de la zone vers un serveur.

Ouvrir le fichier :

sudo nano named.conf.local

Dans la déclaration de la zone ajouté :

allow-transfert { ip-of-slave; };

Tester la configuration et redémarrer le service Bind9 sur le serveur maitre.

Maintenant, on va déclarer la zone sur le serveur secondaire.

Ouvrir et éditer le fichier named.conf.local :

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

Voici les lignes de déclaration :

zone "247-it.local" IN {
  type slave;
  file "/var/cache/bind/db.247-it.local";
  masters { 172.xx.xx.119; };
};

Cette fois-ci on déclare une zone de type slave. On indique que l’emplacement et le nom du fichier de la zone, comme vous pouvez le remarquer, on place le fichier dans le dossier /var/cache/bind/ car le processus de bind n’a pas l’autorisation d’écrire dans le dossier /etc/bind. Pour finir, on indique le serveur maitre où la zone sera récupéré.

Redémarrer le service Bind9 sur le serveur secondaire.

Pour vérifier si la zone a bien été transférée sur le serveur secondaire, on peut aller voir les logs dans le fichier /var/log/syslog.

Vérifier que le fichier de la zone est bien présent dans le dossier : /var/cache/bind/.

Si vous souhaitez la résolution de nom depuis le serveur esclave, configurer un ordinateur avec comme serveur DNS, le serveur secondaire et utiliser la commande dig ou utiliser la syntaxe suivante pour spécifier le serveur : dig @ip-dns-server google.com

Configurer un redirecteur conditionnel sur Bind9

Pour finir ce tutoriel, je vais vous expliquer comment configurer un redirecteur conditionnel pour une zone DNS en particulier.

Ce type de redirecteur peut être nécessaire pour transférer les requêtes DNS d’un domaine Active Directory par exemple si les ordinateurs utilisent comme serveur DNS les serveurs Bind9.

Cette configuration se fait dans le fichier de déclaration des zones /etc/bind/named.conf.local.

Il faut déclarer une zone de type forward et lui indiquer les serveurs DNS où les requêtes seront transférées.

Voici un exemple :

zone "rdr-it.io" IN {
     type forward;
     forwarders { 172.xx.xx.119; } ;
}

Avec cette configuration, toutes les requêtes pour le domaine rdr-it.io seront transférées au serveur DNS 172.xx.xx.119.

Penser à redémarrer le service Bind9 pour la prise en compte.


Vous savez maintenant comment installer et configurer un serveur DNS avec Bind9.




Laisser un commentaire