Outils pour utilisateurs

Outils du site


linux:installation:resolveur_dns_unbound_nsd

Architecture cible

Voici l’architecture que nous allons mettre en place :

  • NSD : serveur faisant autorité pour le domaine $VOTRE_NDD. Il écoutera uniquement sur 127.0.0.1 (port 53530) pour ne pas être exposé directement sur Internet.
  • Unbound : résolveur récursif et cache accessible depuis le LAN sur $VOTRE_IP:53. Il interrogera NSD pour les requêtes concernant $VOTRE_NDD, et les serveurs racines pour le reste.
  • Routeur OpenWrt (GL-MT6000) : redirigera toutes les requêtes DNS du LAN vers $VOTRE_IP:53.
$VOTRE_NDD = votre nom de domaine (à remplacer zzzzz.fr); $VOTRE_IP = l'ip locale de la machine qui hébergera le résolveur (à remplacer : 192.168.x.y)

1. Installation de NSD et Unbound sur le serveur Debian

sudo apt update && sudo apt install nsd unbound

2. Configuration de NSD (serveur faisant autorité) 2.1. Fichier principal /etc/nsd/nsd.conf

sudo nano /etc/nsd/nsd.conf

Contenu :

server:
    # Écoute uniquement sur localhost (port non standard)
    ip-address: 127.0.0.1
    ip-address: ::1
    port: 53530
    username: nsd
    logfile: "/var/log/nsd.log"
    pidfile: "/run/nsd/nsd.pid"
    xfrdfile: "/var/lib/nsd/xfrd.state"
    zonelistfile: "/var/lib/nsd/zone.list"
    database: ""
 
# Zone principale pour $VOTRE_NDD
zone:
    name: "$VOTRE_NDD"
    zonefile: "/etc/nsd/db.$VOTRE_NDD"
    # Autoriser les transferts (si besoin)
    # provide-xfr: 192.168.1.0/24 NOKEY

2.2. Fichier de zone /etc/nsd/db.$VOTRE_NDD

sudo nano /etc/nsd/db.$VOTRE_NDD

Contenu (adaptez les adresses IP) :

$ORIGIN $VOTRE_NDD.
$TTL 3600
 
; Enregistrement SOA (Serial = YYYYMMDDNN)
@   IN  SOA ns1.$VOTRE_NDD. admin.$VOTRE_NDD. (
    2026072301  ; Serial
    3600        ; Refresh
    1800        ; Retry
    604800      ; Expire
    3600        ; Minimum TTL
)
 
; Serveurs de noms
@       IN  NS  ns1.$VOTRE_NDD.
@       IN  NS  ns2.$VOTRE_NDD.      ; (facultatif)
 
; Enregistrements A
@       IN  A   $VOTRE_IP
ns1     IN  A   $VOTRE_IP
ns2     IN  A   $VOTRE_IP         ; (facultatif)
 
; Sous-domaines pour vos services
www     IN  A   $VOTRE_IP
nextcloud IN A  $VOTRE_IP
grav    IN  A   $VOTRE_IP
dokuwiki IN A  $VOTRE_IP
 
; Enregistrement MX (si vous avez un serveur mail)
@       IN  MX  10 mail.$VOTRE_NDD.
mail    IN  A   $VOTRE_IP

2.3. Redémarrer NSD

sudo systemctl restart nsd
sudo systemctl enable nsd

2.4. Vérifier NSD

dig @127.0.0.1 -p 53530 $VOTRE_NDD

3. Configuration d'Unbound (résolveur récursif) 3.1. Fichier principal /etc/unbound/unbound.conf

sudo nano /etc/unbound/unbound.conf

Contenu :

server:
    # Écoute sur toutes les interfaces (pour le LAN)
    interface: 0.0.0.0
    interface: ::0
    port: 53
 
    # Accès autorisés (ACL)
    access-control: 127.0.0.1 allow
    access-control: ::1 allow
    access-control: 192.168.1.0/24 allow
 
    # Cache
    cache-min-ttl: 300
    cache-max-ttl: 86400
    prefetch: yes
    prefetch-key: yes
    serve-expired: yes
    serve-expired-ttl: 86400
 
    # Sécurité / confidentialité
    qname-minimisation: yes
    hide-identity: yes
    hide-version: yes
    unwanted-reply-threshold: 10000000
 
    # DNSSEC
    auto-trust-anchor-file: "/var/lib/unbound/root.key"
    val-log-level: 2
    val-clean-additional: yes
 
    # Permettre à Unbound d'interroger localhost (pour NSD)
    do-not-query-localhost: no
 
    # Logs
    verbosity: 1
    use-syslog: yes
 
# Zone faisant autorité : déléguée à NSD
stub-zone:
    name: "$VOTRE_NDD"
    stub-addr: 127.0.0.1@53530
    stub-no-cache: yes
 
# Forwarder optionnel (si vous voulez utiliser un DNS externe)
# forward-zone:
#     name: "."
#     forward-addr: 1.1.1.1
#     forward-addr: 9.9.9.9

3.2. Redémarrer Unbound

sudo systemctl restart unbound
sudo systemctl enable unbound

3.3. Vérifier Unbound

dig @127.0.0.1 $VOTRE_NDD
dig @$VOTRE_IP $VOTRE_NDD

Si les deux commandes renvoient l’adresse $VOTRE_IP, tout fonctionne. 4. Configuration du routeur OpenWrt (GL-MT6000) 4.1. Configurer le DNS du routeur lui-même

  • Dans LuCI : Network → Interfaces.
  • Modifier l’interface WAN.
  • Onglet Advanced Settings.
  • Use custom DNS servers : $VOTRE_IP.
  • Décocher “Use DNS servers advertised by peer”.
  • Save & Apply.

4.2. Annoncer le DNS aux clients via DHCP

  • Network → Interfaces → LAN → Edit → DHCP Server.
  • Onglet Advanced Settings.
  • DHCP-Options : ajouter 6,$VOTRE_IP (le 6 est le code DHCP pour les DNS).
  • Save & Apply.

4.3. Rediriger toutes les requêtes DNS vers le serveur (optionnel)

Pour forcer tous les appareils du LAN à utiliser votre DNS (même ceux qui ont un DNS statique comme 8.8.8.8) :

Méthode via LuCI :

  • Network → Firewall → Port Forwards.
  • Ajouter une règle :
    • Name : Intercept-DNS
    • Protocol : TCP+UDP
    • Source zone : lan
    • Source port : 53
    • Destination address : $VOTRE_IP
    • Destination port : 53
    • Save & Apply.

Méthode via SSH (si LuCI ne suffit pas) :

# Éditer le fichier de configuration du firewall
vi /etc/config/firewall
 
# Ajouter ce bloc
config redirect
    option name 'Intercept-DNS'
    option src 'lan'
    option src_dport '53'
    option proto 'tcp udp'
    option family 'any'
    option target 'DNAT'
    option dest_ip '$VOTRE_IP'
    option dest_port '53'
    option enabled '1'
 
# Redémarrer le firewall
/etc/init.d/firewall restart

4.4. Redémarrer les services

/etc/init.d/dnsmasq restart
/etc/init.d/firewall restart

5. Tests de validation Depuis le serveur Debian

# Vérifier que NSD répond
dig @127.0.0.1 -p 53530 $VOTRE_NDD
 
# Vérifier qu'Unbound répond
dig @127.0.0.1 $VOTRE_NDD
dig @$VOTRE_IP $VOTRE_NDD
 
# Vérifier la résolution externe
dig @$VOTRE_IP google.com

Depuis un poste du LAN

nslookup $VOTRE_NDD $VOTRE_IP
nslookup google.com $VOTRE_IP

Depuis l’extérieur (une fois l’IP publique configurée)

dig @VOTRE_IP_PUBLIQUE $VOTRE_NDD

6. Sécurisation 6.1. Ne pas exposer NSD sur Internet NSD écoute uniquement sur 127.0.0.1:53530. Il n’est donc pas accessible depuis l’extérieur. Seul Unbound est exposé (sur le port 53) si vous ouvrez le port dans votre pare‑feu.

6.2. Ouvrir le port 53 sur le serveur (si accès externe souhaité)

sudo ufw allow 53
sudo ufw reload

6.3. Sur le routeur (si accès externe)

  • Network → Firewall → Port Forwards.
  • Ajouter une règle pour rediriger le port 53 vers $VOTRE_IP:53.

6.4. Restreindre les requêtes externes (optionnel)

Dans unbound.conf, ajoutez :

access-control: VOTRE_IP_PUBLIQUE/32 allow   # si IP fixe
# ou
access-control: 0.0.0.0/0 refuse

7. Résumé des fichiers de configuration Fichier Rôle

  • /etc/nsd/nsd.conf Configuration de NSD (écoute sur 127.0.0.1:53530)
  • /etc/nsd/db.$VOTRE_NDD Zone DNS pour $VOTRE_NDD
  • /etc/unbound/unbound.conf Configuration d'Unbound (écoute sur 0.0.0.0:53, stub vers NSD)
  • /etc/config/firewall (OpenWrt) Redirection DNS vers $VOTRE_IP

Votre serveur DNS est maintenant opérationnel en LAN. Pour l’exposer sur Internet, il vous reste à configurer votre registrar (OVH, Gandi, etc.) avec les enregistrements NS et A appropriés, et à ouvrir le port 53 sur votre routeur.

linux/installation/resolveur_dns_unbound_nsd.txt · Dernière modification : de tutospisto