Installation et configuration d’un serveur DNS sous Debian

Cet article sera consacré à la mise en place d’un serveur DNS sous Debian, en utilisant Bind9, afin de résoudre les noms de machines de notre futur domaine.

Installation de Bind9

Avant toute chose nous devons installer Bind, en passant par le gestionnaire apt :

riri@srv-debian:~$ sudo apt-get install bind9

Apt nous informe qu’un paquetage supplémentaire sera installé (bind9-utils) et nous demande si l’on souhaite continuer. On accepte, cela va de soi.
Une fois l’installation terminée, le service bind démarre. Nous allons maintenant nous attaquer à la configuration du fichier de résolution de noms. Dans cet exemple nous considèrerons un domaine interne, nommé « mondomaine.lan ».

Configuration de Bind9

La configuration de bind se fait au sein de 2 fichiers, un principal et un secondaire nommés /etc/bind/named.conf et /etc/bind/db.mondomaine.lan. Le premier fichier liste les zones de résolution de notre serveur (les différents domaines) et les fichiers de zone associés, le second est le fichier de configuration de zone en lui même. Commençons par éditer le fichier named.conf :

riri@srv-debian:~$ sudo nano /etc/bind/named.conf

Voici son contenu :

// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local

include "/etc/bind/named.conf.options";

// prime the server with knowledge of the root servers
zone "." {
	type hint;
	file "/etc/bind/db.root";
};

// be authoritative for the localhost forward and reverse zones, and for
// broadcast zones as per RFC 1912

zone "localhost" {
	type master;
	file "/etc/bind/db.local";
};

zone "127.in-addr.arpa" {
	type master;
	file "/etc/bind/db.127";
};

zone "0.in-addr.arpa" {
	type master;
	file "/etc/bind/db.0";
};

zone "255.in-addr.arpa" {
	type master;
	file "/etc/bind/db.255";
};

include "/etc/bind/named.conf.local";


On voit qu’il contient déjà des informations. Celles-ci concernent la résolution de noms de la machine locale, la résolution d’adresses inverse toujours pour la machine locale, et le chemin de configuration des serveurs DNS racine. Nous allons compléter ce fichier en rajoutant au dessus de la ligne "include "/etc/bind/named.conf.local";" les lignes qui vont permettre de déclarer une nouvelle zone correspondant à notre domaine :

// Configuration du domaine mondomaine.lan
zone "mondomaine.lan" { // On déclare le nom de notre zone
	type master; // Ce serveur sera serveur DNS principal de notre domaine
	file "/etc/bind/db.mondomaine.lan"; // Et il utilisera ce fichier de zone pour résoudre les noms
};



Vous pouvez supprimer les commentaires à votre convenance.
On enregistre et on quitte. Passons ensuite à la configuration de notre fichier de zone :

riri@srv-debian:~$ sudo nano /etc/bind/db.mondomaine.lan

C’est l’étape la plus délicate et j’ai mis en commentaires toutes les explications. Au départ notre fichier est vide. Nous allons devoir le remplir avec les lignes suivantes :

$ORIGIN mondomaine.lan.
$TTL 604800
@ IN SOA srv-debian.mondomaine.lan. root.mondomaine.lan. (
	2012111401 	; Cette ligne est le numéro de série du fichier
				; Elle doit être incémentée à chaque modification
				; afin de pas pas poser de souci de synchronisation
				; dans le cas de la présence de serveurs secondaires
				; Par convention on utilise une date à l'envers
				; suivie de 2 chiffres correspondant au numéro de modif
				;
	604800 		; Cette ligne représente le délai en secondes au bout
				; duquel le serveur dns secondaire va contacter le serveur
				; maitre. S'il échoue, il réessaiera au bout du délai de
				; retry défini en secondes à la ligne en dessous
				;
				;
	86400 		; Retry
	2419200 	; Délai au bout duquel le serveur maitre est considéré comme
				; inactif
	604800)


Petite explication sur les 2 premières lignes : $TTL exprime la durée de validité du cache (la durée pendant laquelle une correspondance nom< ->adresse est considéré comme valide sans avoir a être rafraichie). La seconde ligne :

@ IN SOA srv-debian.mondomaine.lan. root.mondomaine.lan.
signifie :
– @ IN SOA : On déclare une zone d’autorité, SOA signifie Start of Authority
– srv-debian.mondomaine.lan : le nom du serveur DNS
– root.mondomaine.lan : l’adresse de contact. Le premier point en partant de la gauche sera transformé en « @ ». Ici l’adresse de contact sera root@mondomaine.lan

Le principal est fait. Il faut maintenant affiner notre fichier en le complétant avec certaines informations. On rajoute à la suite :

@	NS	srv-debian.mondomaine.lan. ;Nom du serveur de noms
srv-debian 	IN A 	10.0.0.2 		;Adresse IP du serveur de noms
srv-debian 	HINFO 	"Intel Core i5 750" "Debian Lenny" ;Infos complémentaires


Ces 3 lignes vont permettre au serveur de se trouver lui-même.
Les lignes suivantes vont permettre d’une part d’assurer la correspondance nom< ->adresse des machines du réseau mais aussi les alias lorsque par exemple on veut faire pointer plusieurs noms vers une seule et même machine. Dans notre cas, il n’y a qu’une seule machine sur le réseau mais on prévoit par exemple d’ajouter un autre serveur dédié aux mails et au serveur web. Complétons notre fichier en prévision de ces futurs ajouts (il sera toujours possible de modifier le fichier par la suite) :


; Les lignes suivantes définissent la correspondance entre les noms et les IP
srv-mail 	IN A 	10.0.0.3
srv-db 		IN A 	10.0.0.4
srv-proxy 	IN A 	10.0.0.254
srv-dc 		IN A 	10.0.0.1

; Les lignes suivantes sont des alias entre des noms virtuels et des noms réels
pop 		IN CNAME 	srv-mail
smtp 		IN CNAME 	srv-mail
www 		IN CNAME 	srv-db
ad 		IN CNAME 	srv-dc
proxy 		IN CNAME 	srv-proxy

Notre fichier de zone est maintenant complet ! Récapitulatif de son contenu :

$ORIGIN mondomaine.lan.
$TTL 604800
@ IN SOA srv-debian.mondomaine.lan. root.mondomaine.lan. (
	2012111401 	; Cette ligne est le numéro de série du fichier
				; Elle doit être incémentée à chaque modification
				; afin de pas pas poser de souci de synchronisation
				; dans le cas de la présence de serveurs secondaires
				; Par convention on utilise une date à l'envers
				; suivie de 2 chiffres correspondant au numéro de modif
				;
	604800 		; Cette ligne représente le délai en secondes au bout
				; duquel le serveur dns secondaire va contacter le serveur
				; maitre. S'il échoue, il réessaiera au bout du délai de
				; retry défini en secondes à la ligne en dessous
				;
				;
	86400 		; Retry
	2419200 	; Délai au bout duquel le serveur maitre est considéré comme
				; inactif
	604800 )

@ NS srv-debian.mondomaine.lan. ;Nom du serveur de noms
srv-debian 	IN A 10.0.0.2 		;Adresse IP du serveur de noms
srv-debian 	HINFO "Intel Core i5 750" "Debian Lenny" ;Infos complémentaires

; Les lignes suivantes définissent la correspondance entre les noms et les IP
srv-mail 	IN A 10.0.0.3
srv-db 		IN A 10.0.0.4
srv-proxy 	IN A 10.0.0.254
srv-dc 		IN A 10.0.0.1

; Les lignes suivantes sont des alias entre des noms virtuels et des noms réels
pop 		IN CNAME srv-mail
smtp 		IN CNAME srv-mail
www 		IN CNAME srv-db
ad 		IN CNAME srv-dc
proxy 		IN CNAME srv-proxy

On enregistre puis on ferme le fichier. Il faut maintenant redémarrer le serveur DNS pour qu’il prenne en compte notre nouvelle configuration :

riri@srv-debian:~$ sudo /etc/init.d/bind9 restart

Test de la configuration

Pour vérifier que notre serveur DNS fonctionne bien, nous allons paramétrer une machine du réseau pour qu’elle l’utilise en tant que serveur DNS principal. A des fins de test j’ai installé Ubuntu sur une machine virtuelle reliée au réseau de notre serveur mais ca marche aussi bien sous Windows. Sur la machine de test on spécifie qu’elle doit utiliser en serveur dns primaire l’adresse du serveur que nous venons de configurer (modifier /etc/resolv.conf sous linux ou les propriétés de la carte réseau sous windows) puis on lance un terminal (ou l’invite de commandes dos) et on tape :

nslookup nomdelamachine.
Cette commande doit nous retourner l’IP de la machine cible, comme ceci :

riri@srv-debian:~$ nslookup smtp
Server: 10.0.0.2
Address: 10.0.0.2#53
smtp.mondomaine.lan canonical name = srv-mail.mondomaine.lan.
Name: srv-mail.mondomaine.lan
Address: 10.0.0.3

Notre serveur DNS effectue correctement son travail. Cependant il faut lui ajouter une fonctionnalité : la résolution de noms inverse, c’est à dire retrouver le nom d’une machine à partir de son adresse IP. Pour cela nous allons déclarer une zone de résolution inverse dans notre named.conf et générer le fichier de zone associé

Configuration de la zone de résolution inverse

Comme pour la zone de recherche directe configurée précedemment, nous allons déclarer une nouvelle zone dans le fichier named.conf en y ajoutant les lignes suivantes à la suite de la déclaration de la zone mondomaine.lan :

// Déclaration de la zone de recherche inversée
zone "0.0.10.in-addr.arpa" {
	type master;
	file "/etc/bind/db.0.0.10
};

La ligne 0.0.10.in-addr.arpa représente l’adresse de notre réseau à l’envers (pour un réseau en 10.0.0.x)
On enregistre le fichier et on quitte. Il faut ensuite générer le fichier de zone :

riri@srv-debian:~$ sudo nano /etc/bind/db.0.0.10

On y met les lignes suivantes :

$TTL 604800
@ IN SOA srv-debian.mondomaine.lan. root.mondomaine.lan. (
	2010060401 ; Serial
	604800 ; Rafraichissement
	86400 ; Nouvel essai
	2419200 ; Expire
	604800 ) ; Durée de vie minimum du cache

@ 	NS 	srv-debian.mondomaine.lan.
1 	IN PTR 	srv-dc.mondomaine.lan.
2 	IN PTR 	srv-debian.mondomaine.lan.
3 	IN PTR 	srv-mail.mondomaine.lan.
4 	IN PTR 	srv-db.mondomaine.lan.
254	IN PTR 	srv-proxy.mondomaine.lan.

Les enregistrements de type IN PTR font l’inverse des IN A, ils associent un nom à une IP. Les chiffres qui précèdent IN PTR représentent la partie hôte de l’adresse, par exemple 1 IN PTR srv-dc.mondomaine.lan signifie que l’adresse 10.0.0.1 a pour nom srv-dc.mondomaine.lan.
On peut enregistrer et fermer le fichier. Puis on redémarre Bind :

riri@srv-debian:~$ sudo /etc/init.d/bind9 restart
Stopping domain name service...: bind9.
Starting domain name service...: bind9.


Pour tester que tout marche bien, comme précédemment on effectue un nslookup sur l’une des ip enregistrées dans la zone

riri@srv-debian:~$ nslookup 10.0.0.4
Server: 10.0.0.2
Address: 10.0.0.2#53

4.0.0.10.in-addr.arpa name = srv-db.mondomaine.lan.

La configuration de notre serveur DNS est maintenant quasiment terminée. Il manque un petit détail à régler. En effet, ce serveur DNS ne résout que les noms des machines du domaine et se sert des serveurs racine (root servers) pour résoudre les noms de domaine internet (google.fr par exemple). Plutôt que de solliciter ces serveurs qui le sont bien assez, on va configurer notre serveur DNS pour qu’il utilise des forwarders, c’est a dire qu’il transmette les requêtes de résolution de tous les noms n’appartenant pas au domaine « mondomaine.lan » au serveur DNS de notre FAI. Pour cela, il suffit de modifier le fichier /etc/bind/named.conf.options et de décommenter les lignes suivantes :

//forwarders{
	// 0.0.0.0;
//};

et de remplacer 0.0.0.0 par l’adresse du DNS de votre choix (votre FAI, Google…) :

forwarders{
	8.8.8.8;
};



ici 8.8.8.8 est l’adresse du serveur DNS primaire fourni par Google. Sauvez, quittez le fichier et redémarrez bind:

riri@srv-debian:~$ sudo /etc/init.d/bind9 restart

La configuration de notre serveur DNS est maintenant terminée et vous pouvez désormais vous en servir comme serveur primaire pour toutes les machines du réseau.

1 comment

  1. Ubx 13 avril 2015 at 17 h 41 min Reply

    J’utilise cette procédure pour configurer le serveur Bind9, mais cette fois j’utilise une adresse IP Publique. Tout fonctionne sur la machine hôte c’est à dire lorsque je fais un ping sur yahoo.fr, tout ce passe bien. Mais sur un client lorsque je l’essaie, c’est impossible. Voilà le message que j’obtiens en consultant les logs: Apr 13 17:26:09 nsminj named[2755]: client 192.168.10.6#60635: query (cache) ‘yahoo.fr/A/IN’ denied

    Si quelqu’un peut m’aider !!!!

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *