Configurer un DNS (avec bind 9.2.x)

Dernière mise à jour : 22/02/2005

    Voici ici un petit guide rapide pour vous permettre d'installer un DNS fonctionnel en très peu de temps. Certains dirons que des alternatives telles que djbdns sont plus adéquates mais j'aime relativement Bind car je me suis fait la main dessus depuis déjà quelques années et toutes les entreprises par lesquelles je suis passé s'en servent. Cette seconde édition réactualisée un an plus tard à un mois près vous permettra de rajouter une résolution IPv6. Je vous conseille donc la lecture de la configuration de l'IPv6 sous Linux avant de mettre en place la partie DNS. Si vous êtes prêt, c'est par là !

    Cet exemple prends en compte l'installation de bind 9 sous Debian, mais je ne pense pas que vous aurez trop de difficulté à adapter cela à une autre distribution, d'autant plus que c'est ici la configuration que nous allons aborder et pas la compilation. Donc commencez par un petit : apt-get install bind9. Editez ensuite votre /etc/bind/named.conf. Assurez-vous d'avoir une section à la fin du fichier comme ceci :

    C'est précisemment dans ce fichier que tout va se jouer. Créez donc le fichier /etc/bind/named.conf.local dans lequel vous pouvez rentrer votre premier domaine (nous prendrons ici en exemple internal.frlinux.net qui est un domaine interne dans une DMZ, donc totalement innaccessible de l'extérieur). Dans notre exemple, la plage d'adresse 192.168.0.0 sera utilisée (masque de sous réseau 255.255.255.0) :

    Dans ce que vous avez copié ci-dessus, la première section déclare un domaine nommé internal.frlinux.net dont le fichier de configuration porte le même nom. Un DNS marche également avec une résolution inverse, sans ce second fichier, il vous sera impossible de résoudre une adresse IP vers un nom. Il vous faut donc à présent populer le fichier /etc/bind/internal.frlinux.net, vous pouvez alors copier ce qui suit :

    Dans notre exemple ci-dessus, nous avons donc déclaré une zone du nom de internal.frlinux.net avec un SOA (Start Of Authority) géré par ns.internal.frlinux.net. (le nom du DNS, n'oubliez pas le point à la fin des noms, il est crucial pour assurer une bonne résolution) et le contact mail est postmaster.internal.frlinux.net. (assurez-vous d'avoir cet alias dans votre /etc/aliases). Nous créons ensuite un numéro de série, indispensable pour que votre DNS puisse communiquer avec les autres, et notifier ceux-ci d'un changement dans sa configuration. C'est pour cela qu'il est maintenu sous la forme de la date courante suivie de deux chiffres indiquant la mise à jour (dans notre exemple 01 car première mise à jour). Les autres valeurs (exprimées en secondes pour la plupart) n'ont pas besoin d'être modifiées. Notez bien la ligne commencant par IN NS qui doit obligatoirement contenir le nom du serveur DNS de votre domaine (dans mon cas router). Le @ défini que n'importe quelle requête pour le domaine sera résolue vers 192.168.0.254 dans mon exemple. La variable IN CNAME vous permet de spécifier une machine pour résoudre plusieurs noms (dans notre cas, mon router porte également le nom de ns car je n'ai pas besoin de plusieurs machines).

    Il faut à présent renseigner le fichier /etc/bind/rev-internal.frlinux.net sans lequel vous ne pourrez par résoudre des adresses IP vers des noms. Pour ceci, copiez l'exemple ci-dessous :

    Dans le fichier ci-dessus, vous noterez des similitudes de syntaxe avec le premier fichier, ce qui est normal vu qu'il s'agit de la syntaxe de bind. La principale différence concerne la configuration après le @, en effet, il faut ici donner l'IP elle-même mais juste le numéro unique de cette IP, cela permettra alors au DNS de savoir résoudre dans les deux sens (c'est-à-dire résoudre le nom ou bien l'adresse IP).

    Voilà, votre configuration DNS de base est prête, vous pouvez alors lancer le DNS par la commande /etc/init.d/bind9 start. Si tout va bien, vous devriez lire dans le fichier /var/log/daemon.log (ou dans messages pour les autres Linux) :

    C'est bon signe, tout semble avoir démarré sans erreur. Vous pouvez à présent interroger votre DNS, faisons un petit test pour interroger titanux.internal.frlinux.net puis sont adresse IP 192.168.0.68

    C'est gagné, le serveur est paramétré normalement. Il ne reste alors qu'à configurer votre DNS pour être son propre DNS, éditez /etc/resolv.conf et placez :

    Les postes clients devront alors être paramétrés comme le serveur sauf que vous placerez 192.168.0.254 (dans mon exemple) à la place de 127.0.0.1

Configuration IPv6

    Il est important de savoir que ce guide est principalement fait pour les versions 9.2.x de Bind. Bind 9.3.x apporte de nouvelles fonctionnalités pour l'ipv6 et le gère différemment. Dans cet article nous considèrerons que notre zone IPv6 est la suivante : 2001:130:20e:10::/64. Cette zone sert déjà des adresses IPv6 directement par l'intervention de radvd (consultez l'article entier sur l'IPv6 si vous ne voyez pas de quoi je parle). Imaginons que votre serveur IPv6 aie l'adresse suivante : 2001:130:20e:10::1. Gardez-la bien sous la main pour les tests qui suivent.

    La bonne (ou mauvaise, à vous de décider) chose à propos de radvd est qu'il assigne tout seul comme un grand une adresse à toute carte réseau se connectant vers le routeur. Dans mon cas, j'ai l'adresse suivante d'un client : 2001:130:20e:10:20e:cff:fe90:e863/64 (cette commande est trouvée à partir de la commande ifconfig, bien qu'il est conseillé d'utiliser ip). Suivant le modèle plus haut, voici en gras les lignes ajoutées :

    Il va falloir à présent créer une zone inverse pour pouvoir résoudre les adresses IPv6 vers des noms. Je vous conseille pour cela le site suivant : http://tools.fpsn.net/ipv6-inaddr qui vous aidera à créer votre zone à la volée, très pratique si vous ne savez pas trop comment faire. Si vous vérifiez ce site, vous remarquerez qu'il vous propose de créer une zone inverse selon le nouveau standard (ARPA) ou l'ancien (INT). Il est conseillé de migrer vers la nouvelle zone seulement et laisser l'ancienne de côté.

    Donc dans notre exemple, une zone de 2001:130:20e:10::/64 donnera une résolution inverse (en arpa) de : 0.1.0.0.e.0.2.0.0.3.1.0.1.0.0.2.ip6.arpa. Donc en utilisant le générateur du site ci-dessus, j'obtiens un fichier que j'appellerais : /etc/bind/rev-2001-130-20e-10_64.IP6.ARPA.


    Il vous faut également modifier /etc/bind/named.conf pour intégrer votre configuration IPv6, voici les parties à rajouter :

    Il vous suffit à présent de recharger bind et vous devriez voir quelque chose de similaire dans les logs :


    Un petit test pour vous dire que tout fonctionne bien :

    Voilà qui conlu ce guide de configuration sur bind. Le web recèle de guides d'installation, de configurations et de résolution de problèmes en tous genres, je pense que vous n'aurez pas de mal à trouver une solution si quelque chose se passe mal, dans le pire des cas, il reste mon email. La partie IPv6 est je le concède un peu plus complexe mais reste néanmoins abordable, bon courage !