Outils pour utilisateurs

Outils du site


bind

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

bind [2014/05/09 18:55] (Version actuelle)
Ligne 1: Ligne 1:
 +====== 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 :
 +
 +<​code>#​ Fichier /etc/hosts sur le server
 +127.0.0.1 ​    ​localhost.localdomain ​    ​localhost
 +192.168.20.2 ​ srvlan.maison.lan ​        ​srvlan</​code>​
 +
 +====== Installation du DNS ======
 +
 +  * Installer le package **Bind** et ses dépendances par apt :
 +<​code>#​ apt-get install bind9</​code>​
 +
 +====== 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 :
 +
 +<​code>​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; };
 +};</​code>​
 +\\
 +==== Le fichier named.conf.local ====
 +
 +C'est dans ce fichier que l'on indique nos zones :
 +
 +<​code>//​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; };
 +};</​code>​
 +
 +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//​)
 +<​code>;​ 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</​code>​
 +
 +  * Création du fichier pour la zone inverse (///​var/​cache/​bind/​rev.maison.lan//​)
 +<​code>;​ 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.</​code>​
 +
 +<​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
 +<​code>#​ chgrp bind /​var/​cache/​bind/​*</​code>​
 +\\
 +==== Le fichier resolv.conf ====
 +
 +  * Modifier le fichier ///​etc/​resolv.conf//​ pour qu'il contienne les lignes suivantes :
 +<​code>​search maison.lan
 +nameserver 192.168.20.2
 +nameserver dns_de_votre_fai</​code>​
 +\\
 +====== 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 :
 +<​code>#​ 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</​code>​
 +  * Lancer le service :
 +<​code>#​ /​etc/​init.d/​bind9 restart</​code>​
 +  * Vérifier les logs :
 +<​code>#​ 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</​code>​
 +\\
 +====== 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 :
 +
 +<​code>#​ 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</​code>​
 +\\
 +ou
 +\\
 +<​code>#​ 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</​code>​
 +
 +  * Enfin, on peut vérifier la résolution avec un ping sur la zone locale et un ping vers l'​extérieur :
 +<​code>#​ ping srvlan.maison.lan</​code>​
 +et
 +<​code>#​ ping www.google.fr</​code>​
 +\\
 +====== 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//​ :
 +<​code>​search maison.lan
 +nameserver 192.168.20.2</​code>​
 +  * Commenter les lignes ayant trait aux serveurs racines dans le fichier ///​etc/​bind/​named.conf//​ pour ne plus les interroger :
 +<​code>//​ Reference aux serveurs racines
 +//zone "​."​ {
 +//      type hint;
 +//      file "/​etc/​bind/​db.root";​
 +//​};</​code>​
 +\\
 +==== Le fichier named.conf.options ====
 +
 +  * Modifier les lignes suivantes dans le fichier ///​etc/​bind/​named.conf.options//​ :
 +<​code>​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; };
 +};</​code>​
 +  * Positionner à //no// pour l'​utilisation de //​resolv.conf//​ dans le fichier ///​etc/​default/​bind9//​ :
 +<​code>​RESOLVCONF=no</​code>​
 +<​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 :
 +<​code>#​ /​etc/​init.d/​bind9 restart</​code>​
 +\\
 +
 +
 +
 +====== 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 :
 +<​code>//​ 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;​ };
 +};</​code>​
 +
 +  * Modifier le fichier de zone ///​var/​cache/​bind/​db.maison.lan//​ pour ajouter le serveur secondaire (comme faisant autorité) :
 +<​code>​@ ​    ​IN ​    ​NS ​    ​srvdmz.maison.lan.</​code>​
 +  * Idem pour la zone inverse ///​var/​cache/​bind/​rev.maison.lan//​ :
 +<​code>​@ ​    ​IN ​    ​NS ​    ​srvdmz.maison.lan.</​code>​
 +  * Installer Bind sur le serveur de secours et modifier les fichiers de cette façon :
 +\\
 +///​etc/​bind/​named.conf.options//​
 +<​code>​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;​ };
 +};</​code>​
 +\\
 +///​etc/​bind/​named.conf//​
 +Ce fichier reste identique au serveur principal
 +\\
 +///​etc/​bind/​named.conf.local//​
 +<​code>//​ 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";​
 +};</​code>​
 +
 +<​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//​ :
 +<​code>​nameserver 192.168.8.3</​code>​
 +  * Modifier le fichier ///​etc/​hosts//​ :
 +<​code>​127.0.0.1 ​      ​localhost.localdomain ​  ​localhost
 +192.168.8.3 ​    ​srvdmz.maison.lan ​      ​srvdmz</​code>​
 +
 +  * Relancer d'​abord le serveur primaire puis le secondaire. Vérifier les logs !
  
bind.txt · Dernière modification: 2014/05/09 18:55 (modification externe)