Table des matières

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 :

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

# apt-get install bind9

Configuration

Fichiers de configuration :


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 :


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.

; 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
; 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.

<note>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.</note>

# chgrp bind /var/cache/bind/*


Le fichier resolv.conf

search maison.lan
nameserver 192.168.20.2
nameserver dns_de_votre_fai


Check et démarrage du service

# 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
# /etc/init.d/bind9 restart
# 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

# 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
# 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”.

search maison.lan
nameserver 192.168.20.2
// Reference aux serveurs racines
//zone "." {
//      type hint;
//      file "/etc/bind/db.root";
//};


Le fichier 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; };
};
RESOLVCONF=no

<note>RESOLVCONF=no permet de ne pas se faire écraser notre configuration dans le /etc/resolv.conf par un DHCP par exemple.</note>

# /etc/init.d/bind9 restart


Installer un DNS secondaire

<note>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</note>

// 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; };
};
@     IN     NS     srvdmz.maison.lan.
@     IN     NS     srvdmz.maison.lan.


/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";
};

<note>Pas de fichiers de zone à faire ici, puisqu'ils seront créés lors de la synchronisation avec le serveur primaire !</note>

nameserver 192.168.8.3
127.0.0.1       localhost.localdomain   localhost
192.168.8.3     srvdmz.maison.lan       srvdmz