Rappel
On se passe de DNS en utilisant le fichier /etc/hosts de chaque machine. Dans ce cas, il faut renseigner la correspondance entre l’adresse IP et le nom de la machine manuellement. Valable pour un petit réseau, vous comprenez facilement que cela n’est pas utilisable avec un grand réseau, a fortiori Internet !
Sous GNU/Linux, il faut de toute façon mettre deux lignes dans le fichier /etc/hosts lorsque l’on implante un service DNS :
- La résolution de la zone locale.
- La propre résolution de la machine dans son domaine DNS d’appartenance (fortement conseillé pour un serveur).
Exemple :
# Fichier /etc/hosts sur le server 127.0.0.1 localhost.localdomain localhost 192.168.20.2 srvlan.maison.lan srvlan
Installation du DNS
- Installer le package Bind et ses dépendances par apt :
# apt-get install bind9
Configuration
Fichiers de configuration :
- /etc/bind/named.conf
- /etc/bind/named.conf.options
- /etc/bind/named.conf.local
Le fichier named.conf
On modifie le fichier général en ajoutant la directive allow-update et ainsi rendre impossible la mise à jour de la configuration par un tiers :
include "/etc/bind/named.conf.options"; include "/etc/bind/named.conf.local"; // Reference aux serveurs racines zone "." { type hint; file "/etc/bind/db.root"; }; // Zone locale zone "localhost" { type master; file "/etc/bind/db.local"; allow-update { none; }; }; zone "127.in-addr.arpa" { type master; file "/etc/bind/db.127"; allow-update { none; }; }; zone "0.in-addr.arpa" { type master; file "/etc/bind/db.0"; allow-update { none; }; }; zone "255.in-addr.arpa" { type master; file "/etc/bind/db.255"; allow-update { none; }; };
Le fichier named.conf.local
C’est dans ce fichier que l’on indique nos zones :
//include "/etc/bind/zones.rfc1918"; // Les zones zone "maison.lan" { type master; file "db.maison.lan"; allow-update { none; }; }; zone "20.168.192.in-addr.arpa" { type master; file "rev.maison.lan"; allow-update { none; }; };
Explications :
- L’emplacement des fichiers de zones se détermine à partir du répertoire de référence donné comme option /var/cache/bind avec la directive directory dans le fichier named.conf.options.
- L’instruction allow-update { none; }; n’autorise pas de mise à jour dynamique du DNS par d’autres machines.
Les fichiers de zones
Dans ces fichiers, le symbole @ (arobase) est un raccourci pour désigner le nom de la zone actuelle spécifié dans l’instruction zone du fichier /etc/bind/named.conf.local.
- Création du fichier de zone directe pour nos machines (/var/cache/bind/db.maison.lan)
; Fichier pour la résolution directe de notre zone $TTL 86400 @ IN SOA srvlan.maison.lan. root.maison.lan. ( 2008030901 ; serial 1W 1D 4W 1W ) @ IN NS srvlan.maison.lan. srvlan IN A 192.168.20.2 andromede IN A 192.168.20.10 phoenix IN A 192.168.20.11 srvdmz IN A 192.168.8.2
- Création du fichier pour la zone inverse (/var/cache/bind/rev.maison.lan)
; Fichier pour la résolution inverse de notre zone $TTL 86400 @ IN SOA srvlan.maison.lan. root.maison.lan. ( 2008030901 ; serial 1W 1D 4W 1W ) @ IN NS srvlan.maison.lan. 2 IN PTR srvlan.maison.lan. 10 IN PTR andromede.maison.lan. 11 IN PTR phoenix.maison.lan.
Le numéro de serie (serial) se compose de la date du jour du fichier lors de la rédaction de ces lignes, à “l’envers” et accolée à un numéro d’index de départ. Ce numéro sert pour les échanges avec un serveur secondaire.
- Pour que le daemon Bind puisse lire nos fichier de zone, on modifie leur groupe d’appartenance
# chgrp bind /var/cache/bind/*
Le fichier resolv.conf
- Modifier le fichier /etc/resolv.conf pour qu’il contienne les lignes suivantes :
search maison.lan nameserver 192.168.20.2 nameserver dns_de_votre_fai
Check et démarrage du service
- Lancer l’utilitaire de vérification named-checkconf (s’il ne retourne rien ,c’est ok) qui vérifie par défaut le fichier /etc/bind/named.conf.
- Lancer l’utilitaire de vérification named-checkzone sur les fichiers de zone :
# cd /var/cache/bind/ # named-checkzone -d maison.lan db.maison.lan loading "maison.lan" from "db.maison.lan" class "IN" zone maison.lan/IN: loaded serial 2008030901 OK
- Lancer le service :
# /etc/init.d/bind9 restart
- Vérifier les logs :
# cat /var/log/syslog | grep named Mar 9 18:07:50 srvlan named[2383]: exiting Mar 9 18:07:53 srvlan named[2476]: starting BIND 9.3.4 -u bind Mar 9 18:07:53 srvlan named[2476]: found 1 CPU, using 1 worker thread Mar 9 18:07:53 srvlan named[2476]: loading configuration from '/etc/bind/named.conf' Mar 9 18:07:53 srvlan named[2476]: listening on IPv4 interface lo, 127.0.0.1#53 Mar 9 18:07:53 srvlan named[2476]: listening on IPv4 interface eth0, 192.168.20.2#53 Mar 9 18:07:53 srvlan named[2476]: command channel listening on 127.0.0.1#953 Mar 9 18:07:53 srvlan named[2476]: zone 0.in-addr.arpa/IN: loaded serial 1 Mar 9 18:07:53 srvlan named[2476]: zone 127.in-addr.arpa/IN: loaded serial 1 Mar 9 18:07:53 srvlan named[2476]: zone 20.168.192.in-addr.arpa/IN: loaded serial 2008030901 Mar 9 18:07:53 srvlan named[2476]: zone 255.in-addr.arpa/IN: loaded serial 1 Mar 9 18:07:53 srvlan named[2476]: zone maison.lan/IN: loaded serial 2008030901 Mar 9 18:07:53 srvlan named[2476]: zone localhost/IN: loaded serial 1 Mar 9 18:07:53 srvlan named[2476]: running
Vérification plus approfondie
- La commande ci-dessous (package dnsutils) doit montrer les différentes questions au service DNS et les bonnes réponses pour les enregistrements conforme à vos fichiers de configuration :
# host -v srvlan.maison.lan Trying "srvlan.maison.lan" ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35591 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;srvlan.maison.lan. IN A ;; ANSWER SECTION: srvlan.maison.lan. 86400 IN A 192.168.20.2 ;; AUTHORITY SECTION: maison.lan. 86400 IN NS srvlan.maison.lan. Received 65 bytes from 192.168.20.2#53 in 6 ms Trying "srvlan.maison.lan" ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63209 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;srvlan.maison.lan. IN AAAA ;; AUTHORITY SECTION: maison.lan. 86400 IN SOA srvlan.maison.lan. root.maison.lan. 2008030901 604800 86400 2419200 604800 Received 76 bytes from 192.168.20.2#53 in 4 ms Trying "srvlan.maison.lan" ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64979 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;srvlan.maison.lan. IN MX ;; AUTHORITY SECTION: maison.lan. 86400 IN SOA srvlan.maison.lan. root.maison.lan. 2008030901 604800 86400 2419200 604800 Received 76 bytes from 192.168.20.2#53 in 4 ms
ou
# dig SOA maison.lan ; <<>> DiG 9.3.4 <<>> SOA maison.lan ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15634 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;maison.lan. IN SOA ;; ANSWER SECTION: maison.lan. 86400 IN SOA srvlan.maison.lan. root.maison.lan. 2008030901 604800 86400 2419200 604800 ;; AUTHORITY SECTION: maison.lan. 86400 IN NS srvlan.maison.lan. ;; ADDITIONAL SECTION: srvlan.maison.lan. 86400 IN A 192.168.20.2 ;; Query time: 7 msec ;; SERVER: 192.168.20.2#53(192.168.20.2) ;; WHEN: Sun Mar 9 18:25:46 2008 ;; MSG SIZE rcvd: 106
- Enfin, on peut vérifier la résolution avec un ping sur la zone locale et un ping vers l’extérieur :
# ping srvlan.maison.lan
et
# ping www.google.fr
Utiliser des DNS externes
Maintenant que notre DNS est opérationnel, il va falloir le rendre plus performant ! Actuellement, il s’occupe des résolutions de la zone maison.lan mais aussi des résolutions externes pour les machines du réseau et construit son cache en fonction. De façon à réduire sa charge de travail, on peut faire en sorte que cette seconde tâche soit dévolue au serveur DNS “supérieur”.
- Supprimer la référence au DNS externe dans le fichier /etc/resolv.conf :
search maison.lan nameserver 192.168.20.2
- Commenter les lignes ayant trait aux serveurs racines dans le fichier /etc/bind/named.conf pour ne plus les interroger :
// Reference aux serveurs racines //zone "." { // type hint; // file "/etc/bind/db.root"; //};
Le fichier named.conf.options
- Modifier les lignes suivantes dans le fichier /etc/bind/named.conf.options :
options { directory "/var/cache/bind"; // query-source address * port 53; forward only; forwarders { xxx.xxx.xxx.xxx; // dns1 de votre FAI xxx.xxx.xxx.xxx; // dns2 de votre FAI }; auth-nxdomain no; # conform to RFC1035 allow-recursion { localnets; }; };
- Positionner à no pour l’utilisation de resolv.conf dans le fichier /etc/default/bind9 :
RESOLVCONF=no
RESOLVCONF=no permet de ne pas se faire écraser notre configuration dans le /etc/resolv.conf par un DHCP par exemple.
- Relancer le service Bind :
# /etc/init.d/bind9 restart
Installer un DNS secondaire
Dans notre exemple, le serveur DNS secondaire s’intitule SRVDMZ et a pour IP 192.168.8.3. Il est en réseau avec le primaire sur son interface en 192.168.8.2
- Ajouter dans le fichier /etc/bind/named.conf.local la notification et l’autorisation pour le serveur secondaire de ce mettre à jour :
// Les zones zone "maison.lan" { type master; file "db.maison.lan"; allow-update { none; }; notify yes; allow-transfer { 192.168.8.3; }; }; zone "20.168.192.in-addr.arpa" { type master; file "rev.maison.lan"; allow-update { none; }; notify yes; allow-transfer { 192.168.8.3; }; };
- Modifier le fichier de zone /var/cache/bind/db.maison.lan pour ajouter le serveur secondaire (comme faisant autorité) :
@ IN NS srvdmz.maison.lan.
- Idem pour la zone inverse /var/cache/bind/rev.maison.lan :
@ IN NS srvdmz.maison.lan.
- Installer Bind sur le serveur de secours et modifier les fichiers de cette façon :
/etc/bind/named.conf.options
options { directory "/var/cache/bind"; query-source address * port 53; forward only; forwarders { 212.27.54.252; 212.27.53.252; }; auth-nxdomain no; # conform to RFC1035 allow-recursion { 192.168.8.0/24; 192.168.20.0/24; }; };
/etc/bind/named.conf
Ce fichier reste identique au serveur principal
/etc/bind/named.conf.local
// Les zones zone "maison.lan" { type slave; notify no; masters { 192.168.8.2; }; file "db.maison.lan"; }; zone "20.168.192.in-addr.arpa" { type slave; notify no; masters { 192.168.8.2; }; file "rev.maison.lan"; };
Pas de fichiers de zone à faire ici, puisqu’ils seront créés lors de la synchronisation avec le serveur primaire !
- Modifier le fichier /etc/resolv.conf :
nameserver 192.168.8.3
- Modifier le fichier /etc/hosts :
127.0.0.1 localhost.localdomain localhost 192.168.8.3 srvdmz.maison.lan srvdmz
- Relancer d’abord le serveur primaire puis le secondaire. Vérifier les logs !