Cet article décrit la mise en place d’un serveur DNS avec BIND sur un serveur dédié tournant sous Rocky Linux 8. Le système de noms de domaine ou DNS (Domain Name System) permet d’établir une correspondance entre les adresses IP et les noms de domaine. Le DNS évite ainsi d’avoir à se rappeler des adresses IP.
Prérequis
Dans le pare-feu, ouvrir le port 53 en TCP et en UDP pour les requêtes DNS :
# firewall-cmd --permanent --add-service=dns
# firewall-cmd --reload
# firewall-cmd --list-services
dns ssh
Installation
Outre le serveur bind
à proprement parler, on installera le paquet bind-utils
, qui fournit une collection d’outils comme dig
, host
et nslookup
:
# dnf install -y bind bind-utils
Serveur cache DNS
La configuration par défaut fournie par Red Hat est déjà assez sophistiquée. On va la sauvegarder pour partir sur quelque chose de plus simple :
# cd /etc # mv named.conf named.conf.orig
Éditer /etc/named.conf
comme ceci :
// /etc/named.conf
options {
directory "/var/named";
};
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones";
Régler les permissions de ce fichier :
# chown root:named /etc/named.conf # chmod 0640 /etc/named.conf
Activer et démarrer BIND :
# systemctl enable named --now
Vérifier si le service tourne correctement :
# systemctl status named ● named.service - Berkeley Internet Name Domain (DNS) Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2022-12-17 17:34:31 CET; 18s ago
Exécuter dig
sur un domaine extérieur en vérifiant le temps de requête :
# dig redhat.com ... ;; ANSWER SECTION: redhat.com. 600 IN A 52.200.142.250 redhat.com. 600 IN A 34.235.198.240 ... ;; Query time: 908 msec ;; SERVER: 62.210.16.6#53(62.210.16.6) ;; WHEN: Sat Dec 17 17:37:17 CET 2022 ;; MSG SIZE rcvd: 71
Le temps de réponse devrait être bien plus court après une deuxième invocation de dig
:
# dig redhat.com ... ;; ANSWER SECTION: redhat.com. 536 IN A 52.200.142.250 redhat.com. 536 IN A 34.235.198.240 ... ;; Query time: 0 msec ;; SERVER: 62.210.16.6#53(62.210.16.6) ;; WHEN: Sat Dec 17 17:38:21 CET 2022 ;; MSG SIZE rcvd: 71
Configurer la journalisation
Dans notre configuration actuelle, les logs inondent /var/log/messages
. Pour éviter ça, on va configurer une journalisation propre à BIND en ajoutant la stance correspondante à /etc/named.conf
:
options { directory "/var/named"; }; logging { channel single_log { file "/var/log/named/named.log" versions 3 size 2m; severity info; print-time yes; print-severity yes; print-category yes; }; category default { single_log; }; }; ...
BIND ne peut pas créer ce fichier à la volée. On va donc le faire à sa place, en attribuant les permissions correctes :
# mkdir /var/log/named # touch /var/log/named/named.log # chown -R named:named /var/log/named/ # chmod 0770 /var/log/named
Si l’on utilise SELinux en mode renforcé, il faut impérativement réétiqueter le répertoire /var/log/named
et son contenu :
# restorecon -Rv /var/log/named Relabeled /var/log/named/named.log from unconfined_u:object_r:var_log_t:s0 to unconfined_u:object_r:named_log_t:s0
Recharger la configuration de BIND :
# systemctl reload named
Désactiver l’IPv6
Si l’on n’utilise pas l’IPv6, on peut désactiver le protocole en éditant /etc/sysconfig/named
:
OPTIONS="-4"
Il faudra également ajouter une option à /etc/named.conf
:
options {
directory "/var/named";
filter-aaaa-on-v4 yes;
};
Redémarrer BIND pour prendre en compte les modifications :
# systemctl restart named
Utiliser les DNS de base de chez Online
Online met à disposition deux serveurs DNS de base que nous allons utiliser de préférence :
options {
directory "/var/named";
filter-aaaa-on-v4 yes;
forwarders {
62.210.16.6;
62.210.16.7;
};
};
À partir de là, on pourra utiliser notre propre serveur cache DNS par défaut :
# /etc/resolv.conf
nameserver 127.0.0.1
Recharger la configuration de BIND :
# systemctl reload named
Serveur maître primaire
À présent, nous allons configurer BIND comme serveur maître primaire du domaine slackbox.fr
. Le nom de domaine sera réservé au bureau d’enregistrement (registrar) BookMyName.com.
Pour ajouter une zone DNS à BIND afin de le transformer en serveur maître primaire, il faut tout d’abord indiquer l’emplacement du fichier de zone à /etc/named.conf
. Pour plus de lisibilité, nous allons créer un fichier /etc/named.conf.local
:
// /etc/named.conf.local
zone "slackbox.fr" {
type master;
file "zone.slackbox.fr";
};
Le fichier named.conf.local
aura les mêmes permissions que named.conf
:
# chown root:named /etc/named.conf.local # chmod 0640 /etc/named.conf.local
Éditer /etc/named.conf
en incluant ce fichier :
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.conf.local";
Le fichier /var/named/zone.slackbox.fr
devra être édité comme ceci :
; /var/named/zone.slackbox.fr
$TTL 86400
$ORIGIN slackbox.fr.
@ IN SOA ns.slackbox.fr. hostmaster.slackbox.fr. (
2022121701 ; sn
10800 ; refresh (3 heures)
600 ; retry (10 minutes)
1814400 ; expiry (3 semaines)
10800 ) ; minimum (3 heures)
IN NS ns.slackbox.fr.
IN NS nssec.online.net.
IN MX 10 mail.slackbox.fr.
slackbox.fr. A 163.172.226.12
ns IN A 163.172.226.12
mail IN A 163.172.226.12
www CNAME slackbox.fr.
Définir les permissions qui vont bien.
# chown root:named /var/named/zone.slackbox.fr # chmod 0640 /var/named/zone.slackbox.fr
Quelques remarques sur la syntaxe et les options utilisées :
- La directive
$TTL
(Time To Live) définit le temps en secondes qu’un enregistrement pourra être gardé dans le cache par un autre serveur de noms. - La directive
$ORIGIN
définit le nom de domaine automatiquement ajouté à tous les noms de domaine incomplets (c’est-à-dire « non qualifiés ») définis dans un enregistrement DNS. Le nom de domaine est toujours un FQDN (Fully Qualified Domain Name) et se termine en conséquence par un point. - L’enregistrement
SOA
(Start Of Authority) définit les principales caractéristiques pour la zone ou le domaine avec un certain nombre de paramètres. - Le symbole
@
se substitue à la valeur de$ORIGIN
, concrètement àslackbox.fr
. IN
définit la classe Internet. D’autres valeurs existent, mais elles sont rarement utilisées.- L’enregistrement
NS
définit le serveur de noms primaire pour la zone. hostmaster.slackbox.fr
définit l’adresse mail de l’administrateur de la zone. L’adressehostmaster
est recommandée, mais n’importe quelle adresse mail valide peut être définie ici. Étant donné que le symbole@
a une signification spécifique dans le contexte, on utilise les points comme séparateurs, ce qui explique la syntaxe bizarre. L’adresse mail définie ici est donchostmaster@slackbox.fr
.2022121701
définit le numéro de série associé à la zone. Par convention, on utilise le formatAAAAMMJJSS
. Le numéro de série doit impérativement être mis à jour à chaque fois que l’on modifie le domaine.- La valeur
refresh
contrôle la mise à jour des informations du serveur de noms esclave de la zone. Les valeurs typiques se situent entre 3 heures (10800
) et 24 heures (86400
). - La valeur
retry
définit le temps d’attente avant une deuxième tentative lorsque le serveur de noms esclave n’arrive pas à contacter le serveur maître pour rafraîchir les informations. Les valeurs typiques se situent entre 10 minutes (600
) et 60 minutes (3600
). - La valeur
expiry
définit le laps de temps au bout duquel les enregistrements de zone sont considérés comme ne faisant plus autorité. On choisira une valeur assez élevée, située entre une semaine (604800
) à trois semaines (1814400
). - La valeur
minimum
définit le laps de temps durant lequel des réponses négatives (NXDOMAIN
) peuvent être gardées en cache par le serveur de noms esclave. Cette valeur se situera entre 0 et 3 heures (10800
). - L’enregistrement
NS
(NS Resource Record) définit le ou les serveurs de noms pour le domaine ou la zone. - L’enregistrement
A
(A Resource Record) définit l’adresse IPv4 d’un hôte du domaine ou de la zone.
Vérifier la définition correcte de la zone :
# named-checkzone slackbox.fr /var/named/zone.slackbox.fr zone slackbox.fr/IN: loaded serial 2022121701 OK
À chaque fois que l’on modifie le fichier de zone, on doit obligatoirement incrémenter le numéro de série. Ne pas oublier de recharger la configuration de BIND après chaque modification :
# systemctl reload named
Dans l’interface de gestion de BookMyName.com (entrée de menu Gérer), il faudra indiquer qu’on gère nous-mêmes notre propre DNS. Pour ce faire, cliquer sur le nom de domaine dans la liste des noms de domaine, puis sur Modifier dans l’entrée de menu Vos DNS. Notez que dans la deuxième ligne, l’adresse IP correspondant à nssec.online.net
est facultative :
DNS secondaire
La présence d’un serveur DNS secondaire est nécessaire pour les noms de domaine en .fr
. Ce n’est pas la peine de louer un deuxième serveur, Scaleway met gracieusement un DNS secondaire à disposition.
Dans la console Online, afficher les données du serveur. Dans le menu à gauche, cliquer sur DNS secondaires et définir une nouvelle entrée :
Éditer /etc/named.conf.local
et autoriser le transfert de la zone vers le DNS secondaire d’Online :
// /etc/named.conf.local ... zone "slackbox.fr" { type master; allow-transfer { 62.210.16.8; }; file "zone.slackbox.fr"; };
Reverse DNS
Il ne reste plus qu’à configurer la recherche DNS inverse (reverse DNS). Pour une configuration correcte du serveur, il faut que son adresse IP pointe vers le résultat de la commande hostname --fqdn
. En l’occurrence, nous devons faire pointer 163.172.226.12
vers sandbox-01.microlinux.fr
. Là aussi, il faut se rendre dans la console Online > Liste de vos serveurs > Serveur > Réseau > Modifier les reverses et fournir le nom d’hôte souhaité. Pour la prise en compte des modifications, il faudra patienter un peu.
Quelques vérifications
Voici une série de commandes pour tester la configuration correcte d’un domaine. On procédera à ces vérifications sur le serveur aussi bien que sur une machine externe.
Configuration du DNS :
$ host slackbox.fr slackbox.fr has address 163.172.226.12 slackbox.fr mail is handled by 10 mail.slackbox.fr.
Configuration du reverse DNS :
$ host 163.172.226.12 12.226.172.163.in-addr.arpa domain name pointer sandbox-01.microlinux.fr.
Nom d’hôte du serveur mail :
$ host -t mx slackbox.fr slackbox.fr mail is handled by 10 mail.slackbox.fr.
Adresse IP du serveur mail :
$ host mail.slackbox.fr mail.slackbox.fr has address 163.172.226.12
La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.
4 commentaires
Pascal · 15 mai 2023 à 0 h 13 min
Bonjour,
Je me permets une petite question simple :
Quel est l’intérêt ou l’avantage d’installer son serveur DNS sur notre serveur dédié
ou un VPS distant loué chez un hébergeur.
Merci.
kikinovak · 15 mai 2023 à 0 h 23 min
C’est un peu comme préférer faire la cuisine soi-même pour éviter les plats cuisinés industriels. Et j’avoue que je préfère de loin la syntaxe à coucher dehors de BIND que les immondes clicodromes comme on peut en trouver chez OVH.
Denis · 15 août 2024 à 11 h 16 min
Bonjour,
Je désire paramétrer un serveur DNS local sur un Raspberry Pi qui possède l’adresse 192.168.1.4. En suivant votre procédure, lorsque je saisis une requête, type nslookup « nomdeposte » j’obtiens une bonne réponse sur le serveur lui même. En revanche si je saisi la même requête à partir de mon PC sous Fedora 40 avec le fichier /etc/resolv.conf paramétré avec nameserver 192.168.1.4, j’obtiens la réponse ci-dessous :
Server: 192.168.1.4
Address: 192.168.1.4#53
** server can’t find « nomdeposte »: NXDOMAIN
Autre soucis : je dois souvent modifier mon fichier /etc/resolv.conf en lui paramétrant nameserver 192.168.1.4 et lorsque j’éteins puis redémarre ma connexion ethernet : ifdown « maconnexion » puis ifup « maconnexion »
je retrouve mon fichier /etc/resolv.conf avec
nameserver 127.0.0.53
options edns0 trust-ad
search .
Je suppose que ce paramétrage provient de nmcli, mais quelle serait la solution pour conserver nameserver 192.168.1.4 ?
Même dans ces conditions la requête nslookup ne fonctionne pas.
Merci si vous pourriez m’aider, je bute sur ce problème depuis mon changement de fournisseur d’accès avec une box fibre en IPV6 (il y a 6 mois).
kikinovak · 29 août 2024 à 23 h 42 min
J’utilise BIND uniquement pour les serveurs DNS publics. Pour les réseaux locaux avec des domaines en bois du genre
.lan
ou.local
, je prends toujours Dnsmasq, qui est beaucoup plus adapté.