LinuxPedia

Wiki libre et indépendant dédié à GNU-Linux et BSD.

Outils pour utilisateurs

Outils du site


bind

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.

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

  • 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

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

  • Relancer le service Bind :
# /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>

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

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

  • 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 !
bind.txt · Dernière modification: 2018/11/17 13:52 (modification externe)