BIND (Berkeley Internet Name Domain) est un logiciel open source permettant de publier votre système de noms de domaine et de résoudre des requêtes DNS pour vos utilisateurs. Il c’est en résumé un serveur DNS (Domain Name system) : serveur de résolution de nom.

BIND est le logiciel DNS le plus utilisé sur Internet. Il fournit une plate-forme robuste et stable sur laquelle les entreprises peuvent construire des systèmes informatiques distribués en sachant que ces systèmes sont entièrement conformes aux normes DNS publiées.

Source : https://www.isc.org/downloads/bind/

Ce tutoriel explique comment installer et configurer (les bases) BIND 9.8.4 sur Debian 7.7.0. Si vous utilisez une distribution (ou version) différente il pourrait y avoir quelques divergences de paramétrage.

Toutes les manipulations à venir seront à effectuer en tant que super-utilisateur de la machine.


Installation de BIND

Mettre à jour la distribution

Exécutez la commande suivante :

apt-get update -y && apt-get upgrade -y

Cette commande permet de mettre à jour la liste des paquets de Debian et de mettre à jour les paquets installés sur votre système Debian.

Installer BIND

Exécutez la commande suivante :

apt-get install bind9 dnsutils bind9-doc

Cette commande installe BIND (bind9), le client permettant de le tester (dnsutils) et des documentations sur BIND (bind9-doc)

Configuration de BIND

Configurer le serveur DNS récursif

Un serveur DNS récursif interroge un (ou plusieurs) autre(s) serveur(s) DNS racine(s) pour résoudre un nom quand il ne le peut pas lui-même. Cette fonctionnalité est utile si l’on souhaite utiliser son serveur DNS local dans la configuration de nos machine tout en ayant accès à internet.

Si vous installez un serveur DNS dans votre entreprise qui possède une Box pour l’accès internet, par exemple, cette Box serait le serveur DNS racine de votre serveur DNS récursif.

Pour faire cela nous allons configurer le fichier named.conf.options (situé dans /etc/bind/). Ce fichier contient l’ensemble des options de configuration du serveur DNS.

Éditez le fichier named.conf.options :

nano /etc/bind/named.conf.options

Repérez et commentez la ligne suivante  :

dnssec-validation auto;

Si vous souhaitez obtenir des informations sur l’option dnssec-validation, cliquez ici.

Ajoutez les lignes suivantes dans la partie options { }; :

// On renseigne l'adresse du serveur DNS racine
// Si vous n'avez pas de serveur DNS racine local vous pouvez
// utiliser l'adresse du serveur DNS de google (par exemple) : 8.8.8.8
// Si vous vous utilisez plusieurs serveur racines, il vous suffit de
// les renseigner les un en dessous des d'autres
forwarders {
     IPServeurRacine1;
     IPServeurRacine2;
};

// On active la récursion
recursion yes;

// On indique que le serveur doit transmettre toutes les demandes, 
// sans tenter de résoudre les demandes de lui-même
forward only;

// On indique que l'on utilise un service de sécurité DNS
dnssec-enable yes;

// On active le cryptage de chaque enregistrement de notre fichier de zone
dnssec-validation yes;

L’option forwarders contient la liste des adresses IP des serveurs DNS auxquels votre serveur doit envoyer les requêtes de ses clients s’ils ne parvient pas a résoudre lui-même un nom.

Pour plus d’options vous pouvez consulter ce site ;

Enregistrez les modifications ;

Redémarrez le service bind9 :

service bind9 restart

Testez la récursion à l’aide de la commande dig qui permet d’interroger un serveur DNS, en tentant de résoudre l’adresse de google par exemple :

 dig @127.0.0.1 www.google.fr

Synthaxe : dig IPServeurDNS nomàrésoudre

Le serveur racine doit vous retourner l’adresse IP associée au nom renseigné :

;; QUESTION SECTION:
;www.google.fr.                 IN      A

;; ANSWER SECTION:
www.google.fr.          25      IN      A       216.58.210.195

Attention, l’adresse 216.58.210.195 ne sera pas forcément celle que votre serveur vous retournera dans le cas de google qui ne possède pas qu’une seule adresse IP.

Configurer le serveur DNS maître

Le serveur maître est utilisé pour contenir les enregistrements DNS d’un nom de domaine enregistré. Un
ensemble d’enregistrements DNS pour un nom de domaine est appelé une zone. Le nom de domaine peut être imaginaire si on est dans le cas d’un réseau local fermé.

Créer la zone principale

La zone principale permet de faire pointer un nom de domaine pleinement qualifié autrement appelé FQDN (Full Qualified Domain Name)  sur une adresse IP. Un FQDN est de la forme hote.domaine.extension :

  • hote correspond au nom de machine à résoudre ;
  • domaine correspond au nom de domaine ;
  • extension correspond à l’extension (.com par exemple).

A chaque nom d’hôte que vous voudrez resoudre, vous devrez ajouter le domaine et l’extension derrière son nom (hote).

Pour faire cela nous allons configurer le fichier named.conf.local (situé dans /etc/bind/) qui contient la configuration locale du serveur DNS. On y déclare les zones associées au domaine. De plus, à chaque zone créée vous devrez (ce n’est pas obligatoire mais je vous le conseil) créer un fichier de description de celle-ci.

Pour l’exemple, nous prendrons comme FQDN ns.exemple.com où le nom d’hôte est ns (name server) et celui de la zone exemple.com, vous devrez adapter le nom à votre cas.

Éditez le fichier named.conf.local :

nano /etc/bind/named.conf.local

Ajoutez les lignes suivantes :

zone "exemple.com" IN {
     type master;
     file "/etc/bind/exemple.com";
};

L’option type a la valeur master pour indiquer que le serveur est le maître de celle-ci tandis que l’option file indique le chemin vers le fichier de description de la zone, que nous allons créer prochainement.

Enregistrez les modifications ;

Configurer la zone principale

Dans le dossier /etc/bind/ il existe un fichier db.local qui est un exemple de configuration d’une zone, ressemblant à ceci :

;
; BIND data file for local loopback interface
;
$TTL    604800     
@       IN      SOA     localhost. root.localhost. (
                              2         ; Serie
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire 
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      localhost.
@       IN      A       127.0.0.1
@       IN      AAAA    ::1
$TTL (Time to Live)

Nombre de secondes pendant lesquels les informations de la zone peuvent être considérées comme valides et être mises en cache. A la fin du temps le fichier sera relu par BIND.

Serie

Numéro de série à changer à chaque modification du fichier si vous possédez au moins un serveur esclave, pour qu’il puisse prendre en compte les modifications sur le serveur maître. Le standard est de renseigne la date de la modification du fichier.

Refresh, Retry, Expire

Délais en secondes qui vont piloter le comportement des serveurs esclaves. A l’expiration du délai Refresh, l’esclave va entrer en contact avec le maître. S’il ne le trouve pas, il essaiera de nouveau à la fin du délai Retry et si, au bout du délai Expire, il n’est pas parvenu à ses fins, il considérera que le serveur maître a été retiré du service.

Negative Cache TTL

Temps en second de conversation des réponses négative (échec des requêtes).

Source : http://valaurea.free.fr/documents/sig11_bind9_3.html

Nous allons en faire une copie pour commencer la configuration de la zone principal ;

Faite une copie du fichier db.local :

cp /etc/bind/db.local /etc/bind/exemple.com

Éditez le fichier de description que vous venez de créer :

nano /etc/bind/exemple.com

Adaptez de la manière suivante :

;
; BIND data file for local loopback interface
;
$TTL    604800
@       IN      SOA     ns.exemple.com. email@exemple.com. (
                       04042017         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      ns.exemple.com.
@       IN      A       127.0.0.1
@       IN      AAAA    ::1
NS      IN      A       IPServeurMaître

Voici un récapitulatif des modifications :

On indique le nom de la zone faisant autorité (SOA = Start Or Autority).
ns.exemple.com.
On renseigne une adresse mail.
email@exemple.com.
On modifie le numéro de série (à faire à chaque modification du fichier si vous possédez au moins un serveur esclave) en mettant par exemple la date du jour de la modification.
04042017
On indique le nom du serveur maître (NS = Name Server).
ns.exemple.com.
On lie le nom du serveur maître à l’adresse IP lui correspondant (A = Address).
NS      IN      A       IPServeurMaître

IN signifie internet, c’est-à-dire que la zone renseignée après le nom d’hôte est réservée à Internet.

Enregistrez les modifications ;

Redémarrez le service bind9 :

service bind9 restart

Le service bind9 doit être redémarré à chaque modification, pour qu’elle soit prise en compte ;

Testez la résolution du nom de domaine :

dig @127.0.0.1 exemple.com

Le serveur DNS doit vous retourner l’adresse IP de votre serveur maître :

;; QUESTION SECTION:
;exemple.com.                   IN      A

;; ANSWER SECTION:
exemple.com.            604800  IN      A       127.0.0.1

;; AUTHORITY SECTION:
exemple.com.            604800  IN      NS      ns.exemple.com.

;; ADDITIONAL SECTION:
ns.exemple.com.         604800  IN      A       192.168.1.254

La section AUTHORITY SECTION indique le FQDN du serveur faisant autorité pour répondre aux requêtes concernant ce nom de domaine ;

La section ADDITIONAL SECTION indique l’adresse IP du serveur faisant autorité pour répondre aux requêtes concernant ce nom de domaine ;

Définir des hôtes

Une fois la zone principale configurée, vous pouvez renseigner dans sa description les noms des différents serveurs (ou autre) pour lesquels vous souhaiter résoudre le nom.

L’association du nom d’une machine à son adresse IP se fait de la manière suivante :

NomHote     IN     A     IPHote

Nous prendrons pour exemple un serveur MySQL, dont le nom est MySQL et l’adresse IP 192.168.1.100 ;

Éditez le fichier de description de la zone principale :

nano /etc/bind/exemple.com

Renseignez l’hôte de la façon suivante :

;
; BIND data file for local loopback interface
;
$TTL    604800
@       IN      SOA     ns.exemple.com. email@exemple.com. (
                       04042017         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      ns.exemple.com.
@       IN      A       127.0.0.1
@       IN      AAAA    ::1
NS      IN      A       IPServeurMaître
MySQL   IN      A       192.168.1.100

Enregistrez les modifications ;

Redémarrez le service bind9 :

service bind9 restart

Testez la résolution de nom :

dig @127.0.0.1 MySQL.exemple.com

Le serveur DNS doit vous retourner l’adresse IP associée au nom MySQL :

;; QUESTION SECTION:
;MySQL.exemple.com.             IN      A

;; ANSWER SECTION:
MySQL.exemple.com.      604800  IN      A       192.168.1.100

;; AUTHORITY SECTION:
exemple.com.            604800  IN      NS      ns.exemple.com.

;; ADDITIONAL SECTION:
ns.exemple.com.         604800  IN      A       192.168.1.254

Ce tutoriel est terminé. Votre serveur BIND est maintenant fonctionnel mais, il ne possède qu’une configuration basique pour le moment. Si vous souhaitez le configurer d’avantage, vous pouvez poursuivre en créant une zone reverse, un serveur esclave ou encore une sous-zone.

Si vous avez des problèmes, où que vous trouvez que certains points sont mal expliqués (ou faux), n’hésitez pas à m’avertir.