Serveur DNS avec BIND

Le service DNS permet d'associer un nom de domaine avec une adresse IP. Les serveurs DNS fonctionnement en majorité avec BIND (Berkeley Internet Name Daemon), développé actuellement par l'ISC (Internet Systems Consorium) et tournant sur les systèmes Linux. Cet article présente la configuration d'un serveur BIND 9 sur une distribution Ubuntu Server 18.04.

Vous pouvez retrouver la documentation complète de BIND sur le site de l'ISC : https://www.isc.org/bind/

 

Configuration de base

Installation de BIND

Trois paquets sont nécessaires pour faire fonctionner BIND sur une machine Linux et tester son fonctionnement :

  • bind9
  • bind9utils
  • bind9-doc
Interface d'écoute des requêtes DNS

Il est préférable d'indiquer au serveur quelle interface doit écouter les requêtes DNS. Cela se configure grace à l'instruction listen-on-v6 du fichier /etc/bind/named.conf.options où vous indiquez le nom de l'interface recevant les requêtes DNS (à la place de any, qui permet d'écouter les requêtes DNS sur toutes les interfaces du serveur).

Définition des zones DNS

Les zones gérées par le serveur sont définies dans le fichier /etc/bind/named.conf.local selon le modèle suivant :

Zone de recherche directeZone de recherche inversée
zone "domaine.tld" {
  type master;
  file "fichier";
}
zone "X.X.X.X.in-addr.arpa" {
  type master;
  notify no;
  file "fichier";
domaine.tld : nom de la zone X.X.X.X.in-addr.arpa : domaine de recherche inverse
Remarque : on ne précise que le netid du réseau IP avant le domaine in-addr.arpa, et à l'envers
fichier : adresse absolu du fichier de configuration de la zone
Fichier de zone de recherche directe
Syntaxe du fichier de zone de recherche directe
$TTL 60480
@        IN SOA serveur.domaine.tld admin.domaine.tld (A B C D E)
@        IN NS  serveur
serveur  IN A   X.X.X.X
machine1 IN A   Y.Y.Y.Y
  • serveur.domaine.tld (ou serveur) : serveur primaire de la zone
  • admin.domaine.tld : courriel de l'administrateur de la zone (avec un point remplaçant l'arobase)
  • A : numéro de série du fichier de zone
  • B : délais en seconde entre chaque mise à jour du fichier de zone depuis les serveurs secondaires
  • C : délais en seconde d'attente avant une nouvelle tentative de mise à jour du fichier zone depuis les serveurs seconadires, en cas d'échec de la mise à jour précédente
  • D : délais en seconde au terme duquel la zone est considérée comme invalide si le serveur secondaire ne peut joindre le serveur primaire
  • E : durée de vie en seconde des réponses en cache
  • X.X.X.X : adresse IP du serveur primaire de la zone
  • Y.Y.Y.Y : adresse IP de machine1.domaine.tld

Evidemment, vous pouvez ajouter autant d'enregistrements (A, CNAME, MX, etc) à la suite de votre fichier de zone

Fichier de zone de recherche inversée
Syntaxe du fichier de zone de recherche inversée
$TTL 60480
@        IN SOA serveur.domaine.tld admin.domaine.tld (A B C D E)
@        IN NS  serveur
serveur  IN A   X.X.X.X
X        IN PTR serveur.domaine.tld
Y        IN PTR machine1.domaine.tld
  • serveur.domaine.tld (ou serveur) : serveur primaire de la zone
  • admin.domaine.tld : courriel de l'administrateur de la zone (avec un point remplaçant l'arobase)
  • A : numéro de série du fichier de zone
  • B : délais en seconde entre chaque mise à jour du fichier de zone depuis les serveurs secondaires
  • C : délais en seconde d'attente avant une nouvelle tentative de mise à jour du fichier zone depuis les serveurs seconadires, en cas d'échec de la mise à jour précédente
  • D : délais en seconde au terme duquel la zone est considérée comme invalide si le serveur secondaire ne peut joindre le serveur primaire
  • E : durée de vie en seconde des réponses en cache
  • X.X.X.X : adresse IP du serveur primaire de la zone
  • X : hostid de l'adresse IP du serveur primaire de la zone
  • Y : hostid de l'adresse IP de machine1.domaine.tld
Vérification du fichier de zone

Un fichier de zone peut être vérifier avec la commande named-checkzone suivi du nom du domaine et du nom du fichier.

Exemple pour le domaine domaine.tld dont la zone a été définie dans le fichier /etc/bind/domaine.tld : named-checkzone domaine.tld /etc/bind/domaine.tld

 

Redirection

Afin de permettre au serveur BIND d'interroger d'autres serveurs pour répondre aux requêtes concernant des zones sur lesquelles il n'est pas autoritaire, il faut activer la redirection en précisant les serveurs à interroger :

  • Ouvrir le fichier /etc/bind/named.conf.options
  • Décommenter les lignes correspondant à la section forwarders
  • Ajouter l'adresse IP du serveur DNS à interroger

 

Serveur primaire et serveur secondaire

Un serveur secondaire récupère une copie du fichier de zone d'un serveur DNS (appelé du coup serveur primaire). Il peut être ensuite interroger par des clients afin de répondre aux requêtes DNS de la zone (lors de la mise en place d'un service de répartition de charge ou de tolérance aux pannes).

Préparation du serveur primaire

Afin d'autoriser un serveur secondaire à récupérer les données d'une zone d'un serveur DNS primaire, il faut ajouter l'instruction allow-transfer { X.X.X.X; }; (en remplaçant X.X.X.X par l'adresse IP du serveur secondaire) dans la déclaration de la zone (fichier /etc/bind/named.conf.local).

Configuration du serveur secondaire

La déclaration d'une zone secondaire sur un serveur BIND se fait dans le fichier /etc/bind/named.conf.local, comme pour une zone primaire :

Zone secondaire
zone "domaine.tld" {
  type slave;
  masters { X.X.X.X; };
  file "/var/live/bind/fichier";
}
domaine.tld : nome de la zone
X.X.X.X : adresse IP du serveur primaire
fichier : fichier où est enregistré le fichier de la zone

 

 

Délégation de zone

La délégation de zone permet de déléguer la gestion d'un sous-domaine d'une zone à un autre serveur.

Configuration du serveur autoritaire de la zone

Dans le fichier de la zone principale, ajouter un enregistrement NS indiquant qu'un sous-domaine de la zone est géré par un serveur particulier (ne pas oublier l'enregistrement A associé à ce serveur) :

sous-domaine.domaine.tld           IN NS  serveur.sous-domaine.domaine.tld
serveur.sous-domaine.domaine.tld   IN A   X.X.X.X
sous-domaine.domaine.tld : domaine délégué
serveur.sous-domaine.domaine.tld : nom du serveur gérant le domaine délégué
X.X.X.X : adresse IP du serveur gérant le domaine délégué
Configuration du serveur délégué

Sur le serveur gérant la zone déléguée, il n'y a plus qu'à configurer le service DNS, définir la zone déléguée et créer le fichier de cette zone comme n'importe quelle zone DNS.