Bind9 est une implémentation Open Source des protocoles DNS (Domain Name System) pour l’Internet, sous licence Mozilla Public License 2.0, née au début des années 80 et destinée principalement aux systèmes UNIX. Bind9 signifie Berkeley Internet Name Domain version 9 car le projet a été initié à l’Université de Californie à Berkeley (UCB). Ce projet est actuellement développé par l’Internet Systems Consortium (ISC) et la version 9 date de 2000.
Objectif
L’objectif de cet article est l’installation et la configuration d’un serveur DNS secondaire, ou slave, utilisant l’implémentation Bind9, sur une distribution Linux Debian Jessie 8.4 32bits.
Schéma logique

Le serveur DNS slave consulte le serveur DNS master en comparant le serial de son SOA (pour les zones déclarées) avec ce dernier.
Si son serial est inférieur, le slave demande un transfert de zones au serveur primaire, en TCP sur le port 53.
Ceci fait, le slave dispose d’enregistrements de zones à jour.
Un client DNS peut donc requêter le slave (en UDP sur le port 53) et recevoir des données cohérentes.
Pré-requis
1. Pré-requis avant réalisation
- Un serveur Debian Jessie 8.4 32 bits fonctionnel (installation basique avec utilitaires usuels du système et service SSH) qui hébergera le service DNS secondaire ou slave
- Packages de base supplémentaires : sudo, resolvconf, aptitude
- Domaine utilisé : opensharing.priv
2. Configuration réseau initiale
Serveur DNS Slave | |
FQDN | dns2-test.opensharing.priv |
Adresse IP | 192.168.1.12 |
Réseau | 192.168.1.0/24 |
Passerelle | 192.168.1.1 |
dns-nameservers | 192.168.1.11 127.0.0.1 |
dns-search | opensharing.priv |
Contenu initial du fichier /etc/network/interfaces :
auto lo iface lo inet loopback allow-hotplug eth0 iface eth0 inet static address 192.168.1.12 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 gateway 192.168.1.1 dns-search opensharing.priv dns-nameservers 192.168.1.11 127.0.0.1
Contenu initial du fichier /etc/hosts :
127.0.0.1 localhost.localdomain localhost 192.168.1.12 dns2-test.opensharing.priv dns2-test
Rmq : L’adresse 127.0.1.1 doit être retirée sur un serveur à IP fixe et remplacée par cette dernière, tel que l’exemple ci-dessus.
Contenu initial du fichier /etc/host.conf :
order hosts, bind multi on
Contenu initial du fichier /etc/resolv.conf :
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN nameserver 192.168.1.11 nameserver 127.0.0.1 search opensharing.priv
Rmq :
Le fichier /etc/resolv.conf ne doit pas être édité dès lors que le paquet resolvconf a été installé.
Pour prendre en compte les modifications des fichiers de configuration relatifs au réseau, redémarrage du service réseau :
# /etc/init.d/networking restart
Réalisation
0. Mise à jour préalable du système et des paquets installés
# aptitude update # aptitude upgrade
1. Installation des packages sur le serveur DNS slave
# aptitude install bind9 bind9-doc
2. Configuration du serveur DNS master
2.1. Fichier /etc/bind/named.conf.local
zone "opensharing.priv" IN { type master; file "/var/cache/bind/db.opensharing.priv"; allow-update { localhost; }; allow-transfer { localhost; 192.168.1.12; }; notify yes; }; zone "1.168.192.in-addr.arpa" IN { type master; file "/var/cache/bind/db.opensharing.priv.inv"; allow-update { localhost; }; allow-transfer { localhost; 192.168.1.12; }; notify yes; };
Le serveur primaire est désigné comme master pour les deux zones.
On autorise le transfert de zones seulement depuis le slave (192.168.1.12) et depuis lui-même (pour tester le transfert avec dig axfr en local).
Les notifications sont activées et seront envoyées, par défaut, aux serveurs de noms NS définis dans les fichiers de zones pour leur signifier une modification de ces derniers.
2.2. Fichier /etc/bind/named.conf.options
options { directory "/var/cache/bind"; };
On retrouve le même fichier pour le slave.
C’est le fichier automatiquement créé à l’installation de Bind9, épuré de quelques options inutiles pour le moment.
Par défaut, l’écoute se fait sur toutes les interfaces et sur le port 53.
2.3. Fichier /var/cache/bind/db.opensharing.priv
$ORIGIN opensharing.priv. $TTL 86400 @ IN SOA dns1-test.opensharing.priv. adminsys.opensharing.priv. ( 2016060501 ; serial 21600 ; refresh 6h 3600 ; retry 1h 604800 ; expire 1 week 86400 ) ; minimum TTL 1 day IN NS dns1-test.opensharing.priv. IN NS dns2-test.opensharing.priv. IN MX 10 mail1-test.opensharing.priv. IN MX 20 mail2-test.opensharing.priv. IN A 192.168.1.14 dns1-test IN A 192.168.1.11 dns2-test IN A 192.168.1.12 opsi-test IN A 192.168.1.13 wp-test IN A 192.168.1.14 mail1-test IN A 192.168.1.15 mail2-test IN A 192.168.1.16 dns1 IN CNAME dns1-test dns2 IN CNAME dns2-test dhcp1 IN CNAME dns1-test mail1 IN CNAME mail1-test mail2 IN CNAME mail2-test www IN CNAME wp-test opsi IN CNAME opsi-test
Fichier /var/cache/bind/db.opensharing.priv.inv
$ORIGIN 1.168.192.in-addr.arpa. $TTL 86400 @ IN SOA dns1-test.opensharing.priv. adminsys.opensharing.priv. ( 2016060501 ; serial 21600 ; refresh 6h 3600 ; retry 1h 604800 ; expire 1 week 86400 ) ; minimum TTL 1 day IN NS dns1-test.opensharing.priv. IN NS dns2-test.opensharing.priv. 11 IN PTR dns1-test.opensharing.priv. 12 IN PTR dns2-test.opensharing.priv. 11 IN PTR dhcp1.opensharing.priv. 11 IN PTR dns1.opensharing.priv. 12 IN PTR dns2.opensharing.priv. 13 IN PTR opsi.opensharing.priv. 14 IN PTR www.opensharing.priv. 15 IN PTR mail1.opensharing.priv. 16 IN PTR mail2.opensharing.priv.
3. Configuration du serveur DNS slave
3.1. Fichier /etc/bind/named.conf.local
zone "opensharing.priv" IN { type slave; masters { 192.168.1.11; }; file "/var/cache/bind/db.opensharing.priv.slv"; allow-transfer { localhost; }; notify no; }; zone "1.168.192.in-addr.arpa" IN { type slave; masters { 192.168.1.11; }; file "/var/cache/bind/db.opensharing.priv.inv.slv"; allow-transfer { localhost; }; notify no; };
Le serveur est défini comme slave pour les deux zones et n’a pas besoin d’envoyer de notifications puisque seules celles du master importent.
Le DNS master est, quant à lui, défini comme master de celles-ci.
3.2. Redémarrage du service Bind9 et analyse des logs
Sur le serveur DNS slave :
# /etc/init.d/bind9 restart
# tail -f /var/log/syslog
Jun 17 14:26:58 dns2-test named[2557]: zone opensharing.priv/IN: Transfer started. Jun 17 14:26:58 dns2-test named[2557]: transfer of 'opensharing.priv/IN' from 192.168.1.11#53: connected using 192.168.1.12#49915 Jun 17 14:26:58 dns2-test named[2557]: zone opensharing.priv/IN: transferred serial 2016060501 Jun 17 14:26:58 dns2-test named[2557]: transfer of 'opensharing.priv/IN' from 192.168.1.11#53: Transfer completed: 1 messages, 20 records, 482 bytes, 0.001 secs (482000 bytes/sec) Jun 17 14:26:58 dns2-test named[2557]: zone opensharing.priv/IN: sending notifies (serial 2016060501) Jun 17 14:26:58 dns2-test named[2557]: zone 1.168.192.in-addr.arpa/IN: Transfer started. Jun 17 14:26:58 dns2-test named[2557]: transfer of '1.168.192.in-addr.arpa/IN' from 192.168.1.11#53: connected using 192.168.1.12#59960 Jun 17 14:26:58 dns2-test named[2557]: zone 1.168.192.in-addr.arpa/IN: transferred serial 2016060501 Jun 17 14:26:58 dns2-test named[2557]: transfer of '1.168.192.in-addr.arpa/IN' from 192.168.1.11#53: Transfer completed: 1 messages, 12 records, 352 bytes, 0.001 secs (352000 bytes/sec) Jun 17 14:26:58 dns2-test named[2557]: zone 1.168.192.in-addr.arpa/IN: sending notifies (serial 2016060501)
Sur le serveur DNS master au même moment :
# tail -f /var/log/syslog
Jun 17 14:26:58 dns1-test named[2215]: client 192.168.1.12#49915 (opensharing.priv): transfer of 'opensharing.priv/IN': AXFR started Jun 17 14:26:58 dns1-test named[2215]: client 192.168.1.12#49915 (opensharing.priv): transfer of 'opensharing.priv/IN': AXFR ended Jun 17 14:26:58 dns1-test named[2215]: client 192.168.1.12#59960 (1.168.192.in-addr.arpa): transfer of '1.168.192.in-addr.arpa/IN': AXFR started Jun 17 14:26:58 dns1-test named[2215]: client 192.168.1.12#59960 (1.168.192.in-addr.arpa): transfer of '1.168.192.in-addr.arpa/IN': AXFR ended
Le transfert des deux zones a bien été effectué, initié par le slave.
3.3. Arborescence du dossier /var/cache/bind
Suite au redémarrage du service Bind9 sur le serveur slave, le dossier /var/cache/bind contient :
-rw-r--r-- 1 bind bind 720 juin 17 14:24 managed-keys.bind -rw-r--r-- 1 bind bind 1222 juin 17 14:26 db.opensharing.priv.slv -rw-r--r-- 1 bind bind 738 juin 17 14:26 db.opensharing.priv.inv.slv
Nos deux fichiers de zones ont ainsi été créés et peuplés des enregistrements du serveur master comme le montre la commande dig exécutée sur le slave :
# dig @127.0.0.1 opensharing.priv AXFR ; <<>> DiG 9.9.5-9+deb8u6-Debian <<>> @127.0.0.1 opensharing.priv AXFR ; (1 server found) ;; global options: +cmd opensharing.priv. 86400 IN SOA dns1-test.opensharing.priv. adminsys.opensharing.priv. 2016060501 21600 3600 604800 86400 opensharing.priv. 86400 IN A 192.168.1.14 opensharing.priv. 86400 IN MX 10 mail1-test.opensharing.priv. opensharing.priv. 86400 IN MX 20 mail2-test.opensharing.priv. opensharing.priv. 86400 IN NS dns1-test.opensharing.priv. opensharing.priv. 86400 IN NS dns2-test.opensharing.priv. dhcp1.opensharing.priv. 86400 IN CNAME dns1-test.opensharing.priv. dns1.opensharing.priv. 86400 IN CNAME dns1-test.opensharing.priv. dns1-test.opensharing.priv. 86400 IN A 192.168.1.11 dns2.opensharing.priv. 86400 IN CNAME dns2-test.opensharing.priv. dns2-test.opensharing.priv. 86400 IN A 192.168.1.12 mail1.opensharing.priv. 86400 IN CNAME mail1-test.opensharing.priv. mail1-test.opensharing.priv. 86400 IN A 192.168.1.15 mail2.opensharing.priv. 86400 IN CNAME mail2-test.opensharing.priv. mail2-test.opensharing.priv. 86400 IN A 192.168.1.16 opsi.opensharing.priv. 86400 IN CNAME opsi-test.opensharing.priv. opsi-test.opensharing.priv. 86400 IN A 192.168.1.13 wp-test.opensharing.priv. 86400 IN A 192.168.1.14 www.opensharing.priv. 86400 IN CNAME wp-test.opensharing.priv. opensharing.priv. 86400 IN SOA dns1-test.opensharing.priv. adminsys.opensharing.priv. 2016060501 21600 3600 604800 86400 ;; Query time: 6 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Fri Jun 17 16:10:31 CEST 2016 ;; XFR size: 20 records (messages 1, bytes 482)
Ou encore :
# dig @127.0.0.1 1.168.192.in-addr.arpa AXFR ; <<>> DiG 9.9.5-9+deb8u6-Debian <<>> @127.0.0.1 1.168.192.in-addr.arpa AXFR ; (1 server found) ;; global options: +cmd 1.168.192.in-addr.arpa. 86400 IN SOA dns1-test.opensharing.priv. adminsys.opensharing.priv. 2016060501 21600 3600 604800 86400 1.168.192.in-addr.arpa. 86400 IN NS dns1-test.opensharing.priv. 1.168.192.in-addr.arpa. 86400 IN NS dns2-test.opensharing.priv. 11.1.168.192.in-addr.arpa. 86400 IN PTR dns1.opensharing.priv. 11.1.168.192.in-addr.arpa. 86400 IN PTR dhcp1.opensharing.priv. 11.1.168.192.in-addr.arpa. 86400 IN PTR dns1-test.opensharing.priv. 12.1.168.192.in-addr.arpa. 86400 IN PTR dns2.opensharing.priv. 12.1.168.192.in-addr.arpa. 86400 IN PTR dns2-test.opensharing.priv. 13.1.168.192.in-addr.arpa. 86400 IN PTR opsi.opensharing.priv. 14.1.168.192.in-addr.arpa. 86400 IN PTR www.opensharing.priv. 15.1.168.192.in-addr.arpa. 86400 IN PTR mail1.opensharing.priv. 16.1.168.192.in-addr.arpa. 86400 IN PTR mail2.opensharing.priv. 1.168.192.in-addr.arpa. 86400 IN SOA dns1-test.opensharing.priv. adminsys.opensharing.priv. 2016060501 21600 3600 604800 86400 ;; Query time: 3 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Fri Jun 17 16:10:47 CEST 2016 ;; XFR size: 12 records (messages 1, bytes 352)
La section Pour aller plus loin revient plus en détails sur les champs utilisés.
4. Test de transfert de zone initial du master vers le slave
Le serveur DNS master envoie des notifications au DNS slave à chaque fois que son service Bind9 est redémarré. De plus, à intervalle régulier, défini par la valeur time-to-refresh de la zone concernée, le slave effectue une vérification du serial du SOA sur le master.
Sur le master :
# /etc/init.d/bind9 restart
Sur le slave, au même moment :
Jun 17 16:32:29 dns2-test named[2766]: client 192.168.1.11#59216: received notify for zone 'opensharing.priv' Jun 17 16:32:29 dns2-test named[2766]: zone opensharing.priv/IN: notify from 192.168.1.11#59216: zone is up to date Jun 17 16:32:30 dns2-test named[2766]: client 192.168.1.11#40507: received notify for zone '1.168.192.in-addr.arpa' Jun 17 16:32:30 dns2-test named[2766]: zone 1.168.192.in-addr.arpa/IN: notify from 192.168.1.11#40507: zone is up to date
Le slave vérifie alors si le serial du SOA du master est supérieur au sien. Si c’est le cas, alors le slave fait une requête de transfert de zone pour mettre à jour sa base de données DNS. Si le fichier de zone du master est modifié mais que son SOA reste le même alors le slave ne recevra pas les mises à jour puisque c’est le SOA qui sert de référence.
Maintenant imaginons que nous modifiions un enregistrement de la zone opensharing.priv du master et son SOA avec la date du jour et la version, comme ceci :
Etat initial sur le master :
- serial 2016060501
- opsi-test 192.168.1.13
[...] 2016060501 ; serial [...] opsi-test IN A 192.168.1.13 [...] opsi IN CNAME opsi-test
Modification sur le master :
- serial 2016061901
- opsi-test 192.168.1.20
[...] 2016061901 ; serial [...] opsi-test IN A 192.168.1.20 [...] opsi IN CNAME opsi-test
Faisons de même pour la zone de recherche inversée 1.168.192.in-addr.arpa, sur le master :
Etat initial sur le master :
- serial 2016060501
- 192.168.1.13 opsi
[...] 2016060501 ; serial [...] 13 IN PTR opsi.opensharing.priv. [...]
Modification sur le master :
- serial 2016061901
- 192.168.1.20 opsi
[...] 2016061901 ; serial [...] 20 IN PTR opsi.opensharing.priv. [...]
Puis redémarrage du service Bind9 sur le master :
# /etc/init.d/bind9 restart
On observe alors le transfert de zone initié par la notification du master :
Jun 19 18:32:41 dns1-test named[3024]: zone opensharing.priv/IN: sending notifies (serial 2016061901) Jun 19 18:32:41 dns1-test named[3024]: zone 1.168.192.in-addr.arpa/IN: sending notifies (serial 2016061901) Jun 19 18:32:41 dns1-test named[3024]: client 192.168.1.12#35208 (opensharing.priv): transfer of 'opensharing.priv/IN': AXFR-style IXFR started Jun 19 18:32:41 dns1-test named[3024]: client 192.168.1.12#35208 (opensharing.priv): transfer of 'opensharing.priv/IN': AXFR-style IXFR ended Jun 19 18:32:41 dns1-test named[3024]: client 192.168.1.12#57637 (1.168.192.in-addr.arpa): transfer of '1.168.192.in-addr.arpa/IN': AXFR-style IXFR started Jun 19 18:32:41 dns1-test named[3024]: client 192.168.1.12#57637 (1.168.192.in-addr.arpa): transfer of '1.168.192.in-addr.arpa/IN': AXFR-style IXFR ended
Et, au même moment, sur le slave :
Jun 19 18:32:41 dns2-test named[3248]: client 192.168.1.11#50759: received notify for zone 'opensharing.priv' Jun 19 18:32:41 dns2-test named[3248]: zone opensharing.priv/IN: Transfer started. Jun 19 18:32:41 dns2-test named[3248]: transfer of 'opensharing.priv/IN' from 192.168.1.11#53: connected using 192.168.1.12#35208 Jun 19 18:32:41 dns2-test named[3248]: zone opensharing.priv/IN: transferred serial 2016061901 Jun 19 18:32:41 dns2-test named[3248]: transfer of 'opensharing.priv/IN' from 192.168.1.11#53: Transfer completed: 1 messages, 20 records, 482 bytes, 0.002 secs (241000 bytes/sec) Jun 19 18:32:41 dns2-test named[3248]: zone opensharing.priv/IN: sending notifies (serial 2016061901) Jun 19 18:32:41 dns2-test named[3248]: client 192.168.1.11#46668: received notify for zone '1.168.192.in-addr.arpa' Jun 19 18:32:41 dns2-test named[3248]: zone 1.168.192.in-addr.arpa/IN: Transfer started. Jun 19 18:32:41 dns2-test named[3248]: transfer of '1.168.192.in-addr.arpa/IN' from 192.168.1.11#53: connected using 192.168.1.12#57637 Jun 19 18:32:41 dns2-test named[3248]: zone 1.168.192.in-addr.arpa/IN: transferred serial 2016061901 Jun 19 18:32:41 dns2-test named[3248]: transfer of '1.168.192.in-addr.arpa/IN' from 192.168.1.11#53: Transfer completed: 1 messages, 12 records, 352 bytes, 0.001 secs (352000 bytes/sec) Jun 19 18:32:41 dns2-test named[3248]: zone 1.168.192.in-addr.arpa/IN: sending notifies (serial 2016061901)
Vérification sur le slave avec un dig synthétique :
# dig @127.0.0.1 opsi.opensharing.priv +short
opsi-test.opensharing.priv.
192.168.1.20
# dig @127.0.0.1 -x 192.168.1.20 +short
opsi.opensharing.priv.
La section Pour aller plus loin revient plus en détails sur les champs utilisés.
Pour aller plus loin
PAPL01
Affichage des fichiers de zones répliqués sur le slave
Les fichiers zones répliqués sur le slave sont au format binaire RAW, contrairement au master où ils sont au format texte.
# cd /var/cache/bind/
# file db.opensharing.priv.slv db.opensharing.priv.inv.slv
db.opensharing.priv.slv: data
db.opensharing.priv.inv.slv: data
Ceci a pour but d’améliorer les performances. En contrepartie, les données qu’ils contiennent ne sont pas lisibles.
# cat db.opensharing.priv.slv Wg�msQ� opensharingprivK dns1-test opensharingpriadminsys opensharingprivx*��T` :�Q�,Q� opensharingpriv��hQ� opensharingpriv
Ou alors il faut effectuer un transfert de zone en local avec la commande dig :
# dig axfr @127.0.0.1 opensharing.priv ; <<>> DiG 9.9.5-9+deb8u6-Debian <<>> axfr @127.0.0.1 opensharing.priv ; (1 server found) ;; global options: +cmd opensharing.priv. 86400 IN SOA dns1-test.opensharing.priv. adminsys.opensharing.priv. 2016061906 21600 3600 604800 86400 opensharing.priv. 86400 IN A 192.168.1.14 opensharing.priv. 86400 IN MX 10 mail1-test.opensharing.priv. opensharing.priv. 86400 IN MX 20 mail2-test.opensharing.priv. opensharing.priv. 86400 IN NS dns1-test.opensharing.priv. opensharing.priv. 86400 IN NS dns2-test.opensharing.priv. dhcp1.opensharing.priv. 86400 IN CNAME dns1-test.opensharing.priv. dns1.opensharing.priv. 86400 IN CNAME dns1-test.opensharing.priv. dns1-test.opensharing.priv. 86400 IN A 192.168.1.11 dns2.opensharing.priv. 86400 IN CNAME dns2-test.opensharing.priv. dns2-test.opensharing.priv. 86400 IN A 192.168.1.12 mail1.opensharing.priv. 86400 IN CNAME mail1-test.opensharing.priv. mail1-test.opensharing.priv. 86400 IN A 192.168.1.15 mail2.opensharing.priv. 86400 IN CNAME mail2-test.opensharing.priv. mail2-test.opensharing.priv. 86400 IN A 192.168.1.16 opsi.opensharing.priv. 86400 IN CNAME opsi-test.opensharing.priv. opsi-test.opensharing.priv. 86400 IN A 192.168.1.13 wp-test.opensharing.priv. 86400 IN A 192.168.1.14 www.opensharing.priv. 86400 IN CNAME wp-test.opensharing.priv. opensharing.priv. 86400 IN SOA dns1-test.opensharing.priv. adminsys.opensharing.priv. 2016061906 21600 3600 604800 86400 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Mon Jun 20 12:51:49 CEST 2016 ;; XFR size: 20 records (messages 1, bytes 482)
Une autre possibilité existe : convertir le fichier RAW en fichier TXT lisible :
# named-compilezone -f input-format -F output-format -o output-file zone-name input-file
Si output-file = – alors la sortie se fera sur la sortie standard (stdout)
# named-compilezone -f raw -F text -o db.opensharing.priv.slv.text opensharing.priv db.opensharing.priv.slv
zone opensharing.priv/IN: loaded serial 2016061906
dump zone to db.opensharing.priv.slv.text...done
OK
# file db.opensharing.priv.slv.text db.opensharing.priv.slv.text: ASCII text # cat db.opensharing.priv.slv.text opensharing.priv. 86400 IN SOA dns1-test.opensharing.priv. adminsys.opensharing.priv. 2016061906 21600 3600 604800 86400 opensharing.priv. 86400 IN NS dns1-test.opensharing.priv. opensharing.priv. 86400 IN NS dns2-test.opensharing.priv. opensharing.priv. 86400 IN A 192.168.1.14 opensharing.priv. 86400 IN MX 10 mail1-test.opensharing.priv. opensharing.priv. 86400 IN MX 20 mail2-test.opensharing.priv. dhcp1.opensharing.priv. 86400 IN CNAME dns1-test.opensharing.priv. dns1.opensharing.priv. 86400 IN CNAME dns1-test.opensharing.priv. dns1-test.opensharing.priv. 86400 IN A 192.168.1.11 dns2.opensharing.priv. 86400 IN CNAME dns2-test.opensharing.priv. dns2-test.opensharing.priv. 86400 IN A 192.168.1.12 mail1.opensharing.priv. 86400 IN CNAME mail1-test.opensharing.priv. mail1-test.opensharing.priv. 86400 IN A 192.168.1.15 mail2.opensharing.priv. 86400 IN CNAME mail2-test.opensharing.priv. mail2-test.opensharing.priv. 86400 IN A 192.168.1.16 opsi.opensharing.priv. 86400 IN CNAME opsi-test.opensharing.priv. opsi-test.opensharing.priv. 86400 IN A 192.168.1.13 wp-test.opensharing.priv. 86400 IN A 192.168.1.14 www.opensharing.priv. 86400 IN CNAME wp-test.opensharing.priv.
Si, pour une raison particulière, on préfère avoir directement des fichiers zone répliqués au format TXT plutôt que RAW, on peut le spécifier sur le slave, dans le fichier /etc/bind/named.conf.local :
zone "opensharing.priv" IN { type slave; masters { 192.168.1.11; }; file "/var/cache/bind/db.opensharing.priv.slv"; allow-transfer { localhost; }; masterfile-format text; }; zone "1.168.192.in-addr.arpa" IN { type slave; masters { 192.168.1.11; }; file "/var/cache/bind/db.opensharing.priv.inv.slv"; allow-transfer { localhost; }; masterfile-format text; };
Après une suppression des fichiers de zones répliqués et redémarrage du service bind9 sur le slave, un nouveau transfert de zones initiés par le slave se lance et on obtient deux fichiers de zones directement au format TXT lisible :
# rm db.opensharing.priv.* # /etc/init.d/bind9 restart [ ok ] Restarting bind9 (via systemctl): bind9.service. # file db.opensharing.priv.* db.opensharing.priv.inv.slv: ASCII text db.opensharing.priv.slv: ASCII text
PAPL02
Mise en place de la signature TSIG pour le transfert de zones
Rmq : La clef TSIG tsig-key doit au préalable avoir été générée et incluse dans les fichier /etc/bind/named.conf, comme cela a été montré dans la procédure précédente : ISC Bind9 – Serveur DNS primaire section PAPL.
Modification sur le slave :
On définit le lien entre le slave et le master : la clef TSIG, qui permettra de signer les requêtes de transferts de zones.
# nano /etc/bind/named.conf.options
options {
directory "/var/cache/bind";
};
server 192.168.1.11 {
keys { "tsig-key"; };
};
Modification sur le master :
Même chose que pour le slave, on définit la clef TSIG qui signera les transferts entre le master et le slave :
options {
directory "/var/cache/bind";
};
server 192.168.1.12 {
keys { "tsig-key"; };
};
Incrémentation du serial : il passe de 2016061901 à 2016061902
$ORIGIN opensharing.priv.
$TTL 86400
@ IN SOA dns1-test.opensharing.priv. adminsys.opensharing.priv. (
2016061902 ; serial
21600 ; refresh 6h
3600 ; retry 1h
604800 ; expire 1 week
86400 ) ; minimum TTL 1 day
Puis redémarrage du service Bind9 sur le master :
# /etc/init.d/bind9 restart
En suivant les logs sur le master, on observe :
Jun 19 19:35:05 dns1-test named[3696]: zone 1.168.192.in-addr.arpa/IN: sending notifies (serial 2016061902) Jun 19 19:35:05 dns1-test named[3696]: zone opensharing.priv/IN: sending notifies (serial 2016061902) Jun 19 19:35:05 dns1-test named[3696]: client 192.168.1.12#53432/key tsig-key (1.168.192.in-addr.arpa): transfer of '1.168.192.in-addr.arpa/IN': AXFR-style IXFR started: TSIG tsig-key Jun 19 19:35:05 dns1-test named[3696]: client 192.168.1.12#53432/key tsig-key (1.168.192.in-addr.arpa): transfer of '1.168.192.in-addr.arpa/IN': AXFR-style IXFR ended Jun 19 19:35:06 dns1-test named[3696]: client 192.168.1.12#57865/key tsig-key (opensharing.priv): transfer of 'opensharing.priv/IN': AXFR-style IXFR started: TSIG tsig-key Jun 19 19:35:06 dns1-test named[3696]: client 192.168.1.12#57865/key tsig-key (opensharing.priv): transfer of 'opensharing.priv/IN': AXFR-style IXFR ended
Et, au même moment, sur le slave :
Jun 19 19:35:05 dns2-test named[3787]: client 192.168.1.11#49681/key tsig-key: received notify for zone '1.168.192.in-addr.arpa': TSIG 'tsig-key' Jun 19 19:35:05 dns2-test named[3787]: zone 1.168.192.in-addr.arpa/IN: Transfer started. Jun 19 19:35:05 dns2-test named[3787]: transfer of '1.168.192.in-addr.arpa/IN' from 192.168.1.11#53: connected using 192.168.1.12#53432 Jun 19 19:35:05 dns2-test named[3787]: zone 1.168.192.in-addr.arpa/IN: transferred serial 2016061902: TSIG 'tsig-key' Jun 19 19:35:05 dns2-test named[3787]: transfer of '1.168.192.in-addr.arpa/IN' from 192.168.1.11#53: Transfer completed: 1 messages, 13 records, 444 bytes, 0.003 secs (148000 bytes/sec) Jun 19 19:35:05 dns2-test named[3787]: zone 1.168.192.in-addr.arpa/IN: sending notifies (serial 2016061902) Jun 19 19:35:06 dns2-test named[3787]: client 192.168.1.11#2464/key tsig-key: received notify for zone 'opensharing.priv': TSIG 'tsig-key' Jun 19 19:35:06 dns2-test named[3787]: zone opensharing.priv/IN: Transfer started. Jun 19 19:35:06 dns2-test named[3787]: transfer of 'opensharing.priv/IN' from 192.168.1.11#53: connected using 192.168.1.12#57865 Jun 19 19:35:06 dns2-test named[3787]: zone opensharing.priv/IN: transferred serial 2016061902: TSIG 'tsig-key' Jun 19 19:35:06 dns2-test named[3787]: transfer of 'opensharing.priv/IN' from 192.168.1.11#53: Transfer completed: 1 messages, 20 records, 560 bytes, 0.001 secs (560000 bytes/sec) Jun 19 19:35:06 dns2-test named[3787]: zone opensharing.priv/IN: sending notifies (serial 2016061902)
Le transfert de zones signé par la clef TSIG a bien été effectué. S’il avait échoué, nous aurions la mention REFUSED côté slave et denied côté master.
Jun 20 17:47:26 dns2-test named[1709]: zone opensharing.priv/IN: Transfer started. Jun 20 17:47:26 dns2-test named[1709]: transfer of 'opensharing.priv/IN' from 192.168.1.11#53: connected using 192.168.1.12#55019 Jun 20 17:47:26 dns2-test named[1709]: transfer of 'opensharing.priv/IN' from 192.168.1.11#53: failed while receiving responses: REFUSED Jun 20 17:47:26 dns2-test named[1709]: transfer of 'opensharing.priv/IN' from 192.168.1.11#53: Transfer completed: 0 messages, 0 records, 0 bytes, 0.001 secs (0 bytes/sec)
Jun 20 17:47:27 dns1-test named[1461]: client 192.168.1.12#55019 (opensharing.priv): zone transfer 'opensharing.priv/AXFR/IN' denied
Aller encore plus loin
Pour continuer à explorer la configuration de Bind9, voir les articles suivants :
Références
- IETF – RFC1034 – Domain Names – Concepts and Facilities
- IETF – RFC1035 – Domain Names – Implementation and Specification
- Internet Systems Consortium – ISC BIND Homepage
- ISC Bind9 – Administrator Reference Manual
- Zytrax – Bind9 – List of Statements
- Madboa.com – How to use dig to query DNS name servers
- nixCraft – Bind Security: Transaction Signatures (TSIG) Configuration