Introduction

Le DNS est un des éléments essentiels du réseau. Il sert à établir des liens associant des adresses IP à des noms. Grâce au DNS, vous pouvez faire du load balancing statique (round robin), créer des alias d’adresses ou d’autres nom DNS, et des enregistrements spéciaux pour certains services (wpad, caldav, Active Directory…).

Bind9 est le service open source UNIX permettant de résoudre cette problématique. Nous allons voir comment l’installer et le configurer.

Installation

Installez simplement le paquet bind9 de la manière suivante sous Debian:

apt-get install bind9

Sous FreeBSD:

pkg install bind99

Configuration

L’ensemble de la configuration de named se trouve dans le dossier /etc/bind/ sous Linux et /var/named/etc sous BSD . La configuration de named suit, tout comme celle de isc-dhcp-server, une règle d’héritage.

Le fichier named.conf est le fichier principal. Il est généralement découpé en 3 autres fichiers :

  • __named.conf.options: contient les options de bind (répertoires, options générales)
  • named.conf.local: sert pour la configuration de vos zones DNS locales
  • named.conf.default-zones: contient l’ensemble des zones par défaut du service

Dans notre cas, nous allons inclure de nouveaux fichiers dans le fichier named.conf.default-zones pour chacune des zones que nous allons créer.

Création d’une zone DNS Maître

Une zone DNS maître est une zone gérée directement par votre serveur DNS. Il servira d’autorité pour cette zone.

Avant toute chose, si votre serveur doit être contacté depuis internet, il est judicieux de rajouter l’option suivante dans le fichier /etc/bind/named.conf.options:

allow-query { any; };

Afin de créer cette zone, ouvrez le fichier named.conf.default-zones et ajoutez les lignes suivantes :

zone "company.com" {
        type master;
        file "/var/lib/bind/db.company.com";
};

Ces lignes permettent de créer la zone maître pour le domaine company.com et de définir le fichier db.company.com (convention de nommage db.) comme fichier de gestion des enregistrements pour la zone. Sous BSD il faudra placer le fichier dans /var/named/master pour les zones maîtres et /var/named/slave pour les zones slaves et de stub.

Afin d’autoriser les mises à jour dynamiques de votre DNS, il faudra rajouter la section allow-update dans la zone, et la liste d’adresses des serveurs DHCP qui vont mettre à jour les enregistrements.

zone "company.com" {
        type master;
        file "/var/lib/bind/db.company.com";
        allow-update { 10.1.2.3; 14.65.9.4; }
};

Ensuite, pour que vos mises à jours dynamiques fonctionnent, assurez vous d’appliquer les droits de bind sur le répertoire.

chown bind:bind -R /var/lib/bind

Maintenant étudions un fichier de zone correspondant à notre exemple.

$TTL 3600
$ORIGIN company.com.
@ IN SOA dns.company.com. hostmaster.company.com. (
    2011050600           ; serial number
    86400          ; refresh
    3600          ; retry
    864000        ; expire
    3600       ) ; default TTL

;
;  Zone NS records
;

@                       NS      dns.company.com.

;
;  Zone records
;

dns                  A       192.168.15.3
dns2                 A       192.168.15.80
gateway              A       192.168.15.99
serv1                A       192.168.15.4
mail                 MX  10  192.168.15.1
serv2                AAAA    fe80::225:d3ff:ff37:4fa9
comptaserv           CNAME   serv1.company.com.
webserver            IN   A  88.100.45.2

;
;  Delegated sub-zone:  deleg.company.com
;
deleg                NS      dns2.company.com.
;  End delegation

Expliquons maintenant l’ensemble de ce fichier.

$TTL 3600

Définit le TTL par défaut pour les records situés après cette ligne

$ORIGIN company.com.

Définit que les records suivant cette ligne sont situés relativement dans cette zone.

IN SOA dns.company.com. définit dns.company.com comme autorité principale sur la zone précédemment créée.

hostmaster.company.com. est l’adresse mail (en remplaçant le @ par un .) du gestionnaire de la zone.

Dans cette section sont définies plusieurs variables :

  • 2011050500 est le numéro de série de la zone. Elle suit la convention YYYYMMDD + numéro de version (00-99) à incrémenter à chaque nouvelle modification.
  • 86400 (refresh), durée après laquelle un esclave ira rafraîchir les informations sur la zone auprès du DNS maître
  • 3600 (retry), intervalle de temps durant lequel un esclave attendra en cas d’échec du rafraîchissement.
  • 864000 (expire), durée après laquelle un esclave considérera le maître ne faisant plus autorité sur la zone (n’arrive plus à contacter le serveur maître)
  • 3600 (TTL) : le temps durant lequel un client ne fera pas de requête DNS afin de résoudre un nom (ceci peut varier suivant les OS)

Détaillons maintenant les champs suivants, correspondant aux enregistrements DNS de la zone.

@                    NS      dns.company.com.

Définit dns.company.com comme DNS de la zone. Le @ indique la racine de la zone. Vous pouvez ajouter des champs si plusieurs DNS distribuent la zone (failover).

serv1                A       192.168.15.13

Un enregistrement de type A définit le lien entre une adresse IP et un nom. Ici serv1.company.com sera redirigé vers l’adresse 192.168.15.13.

serv2                AAAA      fe80::225:d3ff:ff37:4fa9

Un enregistrement de type AAAA définit le lien entre une adresse IPv6 et un nom.

comptaserv           CNAME       serv1.company.com.

Un enregistrement de type CNAME est un alias vers une autre adresse DNS.

mail                 MX   10  192.168.15.1

Un enregistrement de type MX définit un serveur de messagerie. Il doit être accompagné d’un enregistrement de type A. LA valeur 10 définit la priorité du serveur. Plus la valeur est basse plus il est prioritaire.

webserver            IN   A       88.100.45.2

Ceci définit un enregistrement de type A mais aussi IN, autrement dit un enregistrement de type A distribué sur internet. Le mot clé IN doit être définit dès qu’un enregistrement possède une adresse IP publique.

deleg                NS      dns2.company.com.

Définir un enregistrement NS sur un nom permet de déléguer une zone à un autre serveur DNS. Ceci veut dire que la zone deleg.company.com. sera dirigée par dns2.company.com qui contiendra l’ensemble des domaines de deleg.company.com. Création d’une zone DNS esclave

Création d’une zone esclave

Une zone DNS esclave est une zone gérée par un autre serveur DNS.

Déclarer un serveur DNS esclave permet d’accéler les transactions au sein des noeuds de l’architecture DNS mondiale. Chaque serveur possédant un Refresh, il se peut qu’une zone distante ne soit mise à jour sur le DNS de niveau supérieure au vôtre que plusieurs jours après.

L’utilisation de ce genre de technique permet notamment dans le cas de grandes entreprises d’accélérer la mise à jour des DNS entre les différents pôles de l’entreprise sans passer par un noeud supérieur commun ou un serveur root. Voyons maintenant comment le mettre en place.

zone "us.company.com" {
  type slave;
  file "/var/lib/bind/db.company.com";
  masters {  13.4.0.23;   13.4.0.22; };
};

Cette déclaration définit que la zone us.company.com est disponible directement en interrogeant les serveurs 13.4.0.22 et 13.4.0.23, ce qui permettra d’accélérer la mise à jour des caches.

Il est nécessaire également d’ajouter dans le fichier named.conf.options la ligne suivante permettant au serveur esclave d’autoriser les notifications du maître afin qu’il mette à jour sa zone dynamiquement.

allow-notify { 124.36.25.1; };

Note: N’oubliez pas que l’esclave a besoin des droits d’écriture sur le répertoire /var/lib/bind.

Création d’une zone inversée

Une zone inversée sert à obtenir le(s) nom(s) associées à une adresse IP. Elle se configure via des enregistrements spéciaux, les PTR. Chaque zone inversée correspond à une classe d’adresse IP (A, B ou C). Créons tout d’abord une zone.

zone "16.20.172.in-addr.arpa" {
  type master;
  file "/var/lib/bind/db.company.com.inv";
};

Et son fichier associé :

$ORIGIN 16.20.172.in-addr.arpa.
@ IN SOA dns.company.com. root.company.com. ( 2011050500 86400 86400 2419200 604800 )

  NS dns.company.com.
1 PTR dns.company.com.
2 PTR dns2.company.com.
12 PTR serv1.company.com.

Chaque enregistrement permettra de définir pour une adresse IP quelle sera le nom renvoyé en résolution inverse. Expiration d’enregistrements

Si vous utilisez des enregistrements dynamiques, il se peut que votre DNS devienne pollué par des enregistrements anciens obsolètes. Une directive globale existe permettant de définir un temps maximum avant suppression des enregistrements: cleaning-interval.

Cette directive prend un entier en paramètre (nombre de minutes). 0 désactive la fonction (par défaut), 40320 est son maximum (28 jours).

cleaning-interval 10080;

Application des changements

Maintenant plus qu’à appliquer les changements sur le service

Sous Debian

service bind9 reload

Sous FreeBSD

service named reload

De manière générique, vous pouvez appeler l’outil de commande rndc

rndc reload