# Créer un serveur DNS sur Debian > Configuration de base d'un serveur DNS Bind9. Publié le 2021-10-20 | Mis à jour le 2025-01-12 | Tags: dns, bind9 https://xsec.fr/gnu-linux/dns-server/ --- import Callout from '@shared/components/Callout.astro' import { Collapsible } from '@shared/components/ui/collapsible' - Le serveur DNS gère la traduction des adresses IP en noms de domaine. Grâce à ceci, je peux par exemple atteindre mon serveur nas : `172.16.20.20` avec `nas.it.fr` - Plutôt que de se souvenir d'une adresse IP, on retient un nom. Si vous configurez votre serveur directement en tant que root, n'oubliez pas de retirer `sudo` de chaque commande. Si vous définissez un mot de passe pour le compte root, la commande `sudo` ne sera pas acceptée. Connectez-vous directement en tant que root pour exécuter les commandes. Vous pouvez aussi réinstaller votre système en laissant le mot de passe root vide lors de l'installation. `sudo` s'installera et fonctionnera correctement. Voici la configuration pour ce tutoriel : IP Serveur DNS | Masque Réseau | Nom de la machine (hostname) | Nom de domaine -- | -- | -- | -- 172.16.10.10 | 255.255.0.0 | dns | it.fr Ces 4 champs doivent être remplacés tout au long du tutoriel par les vôtres (correspondant à votre configuration). ## Nommer la machine ```sh sudo nano /etc/hostname ``` ```txt title="/etc/hostname" dns ``` - Ici nous nommons la machine `dns` ## S'assurer que l'adresse IP du serveur est STATIQUE ```sh ip a ``` ```txt title="ip a" 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens192: mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:cd:01:1a brd ff:ff:ff:ff:ff:ff altname enp11s0 inet 172.16.10.10/16 brd 172.16.255.255 scope global ens192 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fecd:11a/64 scope link valid_lft forever preferred_lft forever ``` - `ip a` affiche la configuration réseau des interfaces connectées à la machine. Mon interface `ens192` possède l'adresse IP et le masque `172.16.10.10/16` Si vous avez fixé l'adresse de la machine lors de l'installation (configuration réseau manuelle), passez à l'étape suivante. ```sh sudo nano /etc/network/interfaces ``` ```txt title="/etc/network/interfaces" # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug ens192 iface ens192 inet static address 172.16.10.10 netmask 255.255.0.0 gateway 172.16.1.1 ``` ## Éditer le fichier hosts ```sh sudo nano /etc/hosts ``` ```txt title="/etc/hosts" 172.16.10.10 dns.it.fr dns 127.0.0.1 dns ``` `IP_SERVEUR_DNS HOSTNAME.DOMAINE HOSTNAME` ## Éditer le fichier resolv.conf ```sh sudo nano /etc/resolv.conf ``` ```txt title="/etc/resolv.conf" domain it.fr search it.fr nameserver 172.16.10.10 ``` Il est nécessaire de redémarrer la machine : ```sh sudo reboot ``` Après le redémarrage de la machine, passez à l'étape suivante. ## Installer bind9 ```sh sudo apt update && sudo apt install bind9 dnsutils ``` - `sudo apt update` mettra à jour la liste des paquets en se basant sur le fichier `sources.list` - `sudo apt install bind9 dnsutils` installe bind9 pour gérer les zones DNS. ## Copier et renommer le modèle de configuration ```sh sudo cp /etc/bind/db.local /etc/bind/db.it.fr ``` La commande `cp` nous permet de copier db.local (le fichier de configuration par défaut de bind9), et de le renommer en un nouveau fichier `db.it.fr` ## Éditer le fichier de configuration de zone DNS Pour gagner du temps, nous allons directement remplacer les champs "localhost" par "it.fr" (notre domaine), dans le fichier de configuration. - Pour ce faire, nous utilisons l'utilitaire `sed` : ```sh sudo sed 'i/localhost/it.fr/g' db.it.fr ``` - Vérifiez votre configuration : ```txt title="db.it.fr" ; ; BIND data file for local loopback interface ; $TTL 604800 @ IN SOA it.fr. root.it.fr. ( 2 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS localhost. @ IN A 172.16.10.10 @ IN AAAA ::1 dns IN A 172.16.10.10 client IN A 172.16.20.20 ``` L'enregistrement `A` nommé `client` nous permet d'atteindre `172.16.20.20` avec `client.it.fr` Hostname | IN | Type | Adresse IP -- | -- | -- | -- nas | IN | A | 172.16.30.30 ```txt title="db.it.fr" ; ; BIND data file for local loopback interface ; $TTL 604800 @ IN SOA it.fr. root.it.fr. ( 2 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS localhost. @ IN A 172.16.10.10 @ IN AAAA ::1 dns IN A 172.16.10.10 client IN A 172.16.20.20 nas IN A 172.16.30.30 ``` Voici une description des principaux types d'enregistrements DNS : A | AAAA | CNAME | MX | TXT | NS | SOA | SRV | PTR --- | --- | --- | --- | --- | --- | --- | --- | --- Associe un nom d'hôte à une adresse IPv4 (32 bits) | Associe un nom d'hôte à une adresse IPv6 (128 bits) | Transfère un domaine ou un sous-domaine vers un autre domaine, ne fournit pas d'adresse IP | Dirige le courrier vers un serveur de messagerie | Peut être utilisé pour enregistrer des notes. Il est souvent utilisé pour la sécurité du courrier. | Stocke le serveur DNS pour une entrée | Stocke les informations administratives d'un domaine | Spécifie un port pour des services spécifiques | Fournit un nom de domaine dans les recherches inversées. La résolution inverse (l'inverse du type A). [Liste complète](https://www.cloudflare.com/fr-fr/learning/dns/dns-records/) ## Éditer le fichier named.conf Il est nécessaire de spécifier le chemin des fichiers de configuration pour les zones DNS : ```sh sudo nano /etc/bind/named.conf.local ``` ```txt title="/etc/bind/named.conf.local" // // Do any local configuration here // // Consider adding the 1918 zones here, if they are not used in your // organization //include "/etc/bind/zones.rfc1918"; zone "it.fr" { type master; file "/etc/bind/db.it.fr"; allow-query { any; }; }; zone "10.16.172.in-addr.arpa" { type master; file "/etc/bind/db.it.fr.inv"; }; ``` - **Ligne 9** `zone "MON_DOMAINE"` - **Ligne 11** `file "/etc/bind/db.MON_DOMAINE";` - **Ligne 14** Adresse inversée : `zone "3_PREMIERS_OCTETS_ADDRESSE_RESEAU.in-addr.arpa"` Exemple : Si mon adresse réseau est : `192.168.1.0/24` inversée : `1.168.192` - **Ligne 16** `file "/etc/bind/db.MON_DOMAINE.inv";` ## Éditer le fichier named.conf.options Nous allons maintenant configurer le fichier qui gère les options de redirection des requêtes : ```sh sudo nano /etc/bind/named.conf.options ``` ```txt title="/etc/bind/named.conf.options" options { directory "/var/cache/bind"; // If there is a firewall between you and nameservers you want // to talk to, you may need to fix the firewall to allow multiple // ports to talk. See http://www.kb.cert.org/vuls/id/800113 // If your ISP provided one or more IP addresses for stable // nameservers, you probably want to use them as forwarders. // Uncomment the following block, and insert the addresses replacing // the all-0's placeholder. forwarders { 172.16.10.10; 1.1.1.1; }; //======================================================================== // If BIND logs error messages about the root key being expired, // you will need to update your keys. See https://www.isc.org/bind-keys //======================================================================== dnssec-validation auto; auth-nxdomain no; # conform to RFC1035 version none; forward only; // listen-on-v6 { any; }; }; ``` - Ligne 13, l'option `forwarders` définit les serveurs DNS. Je saisis donc l'adresse IP de mon serveur DNS. - C'est aussi grâce à cela que les machines du réseau peuvent accéder au WAN, en spécifiant un DNS public (`cloudflare: 1.1.1.1` ou `google: 8.8.8.8` etc).