Configuration d'un serveur DNS
Rédigé par Xavier - -
Un serveur DNS permet d'associer un nom de domaine, à caractères alphabétiques (par exemple google.fr), à une adresse IP. Il fonctionne également dans l'autre sens. C'est grâce à ça que nous n'avons pas à mémoriser les adresses IP des sites que nous visitons.

Voici un tutoriel pour configurer bind9, un serveur DNS, sous debian / ubuntu.
Logiciels
- Bind9
- Debian ou Ubuntu GNU/Linux
Requis
- Avoir un réseau fonctionnel
- Avoir des bases en TCP/IP (masques, réseaux...)
- Connaitre le fonctionnement d'un DNS
Schema du réseau
Voici le réseau sur lequel nous allons travailler:

Masque de sous-réseau: 255.255.255.0, et adresse du réseau: 192.168.0.0
Configuration de Bind9
Le fichier de configuration est situé dans /etc/bind/named.conf, pour l'éditer vous pouvez utiliser nano:
Comme vous pourrez le constater, c'est assez pointu et il est recommandé de bien maitriser le fonctionnement (théorique) d'un serveur DNS.
Pour commencer nous devons définir une nouvelle zone. Elle pointera vers notre réseau. Nous devons la nommer, par exemple "mynetwork.lan".
Et ajoutez ceci:
zone "mynetwork.lan" { type master; file "/etc/bind/db.mynetwork.lan"; };
Comme vous l'avez deviné, nous allons devoir créer un fichier "db.mynetwork.lan" par la suite. Comme le DNS fonctionne aussi "à l'envers" (une IP désigne un nom de domaine) nous devons aussi ajouter:
zone "0.168.192" { type master; file "/etc/bind/db.192.168.0"; };
Attention cette fois vous devez indiquer l'adresse du sous-réseau en l'inversant! Vous pouvez connaitre cette adresse à partir du masque de sous-réseau. Dans notre exemple c'est 192.168.0.0 mais le dernier terme est l'adresse machine. Là encore il faudra créer un fichier "db.192.168.0" dans lequel nous mettrons nos paramètres.
# touch /etc/bind/db.192.168.0
Dans le premier fichier, vous devez ajouter ceci:
$TTL 3h
@ IN SOA ns.mynetwork.lan. hostmaster.mynetwork.lan. ( 2010022320 8H 2H 1W 1D )
Pour savoir à quoi correspondent les paramètres, voici des pages plus descriptives: ici et ici. Voici un petit résumé:
- TTL: Temps de mémorisation des erreurs
- @: zone décrite par le fichier de configuration
- IN: indique que l'on se situe dans la zone internet
- SOA: indique que le serveur est la meilleure source d'informations
- ns.mynetwork.lan. (n'oubliez pas le point qui va après): le serveur
- hostmaster.mynetwork.lan. (idem): adresse mail du responsable (hostmaster@mynetwork.lan.)
- 20100223230: numéro de version, ici j'ai mis la date
- 8H (8 heures): Temps de rafraichissement
- 2H (2 heures): Temps entre deux essais
- 1W (1 week): Temps d'expiration
- 1D (1 day): TTL réponse négative
Dans le même fichier, ajoutez ceci:
@ IN NS ns.mynetwork.lan.
ns A 192.168.0.1 machine2 A 192.168.0.2 machine3 A 192.168.0.3 machine4 A 192.168.0.4
La première colone est le préfixe du nom de domaine qui sera attribué. par exemple "ns" donnera "ns.mynetwork.lan". Le type "A" signifie que c'est un nom translaté en IP.
Ouvrez ensuite le second fichier et ajoutez ceci:
$TTL 3h @ IN SOA ns.mynetwork.lan. hostmaster.mynetwork.lan. ( 2010022320 8H 2H 1W 1D ) @ IN NS ns.mynetwork.lan. 1 IN PTR ns.mynetwork.lan. 2 IN PTR machine2.mynetwork.lan. 3 IN PTR machine3.mynetwork.lan. 4 IN PTR machine4.mynetwork.lan.
Vous l'aurez remarqué, c'est très similaire mais à l'envers. Attention n'oubliez pas les points. Et cette fois au lieu de "A" on met "PTR" qui désigne une translation d'adresse vers un nom.
Relancez ensuite bind9:
Récapitulatif: Nous avons donc défini:
- Un serveur 192.168.0.1 qui sera joignable via le nom "ns.mynetwork.lan"
- Un client 192.168.0.2 qui sera joignable via "machine2.mynetwork.lan"
- Un client 192.168.0.3 qui sera joignable via "machine3.mynetwork.lan"
- Un client 192.168.0.4 qui sera joignable via "machine4.mynetwork.lan"
Tests
Rendez-vous sur l'une des machines clients du réseau, et vérifiez que votre nouveau serveur DNS est bien celui défini dans le fichier /etc/resolv.conf (avec cat ou nano). Dans le cas présent vous devez y trouver une ligne:
Vous pouvez faire des essais avec la commande "nslookup".
> ns.mynetwork.lan
Cette commande demande à quelle adresse IP correspond le domaine "ns.mynetwork.lan". Si on remonte dans nos fichiers db, on voit que c'est 192.168.0.1, soit l'IP du serveur. Cette commande doit donc retourner:
Serveur: 192.168.0.1 Address: 192.168.0.1#53 Name: ns.mynetwork.lan Address: 192.168.0.1
Comme indiqué sur la dernière ligne, l'adresse IP correspondant à ns.mynetwork.lan est bien 192.168.0.1 :) D'ailleurs vous pouvez également le vérifier en lançant un ping vers ns.mynetwork.lan, c'est bien 192.168.0.1 qui répond. Vous pouvez retenter l'opération en remplaçant "ns.mynetwork.lan" par "machine2.mynetwork.lan" et cette fois c'est 192.168.0.2 qui répond!