Bind DNS server
| Fiche express | |
|---|---|
| Type | Déploiement BIND maître/esclave |
| Transferts de zone | TSIG (dnssec-keygen)
|
| DNS dynamique | nsupdate
|
| Outil de contrôle | rndc
|
| Voir aussi | Bind · Options bind · DNS client tools |
Cette page détaille un déploiement BIND à deux serveurs — un maître faisant
autorité en écriture et un esclave qui réplique par transfert de zone — avec
authentification des transferts par clé TSIG et une zone en DNS dynamique
(mise à jour via nsupdate plutôt que par édition manuelle du fichier de zone).
Pour une installation simple à zone unique, voir Bind.
Fonctionnalités couvertes
- Configuration maître/esclave (master/slave)
- Résolution inverse (reverse lookup)
- Délégation de sous-domaine
- ACLs (contrôle d'accès par client)
rndc(contrôle du démon à distance)- TSIG (authentification des transferts de zone et des mises à jour dynamiques)
- DNS dynamique (
nsupdate)
Installation (maître et esclave)
yum install bind
rpm -ql bind | grep etc # emplacements de configuration installés par le paquet
Les fichiers d'exemple fournis par le paquet peuvent servir de base :
cp -vr /usr/share/doc/bind-*/sample/etc/* /etc/
cp -vr /usr/share/doc/bind-*/sample/var/named/* /var/named/
Vérifier la synchronisation horaire entre les deux serveurs (NTP) — un décalage d'horloge excessif fait rejeter les signatures TSIG (basées sur un compteur temporel) :
yum install ntp
ntpdate pool.ntp.org
Génération de la clé TSIG
La clé TSIG authentifie les transferts de zone et les mises à jour dynamiques entre serveurs.
hmac-md5 est l'algorithme historique de cette procédure (RHEL5/6) ; sur un
déploiement récent, préférer hmac-sha256 (à vérifier selon la version de BIND
disponible — hmac-md5 reste supporté pour compatibilité mais n'est plus
recommandé).
mkdir /var/named/tmp && cd /var/named/tmp
dnssec-keygen -a hmac-md5 -b 256 -n USER shadow-dydns
dnssec-keygen -a hmac-md5 -b 256 -n USER shadow-slave
Chaque commande génère un fichier K<nom>.+157+<id>.private contenant le secret
(section Key:) à reporter dans les fichiers de clé ci-dessous.
# /etc/shadow-dydns-tsig.key
key shadow-dydns {
algorithm hmac-md5;
secret "REMPLACER_PAR_LA_CLE_GENEREE=";
};
# /etc/shadow-slave-tsig.key
key "shadow-slave"
{
algorithm hmac-md5;
secret "REMPLACER_PAR_LA_CLE_GENEREE=";
};
server 192.168.122.46
{
keys { shadow-slave; };
};
Ces clés sont des secrets : permissions restrictives et propriétaire named.
chown named:named /etc/shadow-slave-tsig.key /etc/shadow-dydns-tsig.key
chmod 640 /etc/shadow-slave-tsig.key /etc/shadow-dydns-tsig.key
Configuration du maître
# /etc/named.conf (maître)
acl restricted-clients {
192.168.122.1;
};
options
{
directory "/var/named";
dump-file "data/cache_dump.db";
statistics-file "data/named_stats.txt";
memstatistics-file "data/named_mem_stats.txt";
blackhole { restricted-clients; };
};
logging
{
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
include "/etc/shadow-slave-tsig.key";
include "/etc/shadow-dydns-tsig.key";
view "external"
{
match-clients { any; };
match-destinations { any; };
recursion yes; // à activer seulement si des sous-domaines sont délégués
zone "example.com" {
type master;
file "example.com.db";
allow-transfer { key shadow-slave; };
allow-update { none; };
};
zone "122.168.192.in-addr.arpa" IN
{
type master;
file "192.168.122.rev";
allow-update { none; };
};
zone "dyn.example.com" {
type master;
file "dyn.example.com.db";
allow-transfer { key shadow-slave; };
allow-update { key shadow-dydns; };
};
};
Fichier de zone du maître :
# /var/named/example.com.db
$TTL 86400
@ IN SOA ns1.example.com. root (
49 ; serial
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
IN NS ns1.example.com.
IN NS ns1.sub.example.com.
ns1 IN A 192.168.122.183
ns2 IN A 192.168.122.46
@ IN A 192.168.122.1
sub IN NS ns1.sub.example.com.
ns1.sub.example.com. IN A 192.168.122.46 ; glue record
# /var/named/dyn.example.com.db
$TTL 86400
@ IN SOA ns1.dyn.example.com. root.dyn.example.com. (
43 ; serial
10800 ; refresh (3h)
900 ; retry (15min)
604800 ; expire (1 semaine)
86400 ) ; minimum (1 jour)
IN NS ns1.dyn.example.com.
ns1 A 192.168.122.183
Droits et démarrage :
chown -R named:named /var/named/
chmod -R 770 /var/named/
systemctl restart named
dig +short @127.0.0.1 ns1.example.com
Configuration de l'esclave
# /etc/named.conf (esclave)
acl trusted-clients {
192.168.122.0/24; 127.0.0.0/8;
};
options
{
directory "/var/named";
dump-file "data/cache_dump.db";
statistics-file "data/named_stats.txt";
memstatistics-file "data/named_mem_stats.txt";
allow-query { trusted-clients; };
allow-recursion { trusted-clients; };
};
logging
{
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
include "/etc/shadow-slave-tsig.key";
include "/etc/rndc.key";
controls {
inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};
view "internal"
{
match-clients { localnets; };
match-destinations { localnets; };
recursion yes;
include "/etc/named.root.hints";
zone "dyn.example.com" {
type slave;
file "dyn.example.com.db";
masters { 192.168.122.183; };
};
zone "int.example.com" {
type master;
file "int.example.com.db";
allow-update { none; };
};
zone "example.com" {
type slave;
file "example.com.db";
masters { 192.168.122.183; };
};
zone "sub.example.com" {
type master;
file "sub.example.com.db";
allow-update { none; };
};
zone "122.168.192.in-addr.arpa" IN
{
type slave;
file "192.168.122.rev";
masters { 192.168.122.183; };
};
};
Zone inverse et sous-délégation locales à l'esclave :
# /var/named/192.168.122.rev
$TTL 86400
@ IN SOA ns1.example.com. root.ns1.example.com. (
1997022700 ; serial
28800 ; refresh
14400 ; retry
3600000 ; expire
86400 ) ; minimum
IN NS ns1.example.com.
183 IN PTR ns1.example.com.
# /var/named/sub.example.com.db
$TTL 86400
@ IN SOA ns1.sub.example.com. root (
42 ; serial
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
IN NS ns1.sub.example.com.
ns1 IN A 192.168.122.46
@ IN A 192.168.122.77
www IN A 192.168.122.240
* IN A 192.168.122.88
Clé rndc propre à l'esclave (contrôle local du démon, distincte de la clé TSIG de
transfert) :
rndc-confgen -a -b 256 -c /etc/rndc.key
Démarrage et vérification :
chown -R named:named /var/named/
chmod -R 770 /var/named/
chown named:named /etc/named.root.hints
systemctl restart named
dig @127.0.0.1 +short ns1.example.com
dig @127.0.0.1 +short ns2.example.com
dig @127.0.0.1 +short printer.int.example.com
Ajout d'un enregistrement (côté maître)
echo "www IN A 192.168.122.100" >> /var/named/example.com.db
# éditer example.com.db pour incrémenter le numéro de serial, puis :
systemctl restart named
dig +short @127.0.0.1 www.example.com
Une fois la zone modifiée, l'esclave ne récupère pas la mise à jour immédiatement — forcer un
rafraîchissement plutôt que d'attendre l'expiration du refresh défini dans le SOA :
rndc refresh example.com
dig +short @127.0.0.1 www.example.com
Mise à jour dynamique (nsupdate)
Ajout d'un enregistrement dans la zone dynamique, authentifié par la clé TSIG dédiée :
echo "nameserver 127.0.0.1" > /etc/resolv.conf
nsupdate -k Kshadow-dydns.+157+43416.private
> server ns1.example.com
> update add host1.dyn.example.com 3600 A 192.168.122.150
> send
> quit
dig +short host1.dyn.example.com
Vérification côté esclave (le transfert de la zone dynamique suit le même mécanisme de rafraîchissement forcé que pour une mise à jour manuelle) :
dig +short @127.0.0.1 host1.dyn.example.com
rndc refresh dyn.example.com
dig +short @127.0.0.1 host1.dyn.example.com
Pièges courants
rndcsans configuration : si/etc/rndc.confa été créé vide
(par exemple avectouchpar erreur),rndcéchoue avecno server specified and no default— supprimer le fichier vide plutôt que de le laisser masquer la configuration par défaut générée parrndc-confgen.
- Horloge désynchronisée entre maître et esclave : les signatures TSIG intègrent un
timestamp, un écart de quelques minutes suffit à faire échouer authentification et transferts — vérifier NTP en premier en cas de refus de transfert inexpliqué.
- Serial oublié : sans incrément du
serialaprès modification d'un fichier
de zone statique, l'esclave ne détecte aucun changement au prochain refresh.
Voir aussi
- Bind — présentation générale, installation, configuration à zone unique
- Options bind — panorama des paquets et options de configuration
- DNS client tools — tester un transfert de zone AXFR avec la clé TSIG mise en place ici
- Bind rsyslog — journalisation dédiée de
named