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.
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 !!!!