Introduction
BIND9 vous permet de :
- Heberger vos propres zones DNS autoritaires
- Faire du primary + secondary (master/slave)
- Activer DNSSEC
- Servir des vues differentes selon le client (split-horizon)
- Faire de la recursion (souvent decouple aujourd'hui, prefere Unbound)
- Logger / monitorer en detail
⚠️ BIND est complexe et a un historique de failles. Pour de la pure recursion, prefere Unbound. Pour de l'autoritaire, BIND reste solide.
Prerequis
- VPS Debian / Ubuntu
- 2 IPs publiques (idealement 1 primary + 1 secondary chez un autre fournisseur)
- Acces root
- Domaine controle (delegation DNS pointee vers vos serveurs)
- Port 53 UDP/TCP ouvert
Etape 1 : Installation
sudo apt update
sudo apt install -y bind9 bind9utils bind9-doc dnsutils
named -v
Etape 2 : Configuration principale
/etc/bind/named.conf.options :
options {
directory "/var/cache/bind";
recursion no; # autoritaire seulement
allow-query { any; }; # autoritaire ouvert
auth-nxdomain no;
listen-on-v6 { any; };
listen-on { any; };
version "Not disclosed";
hostname "Not disclosed";
server-id "Not disclosed";
minimal-responses yes;
dnssec-validation auto;
# Anti-amplification
rate-limit {
responses-per-second 10;
window 5;
};
};
Etape 3 : Definir une zone
/etc/bind/named.conf.local :
zone "verycloud.fr" {
type primary;
file "/etc/bind/zones/db.verycloud.fr";
allow-transfer { 192.0.2.10; }; # IP du secondary
notify yes;
also-notify { 192.0.2.10; };
};
sudo mkdir -p /etc/bind/zones
Etape 4 : Fichier de zone
/etc/bind/zones/db.verycloud.fr :
$TTL 3600
@ IN SOA ns1.verycloud.fr. admin.verycloud.fr. (
2026051701 ; Serial (YYYYMMDDNN)
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ) ; Minimum TTL
; Name servers
@ IN NS ns1.verycloud.fr.
@ IN NS ns2.verycloud.fr.
; A records
@ IN A 192.0.2.1
www IN A 192.0.2.1
ns1 IN A 192.0.2.1
ns2 IN A 192.0.2.10
mail IN A 192.0.2.20
; AAAA records
@ IN AAAA 2001:db8::1
; MX records
@ IN MX 10 mail.verycloud.fr.
; TXT records
@ IN TXT "v=spf1 ip4:192.0.2.20 -all"
_dmarc IN TXT "v=DMARC1; p=reject; rua=mailto:[email protected]"
; CNAME records
ftp IN CNAME www.verycloud.fr.
blog IN CNAME www.verycloud.fr.
⚠️ N'oubliez pas le point final sur les FQDN ou il sera ajoute la zone derriere.
Etape 5 : Verifier la zone
sudo named-checkzone verycloud.fr /etc/bind/zones/db.verycloud.fr
Sortie :
zone verycloud.fr/IN: loaded serial 2026051701
OK
Verifier la config globale :
sudo named-checkconf
Etape 6 : Demarrer et tester
sudo systemctl restart bind9
sudo systemctl status bind9
Test local :
dig @127.0.0.1 verycloud.fr
dig @127.0.0.1 mail.verycloud.fr
dig @127.0.0.1 verycloud.fr MX
dig @127.0.0.1 verycloud.fr SOA
Test depuis externe (apres avoir change la delegation au registrar) :
dig @192.0.2.1 verycloud.fr
Etape 7 : Secondary (slave)
Sur le second serveur, meme installation. Dans named.conf.local :
zone "verycloud.fr" {
type secondary;
primaries { 192.0.2.1; };
file "/var/cache/bind/db.verycloud.fr";
allow-transfer { none; };
};
sudo systemctl restart bind9
Verifiez le transfert AXFR :
sudo journalctl -u bind9 | grep transfer
zone verycloud.fr/IN: transferred serial 2026051701
Etape 8 : TSIG (auth des transferts)
Pour eviter qu'un attaquant fasse un AXFR de votre zone :
Generer une cle TSIG :
tsig-keygen -a hmac-sha256 transfer-key > /etc/bind/transfer.key
/etc/bind/transfer.key :
key "transfer-key" {
algorithm hmac-sha256;
secret "abc123...";
};
Sur le primary, dans named.conf :
include "/etc/bind/transfer.key";
zone "verycloud.fr" {
type primary;
file "/etc/bind/zones/db.verycloud.fr";
allow-transfer { key "transfer-key"; };
};
Sur le secondary, copiez la cle et :
include "/etc/bind/transfer.key";
server 192.0.2.1 {
keys { "transfer-key"; };
};
Etape 9 : DNSSEC
Pour signer votre zone :
sudo mkdir /etc/bind/keys
cd /etc/bind/keys
sudo dnssec-keygen -a ECDSAP256SHA256 -n ZONE verycloud.fr
sudo dnssec-keygen -a ECDSAP256SHA256 -n ZONE -f KSK verycloud.fr
Cela genere :
- 1 ZSK (Zone Signing Key)
- 1 KSK (Key Signing Key)
Dans named.conf.local :
zone "verycloud.fr" {
type primary;
file "/etc/bind/zones/db.verycloud.fr";
dnssec-policy default;
inline-signing yes;
};
Restart :
sudo systemctl restart bind9
BIND signe la zone automatiquement. Recuperez le DS record a publier chez le registrar :
sudo dnssec-dsfromkey -a SHA-256 /etc/bind/keys/Kverycloud.fr.+013+12345.key
Publiez ce DS record chez votre registrar (OVH, Gandi, etc.).
Etape 10 : Views (split-horizon)
Servir des reponses differentes selon l'IP source :
acl "internal" { 192.168.0.0/16; 10.0.0.0/8; };
view "internal" {
match-clients { internal; };
recursion yes;
zone "verycloud.fr" {
type primary;
file "/etc/bind/zones/db.verycloud.fr.internal";
};
};
view "external" {
match-clients { any; };
recursion no;
zone "verycloud.fr" {
type primary;
file "/etc/bind/zones/db.verycloud.fr";
};
};
Internal voit dev.verycloud.fr -> 192.168.1.10, external voit dev.verycloud.fr -> 51.x.x.x.
Etape 11 : Logging detaille
logging {
channel queries_log {
file "/var/log/named/queries.log" versions 5 size 10m;
severity info;
print-time yes;
print-category yes;
print-severity yes;
};
channel security_log {
file "/var/log/named/security.log" versions 5 size 10m;
severity info;
};
category queries { queries_log; };
category security { security_log; };
category dnssec { security_log; };
};
sudo mkdir /var/log/named
sudo chown bind:bind /var/log/named
sudo systemctl restart bind9
Etape 12 : RNDC (controle a distance)
sudo rndc-confgen -a
sudo systemctl restart bind9
Commandes utiles :
sudo rndc status
sudo rndc reload # reload toutes les zones
sudo rndc reload verycloud.fr # reload une zone
sudo rndc reconfig # recharger named.conf
sudo rndc dumpdb -cache # dump du cache
sudo rndc stats # ecrit /var/cache/bind/named_stats.txt
sudo rndc flush # flush cache
sudo rndc querylog on # active query logging temporairement
Depannage
Zone ne charge pas
sudo named-checkzone verycloud.fr /etc/bind/zones/db.verycloud.fr
Souvent : serial non incremente, point final manquant, SOA mal forme.
"Server failed: SERVFAIL"
Probleme de signature DNSSEC. Verifiez les cles, regenerez si necessaire.
AXFR refuse
Verifiez allow-transfer et la cle TSIG.
dig @primary verycloud.fr AXFR -y transfer-key:abc123
Pas de propagation
Apres modification :
- Incrementez le serial dans le SOA
sudo rndc reload verycloud.fr- Verifiez le secondary transfert
- TTL : si vous avez mis 86400 il faut 24h max pour propager
"permission denied" sur le fichier de zone
sudo chown bind:bind /etc/bind/zones/db.verycloud.fr
sudo chmod 644 /etc/bind/zones/db.verycloud.fr
Et pour les zones signees :
sudo chown bind:bind /etc/bind/zones
sudo chmod 755 /etc/bind/zones
Commandes utiles
# Service
sudo systemctl status bind9
sudo systemctl restart bind9
# Verification
sudo named-checkconf
sudo named-checkzone verycloud.fr /etc/bind/zones/db.verycloud.fr
# Reload
sudo rndc reload
sudo rndc reload verycloud.fr
# Tests
dig @127.0.0.1 verycloud.fr
dig @ns1.verycloud.fr verycloud.fr SOA
dig +trace verycloud.fr # voir la chaine de delegation
dig +dnssec verycloud.fr # voir les signatures DNSSEC
# Stats
sudo rndc stats
cat /var/cache/bind/named_stats.txt
# Logs
sudo journalctl -u bind9 -f
sudo tail -f /var/log/named/queries.log
Conclusion
BIND9 vous donne :
- Serveur DNS autoritaire production-grade
- DNSSEC complet
- Replication primary/secondary
- Vues split-horizon
- Logging fin
Limites :
- Complexite, configuration verbeuse
- Historique de CVE, garder a jour
- Pour de la pure recursion, Unbound est plus simple
Pour aller plus loin :
- Pour de la prod simple, considerez PowerDNS (UI web, plus user-friendly)
- Pour DNS as a service, regardez NSD (autoritaire only, plus simple) ou hostez via Cloudflare/AWS Route 53
- Pour DDNS, regardez Knot DNS ou nsupdate
Ressources
- Documentation officielle : https://bind9.readthedocs.io
- ISC : https://www.isc.org/bind/
- DNSSEC : https://datatracker.ietf.org/doc/html/rfc4033
- Best practices : https://bind9.readthedocs.io/en/latest/best-practices.html


















