MDstable
NoteSnippetChecklistPlaybook

DNS — Configuration & Sécurisation

BIND9, Windows DNS Server, Cisco IOS DNS, zones, forwarders, split-horizon, DNSSEC

snippetintermediate 2026-05-14 4 min read
dnsbind9ciscowindowsdnssecsplit-horizonzone-transfernamed

BIND9 (Linux)

Installation et structure

bash
apt install bind9 bind9utils dnsutils
# Fichiers clés
/etc/bind/named.conf # config principale
/etc/bind/named.conf.options # options globales
/etc/bind/named.conf.local # zones locales
/var/cache/bind/ # fichiers de zone

Options globales — /etc/bind/named.conf.options

text
options {
directory "/var/cache/bind";
// Résolveurs en amont (forwarders)
forwarders {
1.1.1.1;
8.8.8.8;
};
forward only;
// Restreindre les requêtes récursives au réseau local
allow-recursion { 192.168.0.0/16; 10.0.0.0/8; localhost; };
// Bloquer les transferts de zone par défaut
allow-transfer { none; };
// Ne pas exposer la version de BIND
version "none";
// DNSSEC validation
dnssec-validation auto;
listen-on { any; };
listen-on-v6 { any; };
};

Zone autoritaire — /etc/bind/named.conf.local

text
zone "example.local" {
type master;
file "/var/cache/bind/db.example.local";
// Autoriser le transfert uniquement vers le serveur secondaire
allow-transfer { 192.168.1.2; };
notify yes;
};
zone "1.168.192.in-addr.arpa" {
type master;
file "/var/cache/bind/db.192.168.1";
allow-transfer { 192.168.1.2; };
};

Fichier de zone direct — db.example.local

text
$TTL 86400
@ IN SOA ns1.example.local. admin.example.local. (
2026051401 ; Serial (YYYYMMDDNN)
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ) ; Minimum TTL
; Serveurs de noms
@ IN NS ns1.example.local.
@ IN NS ns2.example.local.
; Enregistrements A
ns1 IN A 192.168.1.1
ns2 IN A 192.168.1.2
gw IN A 192.168.1.254
srv-web IN A 192.168.1.10
srv-db IN A 192.168.1.20
; Alias CNAME
www IN CNAME srv-web.example.local.
; Messagerie
@ IN MX 10 mail.example.local.
mail IN A 192.168.1.30
; SPF
@ IN TXT "v=spf1 ip4:192.168.1.30 -all"

Split-horizon (vues interne / externe)

text
// named.conf.local — vues séparées
acl internal { 192.168.0.0/16; 10.0.0.0/8; };
view "internal" {
match-clients { internal; };
zone "example.com" {
type master;
file "/var/cache/bind/db.example.com.internal";
};
};
view "external" {
match-clients { any; };
zone "example.com" {
type master;
file "/var/cache/bind/db.example.com.external";
allow-transfer { none; };
};
};

DNSSEC — Signature de zone

bash
# Générer les clés ZSK et KSK
dnssec-keygen -a RSASHA256 -b 1024 -n ZONE examplelocal # ZSK
dnssec-keygen -a RSASHA256 -b 2048 -n ZONE -f KSK examplelocal # KSK
# Signer la zone
dnssec-signzone -A -3 head -c 1000 /dev/random | sha1sum | cut -b 1-16)
-N INCREMENT -o examplelocal -t dbexamplelocal
# Activer dans named.conf.local
zone "example.local"
file "/var/cache/bind/db.example.local.signed";
dnssec-policy default;
;
# Vérifier
systemctl reload bind9
dig dnssec examplelocal SOA localhost
# Chercher le flag "ad" dans les flags de réponse

Commandes de gestion

bash
# Vérifier la syntaxe
named-checkconf
named-checkzone examplelocal /var/cache/bind/db.example.local
# Recharger sans redémarrer
systemctl reload bind9
rndc reload
rndc reload examplelocal # zone spécifique
# Vider le cache
rndc flush
# Statistiques
rndc stats && cat /var/cache/bind/named_stats.txt

Windows DNS Server

Configuration PowerShell

powershell
# Lister les zones
Get-DnsServerZone
# Créer une zone primaire
Add-DnsServerPrimaryZone -Name "example.local" `
-ZoneFile "example.local.dns" -DynamicUpdate Secure
# Créer une zone de recherche inverse
Add-DnsServerPrimaryZone -NetworkId "192.168.1.0/24" `
-ZoneFile "1.168.192.in-addr.arpa.dns"
# Ajouter des enregistrements
Add-DnsServerResourceRecordA -ZoneName "example.local" `
-Name "srv-web" -IPv4Address "192.168.1.10"
Add-DnsServerResourceRecordCName -ZoneName "example.local" `
-Name "www" -HostNameAlias "srv-web.example.local."
Add-DnsServerResourceRecordMX -ZoneName "example.local" `
-Name "@" -MailExchange "mail.example.local" -Preference 10
# Configurer les forwarders
Set-DnsServerForwarder -IPAddress 1.1.1.1, 8.8.8.8
# Bloquer les transferts de zone
Set-DnsServerPrimaryZone -Name "example.local" -SecureSecondaries NoTransfer
# Vérifier DNSSEC
Get-DnsServerDnsSecZone

Cisco IOS — DNS Server

text
! Activer le service DNS
ip dns server
! Entrées statiques
ip host srv-web.example.local 192.168.1.10
ip host srv-db.example.local 192.168.1.20
! Forwarders (si le routeur relaie les requêtes)
ip name-server 192.168.1.1 192.168.1.2
! Désactiver la résolution DNS automatique sur les typos (CLI)
no ip domain-lookup

Troubleshooting DNS

bash
# Résolution basique
dig examplelocal A
nslookup srv-web.example.local
# Vérifier le SOA et les NS
dig examplelocal SOA
dig examplelocal NS
# Tester le transfert de zone (doit être refusé depuis l'extérieur)
dig AXFR ns1examplelocal examplelocal
# Vérifier SPF, DKIM, DMARC
dig TXT examplelocal | grep spf
dig TXT _dmarcexamplelocal
dig TXT <selector>_domainkeyexamplelocal
# Tracer la délégation DNS
dig trace examplelocal
# Vérifier la latence de résolution
dig examplelocal | grep "Query time"
Checklist0/10
💡 Tip —

Le numéro de série SOA (format YYYYMMDDNN) doit être incrémenté à chaque modification de zone — BIND rejette les mises à jour des secondaires si le serial n'augmente pas.

OPS·BRAIN v1.027 notes · Networklocal