{{tag>sysadmin netadmin linux dns bind}} ======= Configurer BIND9 ====== Installation du serveur de résolution de nom ISC BIND((Berkeley Internet Name Domain)). Configuration minimale en tant que serveur faisant autorité sur la zone "internal". Il est recommandé d'utiliser ''internal'' comme TLD pour assurer la résolution de noms sur nos réseaux privés pour éviter tout conflit avec ''lan'' utilisé par le protocole mdns. ===== Environnement ===== ^ Date | 2026-07 | ^ Architecture | x86_64 | ^ Système | Debian GNU/Linux 13 (trixie) | ^ Noyau | 6.12.96+deb13-amd64 | ===== Procédure ===== apt install -y bind9 bind9-doc bind9utils dnsutils Pour vérifier le fonctionnement du service : systemctl status named ss -lptun | grep named Avec le paquet ''bind9utils'' on installe également le binaire **rndc**((**r**emote **n**ame **d**aemon **c**ontroller)) qui permet de contrôler le service via le port ''TCP 953''. Invoquer la commande sans arguments pour obtenir la liste des options disponibles. Quelques exemples : # Etat du serveur rndc status # Recharger la configuration rndc reload # Activer/désactiver la journalisation des requêtes rndc querylog ON rndc querylog OFF # Vider le cache rndc flush # Augmente la verbosité des logs (à chaque appel ou en spécifiant le niveau) rndc trace # Dump des statistiques (par défaut dans /var/cache/bind/named.stats) rndc stats ===== A propos de la configuration ===== Sans surprise, les fichiers de configuration du service BIND se trouvent dans le dossier ''/etc/bind''. Le fichier de configuration principal ''/etc/bind/named.conf'' inclus les fichiers : * ''/etc/bind/named.conf.options'' définir les options globales (à compléter) ; * ''/etc/bind/named.conf.local'' définir les zones gérées par ce serveur (à compléter) ; * ''/etc/bind/named.conf.root-hints'' importation des serveurs DNS racines ; Les nombreuses options de paramétrage sont détaillées dans la documentation : man -S 5 named.conf Dans le fichier de configuration **''/etc/bind/named.conf.options''** on peut définir précisément les interfaces IPv4 ou IPv6 sur lesquelles le serveur bind sera à l'écoute. Écouter sur toutes les interfaces listen-on { any; }; listen-on-v6 { any; }; Spécifier une ou plusieurs adresses IPv4 et le port listen-on port 5353 { 127.0.0.1; 192.168.0.1; }; listen-on-v6 { none; }; Après toute modification de la configuration, vérifier la syntaxe avec la commande : named-checkconf -z Puis recharger la configuration : rndc reload # Alternative systemctl reload named.service ==== A propos du support d'IPv6 ==== Si IPv6 est utilisé seulement sur le réseau local et que le serveur BIND ne peut pas joindre les serveurs racines ou les forwarders via ce protocole, les réponses aux requêtes peuvent être très longues et comporter des erreurs de type ''SERVFAIL'' dig @127.0.0.1 www.google.fr A ; <<>> DiG 9.20.26-1~deb13u1-Debian <<>> @127.0.0.1 www.google.fr A ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 20789 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ; COOKIE: 819fa453655def6b010000006a6f289ecc0afcf6f9ae8ce2 (good) ;; QUESTION SECTION: ;www.google.fr. IN A ;; Query time: 255 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP) ;; WHEN: Sun Aug 02 13:23:10 CEST 2026 ;; MSG SIZE rcvd: 70 Dans ce cas, il faut paramétrer le service sans support du protocole IPv6. Modifier le fichier ''/etc/default/named'' et ajouter l'option ''-4'' pour forcer BIND à utiliser seulement la pile IPv4 # # run resolvconf? RESOLVCONF=no # startup options for the server OPTIONS="-u bind -4" Relancer le service systemclt restart named.service ===== Créer une zone ===== Nous allons créer la zone **glp.internal.** et définir le serveur en tant que serveur maître sur celle-ci : C'est lui qui fera autorité sur cette zone. Modifier le fichier de configuration ''**/etc/bind/named.conf.local**'' afin de déclarer la zone ''glp.internal.'' zone "glp.internal" { type master; file "/etc/bind/db.glp.internal"; allow-update { none; }; }; Remarque: Pour éviter qu'un tiers ne mette à jour dynamiquement votre zone DNS, utiliser la déclaration **allow-update** Le fichier ''**/etc/bind/db.glp.internal**'' contiendra la définition de la zone ''glp.internal''. Créer le fichier. touch db.glp.internal Il contiendra les définitions suivantes ; ; BIND fichier de données pour la zone internal ; $TTL 604800 @ IN SOA ns1.glp.internal. contact.glp.internal. ( 2 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS ns1.glp.internal. ; gateway IN A 192.168.1.1 ns1 IN A 192.168.1.15 test IN A 192.168.1.20 ===== Créer la zone de recherche inversée ===== Cette zone va permettre au serveur DNS de convertir une adresse IP en nom. A nouveau modifier le fichier de configuration ''**/etc/bind/named.conf.local**'' pour ajouter la zone de recherche inversée. zone "1.168.192.in-addr.arpa" { type master; file "/etc/bind/db.reverse.glp.internal"; notify no; allow-update { none; }; }; Ici c'est dans le fichier ''**db.reverse.internal**'' que seront définies les entrées de la zone. Utiliser un fichier existant en modèle pour créer le nouveau fichier de zone. cp db.127 db.reverse.internal Modifier le fichier de zone inversé ''**/etc/bind/db.192**''. Attention a bien modifier l'entrée SOA, le nom du serveur doit correspondre à la zone **lan**. A chaque entrée **A** du fichier de zone **lan** doit correspondre un enregistrement **PTR**. ; ; BIND reverse data file ; $TTL 604800 @ IN SOA ns1.glp.internal. admin.glp.internal. ( 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL @ IN NS ns1.glp.internal. 1 IN PTR gateway.glp.internal. 15 IN PTR ns1.glp.internal. 20 IN PTR test.glp.internal. Vérifier la configuration et recharger les fichiers de configuration named-checkzone 122.168.192.in-addr.arpa /etc/bind/db.reverse.glp.internal named-checkconf -z && systemctl reload named.service ==== Tester la recherche inversée ==== Avec nslookup en passant l'adresse IP directement en paramètre ou en mode interactif en restreignant le type de réponses à PTR: nslookup > set type=PTR > 192.168.1.201 Server: 192.168.1.200 Address: 192.168.1.200#53 201.1.168.192.in-addr.arpa name = pi-stache.lan. > A propos de la RFC 1918 ===== Utilisation du service par l’hôte ===== :TODO_DOCUPDATE: Une fois le service correctement paramétré, on peut configurer l’hôte pour qu'il utilise ce serveur DNS. Pour afficher quel serveur DNS est utilisé par défaut sur le système : cat /etc/resolv.conf Les commentaires du fichiers indiquent quel service à définit le contenu du fichier (en général le client DHCP). Le fichier ''/etc/resolv.conf'' doit maintenant indiquer l'adresse de notre serveur BIND : systemctl start named-resolvconf.service ===== Statistiques ===== Les statistiques ne doivent pas être exposées sur une interface publique car elles peuvent fournir des informations importantes pouvant faciliter les attaques. Deux méthodes exposent les statistiques du serveur BIND : * le fichier ''named.stats'' ; * le serveur HTTP (recommandé). Pour activer le service d'export des statistiques via HTTP, ajouter la directive ''statistics-channels'' dans le fichier de configuration ''/etc/bind/named.conf.local'' : statistics-channels { inet 127.0.0.1 port 8080 ; }; Valider la syntaxe et relancer le service : named-checkconf -z systemctl reload named.service :TODO: * voir paramètre ''query logging'' affiché par la commande **''rndc status''** ; * directive rndc querylog on ===== Références ===== * http://doc.ubuntu-fr.org/bind9 * http://www.linuxpedia.fr/doku.php/bind * https://www.it-connect.fr/dns-avec-bind-9/ * [[https://www.it-connect.fr/linux-comment-configurer-un-serveur-dns-bind9-sur-un-reseau-deconnecte-dinternet/|Configurer BIND 9 comme résolveur sur un réseau local non connecté]] * [[https://blog.tips4tech.fr/creer-un-serveur-dns-avec-bind9/|Configurer un serveur DNS BIND (tips4tech.fr)]] * [[https://www.linuxbabe.com/debian/dns-resolver-debian-10-buster-bind9|Configurer bind9 comme resolveur DNS sous Debian10 (linuxbabe.com)(en)]] * [[https://kb.isc.org/docs/aa-00206|Désactiver IPv6 pour les requêtes récursives (isc.org) (en)]] * [[https://www.mybluelinux.com/bind-disabling-ipv6-responses-in-bind-dns-server/]] * [[https://philchen.com/2007/04/04/configuring-reverse-dns/|Configurer une zone inverse dans BIND9 (philchen.com) (en)]] * [[https://serverfault.com/questions/409190/how-to-properly-configure-bind-forward-zone-for-an-internal-dns-server#718162|Configurer un transfert pour une sous-zone du TLD "internal" (serverfault.com) (en) ]] * [[https://kb.isc.org/docs/monitoring-recommendations-for-bind-9|Recommandation pour la supervision d'une serveur BIND 9 (isc.org) (en)]] * [[https://access.redhat.com/solutions/477073|Accès aux statistiques du serveur DNS BIND (access.redhat.com) (en)]] * {{reversednspresentation.pdf|Configure reverse DNS in BIND}}