Installer et configurer un serveur DNS avec Bind9 sous Linux

Un service DNS (Domain Name Service) sert à la résolution de nom de domaine en adresse IP. C’est à dire que pour un nom de domaine est associée une IP. Ce service est utile notamment pour naviguer sur internet pour ne pas avoir à connaître les IPs des sites web.

Introduction

La mise en place d’un tel service requiert l’utilisation d’un logiciel spécifique. Le plus connu est certainement le logiciel Bind. Ce logiciel, maintenu par Internet Systems Consortium est utilisé sur la grande majorité des services DNS existant dans le monde et notamment par la plupart des serveurs DNS racines.

Dans ce tutoriel nous allons apprendre à mettre en place et configurer un service DNS avec Bind9. Pour ce faire, nous allons prendre le cas simple de la configuration d’un nom de domaine pour un site web. Nous mettrons en place un nom de domaine qui pointera vers différents services tel qu’un serveur HTTP, un serveur Mail, … etc. Il n’est pas nécessaire que ces services existent réellement.

Installation et configuration

La première étape à effectuer est d’installer le package bind9 au moyen de la ligne de commande suivante.

sudo apt-get install bind9 dnsutils

Il pourra vous être nécessaire de configurer votre système pour utiliser le serveur DNS créé sur votre machine. Pour ce faire, modifiez le fichier resolv.conf de la manière suivante. Les requêtes DNS se feront désormais vers le DNS local.

# /etc/resolv.conf
nameserver 127.0.0.1

Une fois le serveur installé et démarré, configurons un premier site. Le nom de domaine choisi n’a pas d’importance, veillez toutefois à éviter d’utiliser un nom de domaine existant pour faciliter vos tests. Dans ce tutoriel nous utiliserons le nom de domaine mysite.lan.

La mise en place d’un nouveau nom de domaine, aussi appelé zone, se fait par la création d’un fichier. Ce fichier contient l’ensemble des enregistrements DNS du domaine. Ce sont ces informations qui seront envoyées lors d’une requête DNS. Ils donnent notamment les adresses IPs de plusieurs services, les IPs des sous-domaines, le temps de vie avant revérification des informations (TTL), … etc. Voici un exemple de configuration d’un nom de domaine.

# /etc/bind/db.mysite.lan
$TTL    604800
@       IN      SOA     ns.mysite.lan. root.mysite.lan. (
                        2           ; Serial
                        604800      ; Refresh
                        86400       ; Retry
                        2419200     ; Expire
                        604800 )    ; Negative Cache TTL
;
@       IN      NS      ns.mysite.lan.
ns      IN      A       192.168.1.10
www     IN      A       192.168.1.100

La configuration du domaine terminée, il est nécessaire maintenant d’inclure cette configuration dans la liste des domaines de bind9.

# /etc/bind/named.conf.local

zone "mysite.lan" {
    type master;
    file "/etc/bind/db.mysite.lan";
};

Avant de redémarrer le serveur, nous allons tester le fichier de domaine créé pour vérifier s’il est correcte afin d’éviter des erreurs au redémarrage de bind. La commande named-checkzone, inclue dans le package de bind9, va vérifier la syntaxe du fichier passé en paramètre.

sudo named-checkzone mysite.lan /etc/bind/db.mysite.lan

Il faut maintenant redémarrer le service pour prendre en compte les modifications.

sudo service bind9 restart

Enregistrements

Il existe différents types d’enregistrements représentant chacun un type information différent. Voici une liste des plus courants :

Enregistrement A

C’est l’enregistrement le plus courant. Il fait correspondre une adresse IPv4 à un nom d’hôte.

www    IN    A    A.B.C.D

Enregistrement AAAA

Variante de l’enregistrement A, il fait correspondre une adresse IPv6 à un nom d’hôte.

www    IN    AAAA    ::A

Enregistrement CNAME (Canonical Name)

Il permet de créer un alias pointant vers un autre enregistrement du domaine courant ou d’un domaine externe. Il est possible de créer un enregistrement CNAME pointant vers un autre enregistrement CNAME mais cette pratique double le nombre de requêtes, il et donc déconseillé de la pratiquer.

mail    IN    CNAME  www
ftp     IN    CNAME  ftp.domain.tld.
www     IN    A      A.B.C.D

Enregistrement MX (Mail Exchange)

Il donne le serveur d’envoi d’emails. Cet enregistrement doit pointer obligatoirement vers un enregistrement de type A et pas un enregistrement CNAME. Il est possible de définir une priorité sur chaque enregistrement pour donne le serveur email à requêter en priorité. Si ce serveur est indisponible, le serveur ayant la priorité la plus proche sera requêté à la place.

         IN    MX  10  mail1
         IN    MX  50  mail2
mail1    IN    A       A.B.C.D
mail2    IN    A       A.B.C.D

Enregistrement NS (Name Server)

Il définit les serveurs DNS du domaine. Cet enregistrement doit pointer obligatoirement vers un enregistrement de type A et pas un enregistrement CNAME.

      IN    NS    domain.tld.
ns    IN    A     A.B.C.D

Enregistrement TXT

Il permet de définir un enregistrement contenant un texte libre. Cet enregistrement est notamment utilisé pour confirmer le détenteur du domaine pour pouvoir utiliser certains services externes tel que Google Webmaster tools ou encore un service d’envoi de mails (Mandrill, Mailgun, …).

domain.tld.    IN    TXT    "text"

Test

Afin de s’assurer du bon fonctionnement de notre serveur et de vérifier que les enregistrements ont bien été pris en compte et son correctes, des tests vont être nécessaires. Pour tester ces enregistrements nous allons utiliser dig.

dig -x 127.0.0.1

Vous devriez voir une sortie console similaire à celle-ci :

; <<>> DiG 9.9.5-3ubuntu0.2-Ubuntu <<>> -x 127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63705
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

[...]

;; Query time: 4 msec
;; SERVER: 192.168.245.2#53(192.168.245.2)
;; WHEN: Wed Apr 08 16:30:11 CEST 2015
;; MSG SIZE  rcvd: 63

Vous pouvez également demander de voir les enregistrements DNS pour un domaine spécifique.

dig mysite.lan

Il ne vous reste plus qu’à comparer le retour de la commande avec les enregistrements que vous avez rentrez précédemment pour le domaine. Les enregistrements sont normalement les mêmes.