Installer un serveur DNS

Cet article est extrait du wiki de la formation Debian de Alexis de Lattres

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

Installer le serveur DNS

La méthode simple et efficace

Plusieurs serveur DNS sont disponibles sous 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
Remarque
Si vous utilisez l’utilitaire resolvconf, il se peut qu’après l’installation de BIND9 il « s’amuse » à réécrire votre /etc/resolv.conf en mettant 127.0.0.1 comme seul nameserver. En fait, il s’agit du script d’initialisation de BIND9 qui permet, moyennant une option, de réécrire le /etc/resolv.conf de cette façon. Si vous ne souhaitez pas ce comportement, mais souhaitez par exemple garder les nameserver qui vous sont proposés par DHCP, alors il suffit d’écrire la ligne suivante dans le fichier /etc/default/bind9 :
RESOLVCONF=no

Dans un chroot, pour plus de sécurité

Afin de sécuriser votre installation de BIND9, il est vivement préférable de l’isoler dans un sous répertoire. C’est le principe du chroot. Vous pouvez pour cela suivre le tutoriel suivant (en anglais). Il est très détaillé, et devrait être suffisant. Toutefois, pour plus de sécurité, on peut vouloir bloquer l’accès aux fichiers qu’utilise BIND9 à tous les utilisateurs excepté bind. Pour ce faire, avec les conventions du tutoriel en question, il faut faire :

# chown bind:bind /var/lib/named
# chmod 700 /var/lib/named

Configurer le serveur DNS

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 les fichiers named.conf, named.conf.local et named.conf.options, qui sont les fichiers de configuration principaux de BIND. En fait, named.conf est le fichier de configuration principal de BIND9, mais afin de rendre la configuration de BIND9 plus propre, dans le paquet Debian bind9, sous Etch, il y a en plus un fichier named.conf.local destiné à accueillir des informations sur les domaines pris en charge par BIND9 (i.e. sur les zones que l’on veut gérer), et un fichier named.conf.options qui sert pour les options de BIND9. Ces deux derniers fichiers font simplement l’objet d’un include dans le fichier named.conf.

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

rndc : Remote Name Daemon Control

rndc est une interface pour contrôler BIND9 en ligne de commande. C’est normalement avec lui que l’on contrôle le démon BIND9 (et non pas à l’aide du script d’init /etc/init.d/bind9). Par exemple, pour que le serveur prenne en compte des modifications apportées à la configuration de BIND9, ou aux fichiers de zone, on devra utiliser la commande :

# rndc reload

Si l’on devait vider le cache de notre serveur DNS, on utiliserait la commande :

# rndc flush

Ce n’est qu’un bref aperçu de rndc, mais toutes les commandes que l’on peut utiliser avec rndc sont documentées dans le chapitre 3 de la documentation officielle de BIND9, de même que tous les outils de vérification de configuration que l’on va voir plus loin.

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.options 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.options 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
Remarque
Si vous utiliser du DHCP pour fixer vos paramètres de connexion, vous risquez fortement de voir votre /etc/resolv.conf écrasé lors d’une requête DHCP. Pour pallier à ce problème, vous pouvez par exemple désactiver la réécriture automatique de votre /etc/resolv.conf lors d’un dhclient en créant un hook qui écrase la fonction make_resolv_conf du client DHCP ; c’est assez radical. Toutefois, une solution plus élégante semble être l’utilisation du paquet resolvconf qui permet de gérer soi-même son /etc/resolv.conf.

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.

Modification de named.conf.local

Ajoutez à la fin du fichier named.conf.local 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.

Écriture du fichier de zone

Vous trouverez un fichier exemple largement commenté en cliquant ici.

Le Start of Authority Record (SOA)

Chaque fichier de zone contient un unique champ SOA : il s’agit du SOA Record. C’est un enregistrement tout à fait critique pour une zone DNS.

Entre autres, le SOA contient un champ appelé serial, qui correspond à un numéro de version du fichier de zone. C’est en fait en comparant son serial à celui du fichier de zone du serveur DNS principal qu’un serveur DNS secondaire pour cette zone sait s’il doit mettre à jour son fichier de zone ou non.

Dans BIND9, il s’agit forcément d’un nombre à dix chiffres. Par convention, on y met un nombre de la forme yyyymmddnnyyyy est l’année, mm le mois, et dd le jour de la modification, et nn un numéro entre 00 et 99 (dans le cas où il y aurait plusieurs modifications du fichier de zone à une même date).

Attention !
Il ne faut jamais oublier d’incrémenter le serial dans le SOA Record à chaque modification des fichiers de zone. Ensuite, on doit demander à BIND9 de relire ses fichiers de zone.

Vérifications et relance

Vérifiez que vous n’avez pas fait d’erreur de syntaxe dans les fichiers named.conf, named.conf.local, et named.conf.options :

% named-checkconf

Si la commande n’affiche rien, c’est que les fichiers de configuration de BIND sont valides. 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 2007032702
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 :

# rndc reload
server reload successful
Note

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

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 !

Modification de named.conf.local

Rajoutez à la fin du fichier named.conf.local 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.

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 ses fichiers de configuration :

# rndc 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.

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 :

  • Requête sur le champ « A » du nom www.mondomaine.org auprès du serveur DNS 12.42.112.242 :
% dig @12.42.112.242 www.mondomaine.org A
  • Requête sur la champ « MX » du nom mondomaine.org auprès du serveur DNS 12.42.112.242 :
% dig @12.42.112.242 mondomaine.org MX
  • Requête sur tous les champs du nom mondomaine.org auprès du serveur DNS 12.42.112.242 :
% dig @12.42.112.242 mondomaine.org ANY
  • Requête AXFR sur le domaine mondomaine.org auprès du serveur DNS 12.42.112.242 :
% dig @12.42.112.242 mondomaine.org AXFR
  • Requête inverse (i.e. reverse DNS) sur l’IP 12.42.111.422 auprès du serveur DNS 12.42.112.242 :
% dig @12.42.112.242 -x 12.42.111.422

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:

Laisser un commentaire

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