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.
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 directe | Zone 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 inverseRemarque : on ne précise que le netid du réseau IP avant le domaine in-addr.arpa , et à l'envers |
fichier : chemin 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
(ouserveur
) : serveur primaire de la zoneadmin.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 zoneB
: délais en seconde entre chaque mise à jour du fichier de zone depuis les serveurs secondairesC
: 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édenteD
: délais en seconde au terme duquel la zone est considérée comme invalide si le serveur secondaire ne peut joindre le serveur primaireE
: durée de vie en seconde des réponses en cacheX.X.X.X
: adresse IP du serveur primaire de la zoneY.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
(ouserveur
) : serveur primaire de la zoneadmin.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 zoneB
: délais en seconde entre chaque mise à jour du fichier de zone depuis les serveurs secondairesC
: 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édenteD
: délais en seconde au terme duquel la zone est considérée comme invalide si le serveur secondaire ne peut joindre le serveur primaireE
: durée de vie en seconde des réponses en cacheX.X.X.X
: adresse IP du serveur primaire de la zoneX
: hostid de l'adresse IP du serveur primaire de la zoneY
: 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 ;
- Toujours la section option, ajouter les instructions
allow-recursion { any; };
etallow-query-cache { any; };
(si vous souhaitez limiter les machines clientes, remplacerany
par les adresses des machines) ; - Si vous n'avez pas de vérifications avec DNSSec, passer la valeur de l'instruction
dnssec-validation
(par défaut àauto
) àno
.
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/lib/bind/fichier"; }; |
domaine.tld : nom de la zoneX.X.X.X : adresse IP du serveur primairefichier : fichier où est enregistré le fichier de la zone |
Remarque : le fichier de de la zone secondaire doit se trouver dans un répertoire où le démon de Bind possède les droits d'écriture, comme /var/lib/bind
.
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é |
Remarque : n'oubliez pas le point après les noms du domaine délégué et du serveur autoriatire sur ce domaine indiquant que ce sont les noms complets (FQDN), donc à partir de la racine DNS.
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.
Vous pouvez retrouver la documentation complète de BIND sur le site de l'ISC : https://www.isc.org/bind/