Serveur DNS Bind9

Sources de la documentation : https://blog.foulquier.info/tutoriels/systeme/installation-et-parametrage-d-un-resolveur-dns-avec-bind-9-sur-debian-7

Procédure validée sur Debian 12.

Présentation du projet

Nous souhaitons installer un serveur DNS pour la zone réseau example.com. Dans cette documentation, le nom de domaine du serveur est ns.example.com et a pour IP 10.42.0.1. Nous le paramétrerons également afin d'être un serveur DNS récursif pour des clients sur le réseau. Nous utiliserons le logiciel Bind9.

Pré-requis

Modifier le nom d'hôte dans le fichier /etc/hosts :

127.0.0.1       localhost
127.0.1.1       ns.example.com	ns

Modifier également le nom d'hôte dans le fichier /etc/hostname :

ns.example.com

Nous allons installer les paquets Bind9 :

apt -y install bind9 dnsutils nftables

Autoriser le trafic vers le serveur DNS et en loopback en modifiant le fichier /etc/nftables.conf. Adapter selon les autres services déjà installés :

Pensez à créer une règle pour SSH si vous utilisez ce service pour configurer votre serveur. Ne vous enfermez pas dehors !
#!/usr/sbin/nft -f

flush ruleset

table inet tableinet {
	chain input {
		type filter hook input priority filter; policy drop;
		iifname lo accept
		udp dport 53 accept
		ct state {established,related} accept
	}
	chain forward {
		type filter hook forward priority filter;
	}
	chain output {
		type filter hook output priority filter;
	}
}

Activer et redémarrer nftables :

systemctl enable nftables.service
systemctl restart nftables.service

Modifier le résolveur dans le fichier /etc/resolv.conf :

domain example.com
search example.com
nameserver 10.42.0.1

Création de la zone de résolution

Créer le fichier /etc/bind/db.example.com suivant cet exemple :

;
; BIND data file for local loopback interface
;
$TTL	604800
@	IN	SOA	ns.example.com. root.example.com. (2020120401 604800 86400 2419200 604800)
;
@	IN	NS	ns.example.com.
@	IN	A	10.42.0.1
ns	IN	A	10.42.0.1
www	IN	A	10.42.0.2
www	IN	AAAA	fe80::74cf:64ad:6cfa:9604
mail	IN	CNAME	www

Création de la zone de résolution inverse

Si vous possédez des enregistrements IPv6, il est nécessaire de faire deux zones de résolutions inverses distinctes IPv4 et IPv6.

Créer le fichier pour la zone IPv4 /etc/bind/db.example.com.inv suivant cet exemple :

;
; BIND reverse data file for local loopback interface
;
$TTL	604800
@	IN	SOA	ns.example.com. root.example.com. (2020120401 604800 86400 2419200 604800)
;
@	IN	NS	ns.example.com.
1	IN	PTR	ns.example.com.
2	IN	PTR	www.example.com.

Créer le fichier pour la zone IPv6 /etc/bind/db.example.com.inv6 suivant cet exemple :

;
; BIND reverse data file for local loopback interface
;
$TTL	604800
@	IN	SOA	ns.example.com. root.example.com. (2020120401 604800 86400 2419200 604800)
;
@	IN	NS		ns.example.com.
4.0.6.9.a.f.c.f.d.a.4.6.f.c.4.7.0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa.	IN	PTR	www.example.com.

Paramétrage des zones

Modifier le fichier /etc/bind/named.conf.local afin de paramétrer les zones :

zone "example.com" {
        type master;
        file "/etc/bind/db.example.com";
        forwarders{};
};

zone "0.42.10.in-addr.arpa" {
        type master;
        file "/etc/bind/db.example.com.inv";
        forwarders{};
};

zone "0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa" {
        type master;
        file "/etc/bind/db.example.com.inv6";
        forwarders{};
};

Activer la résolution récursive

Modifier le fichier /etc/bind/named.conf.options :

options {
        directory "/var/cache/bind";
        // forwarders {
        //      0.0.0.0;
        // };
        dnssec-validation auto;
        auth-nxdomain no;    # conform to RFC1035
        listen-on-v6 { any; };
        allow-recursion { any; };
};

Redémarrer le service :

service bind9 restart

Tester la résolution :

dig @127.0.0.1 www.example.com
dig @127.0.0.1 antoinepernot.fr