Installation d’un serveur DNS Bind 9 sur Debian
But de ce document
Ce document me sert de mémo pour installer un serveur Bind 9 sur une Debian. Ce document a été testé sur Debian Etch et Debian Sarge. Je le diffuse en espérant qu’il puisse servir à d’autres personnes.
Pré-requis
Avoir installé une Debian de Base :
Présentation rapide d’un système DNS
L’architecture de réseau TCP/IP sur lequel est basé Internet et la plupart des réseaux locaux actuels, utilisent des adresses IP numériques du type 192.168.0.1. Mais pour faciliter la lecture de ces adresses par l’homme, un système permet de transformer ces adresses en adresses plus lisibles comme www.coagul.org
Pour effectuer cette opération, il est nécessaire d’utiliser des serveurs DNS. Un serveur DNS fera donc la correspondance entre les adresses IP et les noms des domaines.
Un serveur DNS s’occupe en général d’un domaine limité et s’occupe de transmettre les questions à d’autres serveurs s’il ne connaît pas la réponse.
Principe de fonctionnement de la recherche de noms
Lorsque qu’une demande de résolution de nom est demandée, Linux commence par regarder le fichier « /etc/hosts.conf :
order hosts,bind
multi onLa première ligne de ce fichier indique qu’il faut commencer la recherche en regardant la table hosts locale et ensuite il faut interroger le serveur DNS.
La table hosts locale est enregistrée dans le fichier « /etc/hosts » elle contient une table de correspondance entre des adresses IP et des noms, elle ressemble à :
127.0.0.1 localhost.localdomain localhost
192.168.0.6 debian1.mondomaine.com debian1La première ligne est obligatoire pour que le système fonctionne même quand le réseau est désactivé. L’adresse IP 127.0.0.1 est toujours associée au nom localhost.
Les lignes suivantes peuvent être ajoutées manuellement pour faire la correspondance entre des adresses IP et des noms. C’est ce qui est fait en l’absence de serveur DNS.
Si le résultat n’est pas trouvé dans la table hosts,le système recherche le serveur DNS indiqué dans le fichier « /etc/resolv.conf » :
search mondomaine.com
nameserver 192.168.0.1
nameserver 194.2.0.50La première ligne indique quel domaine il faut ajouter au noms si celui-ci n’est pas indiqué lors d’une demande de résolution de nom. Exemple :
La deuxième ligne indique le serveur DNS principal.
Et c’est donc le serveur DNS qui sera chargé de donner le résultat s’il connaît la réponse ou de transmettre la question à un autre serveur DNS.
Si le serveur principal n’est pas disponible, le serveur DNS indiqué sur la ligne suivante sera utilisé.
Pourquoi installer un serveur DNS
Pour au moins deux raisons :
Installation de Bind 9
Sous Debian, il faut installer le paquet suivant :
# aptitude install bind9
Fichier de Configuration Principal (/etc/bind/named.conf)
Le fichier de Configuration principal « /etc/bind/named.conf » contient la liste des zones (ou domaines) que le serveur DNS doit prendre en charge.
Voici un exemple de description de zone :
zone "mondomaine.com" {
type master;
file "/etc/bind/db.mondomaine.com";
forwarders{};
};mondomaine.com : Nom du domaine à prendre en charge
type master : Cette ligne indique que le serveur est le serveur principal de ce domaine.
file "/etc/bind/db.mondomaine.com" ; :Cette ligne donne le chemin du fichier qui contiendra la correspondance entre les noms et les adresses IP pour ce domaine.
Fichier de configuration secondaire
Pour chaque domaine à gérer, il faut créer le fichier indiqué dans « named.conf ». Dans l’exemple précédent, il faudra créer le fichier « /etc/bind/db.mondomaine.com »
Voici le contenu de ce fichier :
$TTL 604800
@ IN SOA pgdebian.mondomaine.com. root.mondomaine.com. (
20041122 ; Serial -> N° de série à incrémenter à chaque modif
; de ce fichier. Ce N° est utilisé par les
; serveurs esclaves pour lui indiquer qu'il
; doit mettre à jour sa base. Par commodité
; ce n° est une date à l'envers.
604800 ;Refresh -> A l'expiration du délai Refresh exprimé en
; secondes, le serveur excalve va entrer en
; communication avec le maitre et si il ne
; le trouve pas, il fera une nouvelle
; tentative au bout du délai Retry et si au
; bout du délai Expire il considerera que le
; serveur n'est plus disponible.
86400 ; Retry
2419200 ; Expire
604800 ) ; Minimum -> Durée de vie minimum du cache en secondes
;** Les 3 lignes suivantes permettent au serveur de se retrouver lui même
NS pgdebian.mondomaine.com. ;Nom du serveur
pgdebian A 192.168.0.3 ;Adresse IP du
;serveur de noms
pgdebian HINFO "PII 233 :-)" "Debian Testing" ;Info
complèmentaire
;** Les lignes suivantes définissent la table entre les noms et les IP
pglinux A 192.168.0.1
pg-cao A 192.168.0.2
plgmao A 192.168.0.9
cpi A 192.168.0.10
prod A 192.168.0.100
pgcie A 10.2.2.1
;** Les lignes suivantes sont des alias entre des noms et des autres noms
pop CNAME pglinux
smtp CNAME pglinux
www CNAME pglinux
ldap CNAME pgdebian
La première partie est utilisée pour la gestion maître-esclave des serveurs DNS.
La deuxième partie permet au serveur DNS de se retrouver lui-même.
La troisième partie contient la table de correspondance entre les noms et les adresses IP.
La dernière partie donne les alias possibles pour un même nom de serveur.
Résolution Inverse
De nombreux services réseaux utilisent la résolution inverse (Trouver l’adresse IP à partir du nom) pour vérifier que le nom est valide.
Il est donc nécessaire de configurer le serveur pour qu’il prenne également en charge la résolution inverse.
Le principe est quasiment le même que pour la résolution classique. il faut déjà définir le domaine inverse dans le fichier « named.conf » comme dans l’exemple suivant :
zone "0.168.192.in-addr.arpa" {
type master;
file "/etc/bind/db.mondomaine.com.inv";
forwarders{};
};L’adresse IP doit être indiquée à l’envers et il faut ajouter .in-addr.arpa.
Il faut également définir un nouveau fichier qui ressemblera à ceci :
$TTL 604800
@ IN SOA pgdebian.mondomaine.com.
root.mondomaine.com. (
20041122
604800
86400
2419200
604800 )
NS pgdebian.mondomaine.com.
1 PTR pglinux.mondomaine.com.
2 PTR pg-cao.mondomaine.com.
3 PTR pgdebian.mondomaine.com.
9 PTR plgmao.mondomaine.com.
10 PTR cpi.mondomaine.com.
100 PTR prod.mondomaine.com.
La première partie est utilisée pour la gestion maître-esclave des serveurs DNS.
La deuxième partie donne le nom du serveur DNS (NS = Name Server).
La troisième partie contient la correspondance entre la fin de l’adresse IP et le nom du serveur.
Pour finir, il est conseillé (mais pas obligatoire) d’indiquer les adresses IP des serveurs DNS de son fournisseur d’accès à Internet. Pour cela, il faut décommenter et renseigner la section suivante du fichier « /etc/bind/named.conf.options » :
forwarders {
194.2.0.50;
194.2.0.20;
};Démarrer le démon
Après chaque modification des fichiers de configuration, il faut redémarrer le démon :
/etc/init.d/bind9 restart
ATTENTION : Il est vivement conseillé de regarder les logs pour vérifier que le démarrage du démon s’est correctement effectué :
tail -30 /var/log/syslog
Installer un serveur secondaire esclave (slave)
Installation du serveur esclave
La mise en place d’un serveur secondaire sur un réseau important est vivement recommandé pour éviter toute panne de résolutions de noms en cas de dysfonctionnement du serveur principale.
Sur le deuxième serveur, il faut également installer bind :
# aptitude install bind9
Configuration du serveur maître
Sur le serveur principal, il faut modifier les zones du fichier « /etc/bind/named.conf », pour ajouter la ligne « notify yes ». Exemple :
zone "mondomaine.com" {
type master;
notify yes;
file "/etc/bind/db.mondomaine.com";
forwarders{};
};Sur le serveur principal, il faut ajouter dans chaque zone à exporter une ligne « NS » pour chaque serveur esclave. Exemple :
NS ServeurEsclave1.mondomaine.com. ;Nom du serveur esclave N°1
NS ServeurEsclave2.mondomaine.com. ;Nom du serveur esclave N°2Sur le serveur principal, il faut autoriser Bind à transférer les données vers le serveur secondaire en ajoutant cette ligne dans « /etc/bind/named.conf.options » :
allow-transfer { 192.168.0.1; };
Remarque : Il faut remplacer l’adresse IP par celle de votre serveur esclave.
Configuration du serveur esclave
Sur le serveur esclave, il faut ajouter dans le fichier « /etc/bind/named.conf.local », les zones à importer du serveur principal. Voici un exemple :
zone "mondomaine.com" {
type slave;
file "db.mondomaine.com ";
masters {192.168.0.4; };
};
zone "0.168.192.in-addr.arpa" {
type slave;
file "db.mondomaine.com.inv";
masters {192.168.0.4; };
};
Le nom des zones doit correspondre exactement aux zones définies sur le serveur principal.
L’adresse IP du serveur principal est indiqué à la ligne « masters »
Sur le serveur esclave, il faut l’autoriser à s’envoyer des notifications pour éviter d’avoir des messages d’erreurs dans les logs. Pour cela, il faut ajouter cette ligne dans le fichier « /etc/bind/named.conf.options » :
allow-notify { 192.168.0.1; };
Remarque : Il faut remplacer l’adresse IP par celle de votre serveur esclave.
Test du serveur esclave
La mise à jour des données du serveur esclave, se fera au moment du redémarrage du serveur maître si le champ « Serial » de la zone concernée est supérieur sur le maître par rapport à l’esclave. Pour vérifier que tout fonctionne correctement, il faut regarder les logs au niveau du serveur esclave et au niveau du serveur maître.
Lors du démarrage du serveur, les fichiers contenant la résolution des noms, seront importés dans « /var/cache/bind »
Remarque : Il est possible de supprimer les fichiers enregistrés dans « /var/cache/bind » car ils seront recréés au prochain démarrage du serveur maître.
Tester la résolution des noms
Il existe plusieurs outils pour tester le bon fonctionnement de la résolution des noms :
ping
La commande « ping » est la plus simple (mais la plus limité). Elle permet de tester la résolution du nom, mais pas la résolution inverse :
$ ping NomDuServeur
host
La commande « host », permet de tester la résolution du nom et la résolution inverse :
$ host NomDuServeur
ou :
$ host AdresseIPduServeur
nslookup
La commande « nslookup » du paquet « dnsutils », permet également de tester la résolution du nom et la résolution inverse :
$ nslookup NomDuServeur
ou :
$ nslookup AdresseIPduServeur
dig
La commande « dig » du paquet « dnsutils », permet également de tester la résolution du nom et la résolution inverse. Mais la commande « dig » permet surtout d’interroger directement le serveur bind et obtenir de nombreuses autres informations :
$ dig NomDuServeur.NomDuDomaine
Remarque : Le nom du domaine est obligatoire pour obtenir une réponse (ANSWER SECTION)
ou :
$ dig -x AdresseIPduServeur
Remarque : Le paramètre « -x » est obligatoire pour obtenir une réponse (ANSWER SECTION)
Remarques sur les fichiers de configuration
Dans ce document, nous avons ajouté dans « /etc/bind/named.conf.options » la ligne suivante pour autoriser Bind à transférer les données vers le serveur secondaire :
allow-transfer { 192.168.0.1; };
Nous aurions pu écrire cette ligne sous cette forme :
allow-transfer {
192.168.0.1; # Il est même possible d'ajouter un commentaire
};Nous pouvons également autoriser plusieurs serveurs comme cela :
allow-transfer {
192.168.0.1; # Serveur N°1
192.168.0.2; # Serveur N°2
};Nous pouvons aussi utiliser cette syntaxe :
allow-transfer {
192.168.0/24; # Autorise tous les postes du réseau locale
};Pour autoriser tout le monde, nous pouvons utiliser cette syntaxe :
allow-transfer { any; };
Ou celle-ci :
allow-transfer { 0/0; };
Pour finir, il est possible de créer une ACL à la fin ou au début du fichier qui ressemble à cela :
acl MesServeurs {
192.168.0.1; # Serveur N°1
192.168.0.2; # Serveur N°2
};Et d’utiliser cette ACL comme ceci :
allow-transfer { MesServeurs; };
Historique des modifications
| Version | Date | Commentaire |
|---|---|---|
| 0.1 | 29/11/04 | Création par Tony GALMICHE |
| 0.2 | 03/12/04 | Mise à jour |
| 0.3 | 06/01/05 | Mise à jour suite à installation serveur Pentium Pro 200 |
| 0.31 | 14/01/05 | Suppression du Sommaire |
| 0.4 | 09/02/05 | Mise à jour du chapitre « Principe de fonctionnement de la recherche de noms » |
| 0.5 | 25/07/06 | Ajout chapitre « Tester la résolution des noms » |
| 0.6 | 19/06/07 | Mise à jour du chapitre « Installer un serveur secondaire esclave » et ajout chapitre « Remarques sur les fichiers de configuration » |

Commentaires
Installation d’un serveur DNS Bind 9 sur Debian
Bonjour,
il peut être judicieux de ne pas toucher au fichier de configuration principal de bind9, à savoir « /etc/bind/named.conf » et de faire sa configuration plutôt dans le fichier /etc/bind/named.conf.local, ceci afin d’éviter de perdre les modifications lors d’une mise à niveau de l’OS comme lors du passage de Ecth à Lenny.
PS : je viens de mettre un petit serveur dns local en place et ça fonctionne, merci pour ce tutoriel limpide.
Bonjour,
c’est tout a fait possible.
En fait il faut 2 serveurs DNS autonomes, pas 2 IP sur un même serveur, du moins en théorie c’est assez mal vu.
Ensuite comme c’est le serveur DNS qui fait correspondre le nom à l’adresse IP, y compris la sienne, il faut enregistrer l’IP et le nom correspondant chez un register (à ne pas confondre avec un registrar), et cela dépend donc du TLD (top level domain, soit .org, .com etc).
Gandi.net permet de forwarder cette demande pour les .org au register (aux US) si vous avez acheté le nom de domaine chez eux.
Pour l’avoir déjà fait je confirme que ça fonctionne plutôt bien.
> Installation d’un serveur DNS Bind 9 sur Debian Testing
comme je ne mis connais pas trop mais les déjà utilisés j’aimerais connaitre la différence je n’ai pas bien saisi le début
En vous remerciant de votre attention
> Installation d’un serveur DNS Bind 9 sur Debian Testing
Salutation,
depuis peut sur l’administration de réseau, je tient à remercier pour cet article de configuration, sur plusieurs ces celui la qui ma permis d’y arrivé la première fois, sinon j’ai une question,
en haut de l’article, sous principe de fonctionnement de la résolution de noms, ...Linux commence par regarder le fichier « /etc/hosts.conf , n’est ce pas plutôt dans le fichier /etc/host.conf, ???
Installation d’un serveur DNS Bind 9 sur Debian
Bonjour,
Je suis étudiante, et pour mes travaux j’ai besoin d’installer un serveur DNS. J’ai suivi toutes les instructions de l’article -enfin je pense, mais au moment de redémarrer le démon, il y a echec, avec le message :
Stopping domain name service... : bindrndc : neither /etc/bind/rndc.conf nor /etc/bind/rndc.key was found
failed !
Que devrai-je faire, pour avoir les fichiers requis ?
Merci
> Installation d’un serveur DNS Bind 9 sur Debian Testing
Merci beaucoup pour ce bel article !
du coup tu m as donné encore plus l envie d en savoir plus !
des que j aurai le niveau pedagogique pour expliquer aussi clairement j en ferai profiter un max !!
tres bon esprit !
> Installation d’un serveur DNS Bind 9 sur Debian Testing
10000000000000 merci, c’est bien fait.
Installation d’un serveur DNS Bind 9 sur Debian
Bonjour,
Après avoir écrit mon message, j’ai encore verifé dans
resolv.conf et j’ai compris pourquoi il allait chercher sur internet directement :( maintenant j’ai mis qu’il cherche
d’abord en interne et miracle ça marche !
Encore merci pour l’article car sa faisait un moment que
je cherchais et désolé pour la question, j aurais dû encore un peu chercher avant..
Installation d’un serveur DNS Bind 9 sur Debian
Bonjour,
Bravo pour l’article qui est bien écrit, mais je dois vraiment être nul car j’arrive pas à avoir la résolution des noms quand je fais un ping, nslookup,..
J’ai un réseau interne de 2 ordis, et 1 ordi qui fait serveur dns, dhcp,... et passerelle pour internet, ce que je voudrais c’est d’avoir un nom de domaine interne pour mon réseau et si il ne trouve pas le nom demandé ou ip qu’il cherche sur internet. Donc mon serveur est un dns primaire pour mon nom de domaine interne ?
D’après le tail j’ai tout qui est juste.
Dans le fichier named.conf d’origine de debian il y a déjà des infos, je pense que l’on doit les laissé ?
réseau interne 192.168.2.1x
serveur ip de la carte pour réseau interne 192.168.2.1
serveur ip de la carte pour réseau extene 192.168.0.2
(un modem étant à 192.168.0.1) on dirait qu’il cherche sur le réseaux externe sans regarder à l interne.
si je fais un dig -x 192.168.2.11 :
; <<>> DiG 9.3.4 <<>> -x 192.168.2.11
;; global options : printcmd
;; Got answer :
;; ->>HEADER<<- opcode : QUERY, status : NXDOMAIN, id : 27166
;; flags : qr aa rd ra ; QUERY : 1, ANSWER : 0, AUTHORITY : 1, ADDITIONAL : 0
;; QUESTION SECTION :
;11.2.168.192.in-addr.arpa. IN PTR
;; AUTHORITY SECTION :
168.192.in-addr.arpa. 86400 IN SOA localhost. root.localhost. 1 604800 86400 2419200 86400
;; Query time : 25 msec
;; SERVER : 192.168.0.1#53(192.168.0.1)
;; WHEN : Sun Jun 3 08:43:29 2007
;; MSG SIZE rcvd : 93
normalement fixtower=192.168.2.11
nslookup fixtower :
Server : 192.168.0.1
Address : 192.168.0.1#53
** server can’t find fixtower : NXDOMAIN
Merci d’avance !
Installation d’un serveur DNS Bind 9 sur Debian
bonjour,
j’ai configurer un dns slave en linux qui devrais ce synchroniser sur un 2003 serveur (maitre) mais dans les log j’ai connexion refuse et la je seche...
merci de votre aide