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