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 mettant127.0.0.1
comme seulnameserver
. 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 lesnameserver
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; }; |
où 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’undhclient
en créant un hook qui écrase la fonctionmake_resolv_conf
du client DHCP ; c’est assez radical. Toutefois, une solution plus élégante semble être l’utilisation du paquetresolvconf
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 yyyymmddnn où yyyy 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: |