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.
Installez simplement le paquet bind9 de la manière suivante sous Debian:
apt-get install bind9
Sous FreeBSD:
pkg install bind99
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 :
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.
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 :
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
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.
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;
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