# 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).