Chapitre 9. Monter un serveur DNS

Table des matières
1. Installer le serveur DNS
2. Configurer le serveur DNS
2.1. Les fichiers de configuration
2.2. Configurer un serveur indépendant
2.3. Configurer un serveur DNS primaire pour une zone
2.4. Configurer un serveur secondaire pour une zone
3. Tester le serveur DNS

DNS (Domain Name System) est le protocole qui permet de faire la correspondance entre une adresse IP et le nom de domaine, ou nom DNS, du type www.debian.org.

Note

Ce chapitre suppose une connaissance de base du protocole DNS. Pour apprendre les bases du fonctionnement de la DNS, lisez le début de ce document.

1. Installer le serveur DNS

Plusieurs serveur DNS sont disponibles dans la Debian ; je vous propose d'installer le serveur DNS de référence, BIND (Berkeley Internet Name Domain) de l'Internet Software Consortium dans sa version 9 :


# apt-get install bind9

2. Configurer le serveur DNS

2.1. Les fichiers de configuration

Les fichiers de configuration de Bind se trouvent dans le répertoire /etc/bind/. On y trouve notamment le fichier db.root, qui contient les adresses IP des serveurs DNS racines (i.e. les serveurs centraux du système DNS), et le fichier named.conf qui est le fichier de configuration principal de Bind.

Le répertoire /var/cache/bind/ est destiné à accueillir les fichiers de zone pour ceux qui veulent configurer un serveur DNS primaire ou secondaire.

2.2. Configurer un serveur indépendant

Par défaut, Bind est configuré en tant que serveur DNS "indépendant", qui n'est primaire ou secondaire pour aucun domaine. Quel est l'intérêt d'un tel serveur ? Faire office de cache DNS. En effet, le serveur DNS va retenir dans son cache les correspondances IP-DNS demandées par les clients, et ne sera pas obligé d'aller chercher à chaque fois auprès des autres serveurs DNS la réponse aux requêtes.

Par exemple, si vous trouvez que le serveur DNS de votre fournisseur d'accès est trop long à répondre, vous aurez intérêt à installer un serveur DNS sur votre ordinateur et configurer votre système pour qu'il interroge en priorité le serveur local. Pour optimizer les temps de requêtes, configurez votre serveur DNS pour qu'il demande les enregistrements qu'il n'a pas dans son cache aux serveurs DNS de votre fournisseur d'accès au lieu d'aller les demander lui-même auprès des autres serveurs DNS.

Pour cela, éditez le fichier named.conf et décommentez les lignes de la sous-section forwarders de la section options en y inscrivant les adresses IPs des serveurs DNS de votre fournisseur d'accès. Le début du fichier named.conf ressemble alors à cela :


options {
	directory "/var/cache/bind";

	forwarders {
		48.128.12.41;
		48.128.12.42;
	 };

	auth-nxdomain no;
};

48.128.12.41 et 48.128.12.42 sont les adresses IPs des serveurs DNS de votre fournisseur d'accès.

Enfin, modifiez le fichier /etc/resolv.conf et mettez votre serveur en première position dans la liste des serveurs DNS :


search liste_de_domaines_pour_les_noms_DNS_dont_le_domaine_n'est_pas_précisé
nameserver 127.0.0.1
nameserver 48.128.12.41
nameserver 48.128.12.42

2.3. Configurer un serveur DNS primaire pour une zone

Vous avez acheté un nom de domaine et vous souhaitez héberger votre DNS primaire ? Il vous faut configurer votre Bind comme autoritaire (ou master) pour votre domaine et donner à l'organisme auquel vous avez acheté votre domaine l'adresse IP de votre serveur.

2.3.1. Modification de named.conf

Ajoutez à la fin du fichier named.conf les lignes suivantes :


zone "mondomaine.org" {
	type master;
	file "mondomaine.org.zone";
};

où :

  • mondomaine.org est le nom de domaine pour lequel votre serveur sera primaire,

  • mondomaine.org.zone désigne le fichier /var/cache/bind/mondomaine.org.zone où seront stockés les enregistrements de la zone.

2.3.2. Ecriture du fichier de zone

C'est de loin la partie la plus difficile ! J'ai écris un fichier de configuration type largement commenté qui pourra vous servir comme base de travail pour écrire votre propre fichier de zone :


# cp ~/config/mondomaine.org.zone /var/cache/bind/

ou :


% wget http://people.via.ecp.fr/~alexis/formation-linux/config/mondomaine.org.zone
# mv mondomaine.org.zone /var/cache/bind/

2.3.3. Vérifications et relance

Vérifiez que vous n'avez pas fait d'erreur de syntaxe dans le fichier named.conf :


% named-checkconf

Si la commande n'affiche rien, c'est que le fichier named.conf est valide. Ensuite, vérifiez la syntaxe du fichier de zone :


% named-checkzone mondomaine.org /var/cache/bind/mondomaine.org.zone
zone mondomaine.org/IN: loaded serial 2003050102
OK

Si la commande n'affiche aucun message d'erreur, alors il n'y a pas d'erreur de syntaxe dans le fichier de zone. Vous pouvez alors dire à Bind de relire son fichier de configuration :


# /etc/init.d/bind9 reload

Note

Attention, si vous faites un restart au lieu d'un reload, le cache de votre serveur DNS se videra !

2.4. Configurer un serveur secondaire pour une zone

Un ami vous a demandé de faire office de serveur DNS secondaire pour son domaine ? Vous avez accepté ? Il ne reste plus qu'à configurer votre Bind !

2.4.1. Modification de named.conf

Rajoutez à la fin du fichier named.conf les lignes suivantes :


zone "domaine-ami.org" {
	type slave;
	file "domaine-ami.org.zone";
	masters { 12.42.112.242; };
};

où :

  • domaine-ami.org est le nom de domaine pour lequel votre serveur sera secondaire,

  • domaine-ami.org.zone désigne le fichier /var/cache/bind/domaine-ami.org.zone où sera écrite la zone à l'issue du premier transfert depuis le serveur DNS primaire,

  • 12.42.112.242 est l'adresses IP du serveur primaire de la zone.

2.4.2. Vérification et relance

Vérifiez que vous n'avez pas fait d'erreur de syntaxe dans le fichier named.conf :


% named-checkconf

Si la commande n'affiche rien, c'est que le fichier est valide. Vous pouvez alors dire à Bind de relire son fichier de configuration :


# /etc/init.d/bind9 reload

Votre serveur DNS fera alors régulièrement des transferts de zone depuis le serveur primaire (et notamment à chaque fois que le serveur primaire lui notifiera d'un changement dans la zone) et l'écrira dans le fichier /var/cache/bind/domaine-ami.org.zone.

3. Tester le serveur DNS

L'utilitaire dig permet de faire des requêtes DNS évoluées et fournit un maximum d'informations sur la requête. Il est très utile pour vérifier la bonne configuration d'un serveur DNS.

Exemples d'utilisation de dig :

La sortie de la commande dig est très détaillée ; la réponse à la requête (la partie qui vous intéressera le plus !) se trouve en dessous de la ligne suivante :


;; ANSWER SECTION: