Introduction
Dans ce laboratoire, vous apprendrez comment configurer un serveur DNS faisant autorité en local sur un système Linux en utilisant bind9. Vous acquerrez une expérience pratique avec l'un des progiciels DNS les plus utilisés, transformant une machine Linux standard en un serveur capable de résoudre des noms de domaine personnalisés pour un réseau local.
Le processus commence par l'installation des paquets nécessaires et la configuration des options globales du serveur, comme la mise en place des forwarders. Vous définirez ensuite une zone de recherche directe (forward lookup zone) pour résoudre un nom de domaine en une adresse IP, ainsi qu'une zone de recherche inversée (reverse lookup zone) pour la plage d'adresses IP correspondante. Pour conclure le laboratoire, vous validerez les fichiers de configuration de bind9 pour leur syntaxe correcte et utiliserez l'utilitaire dig pour tester votre nouveau serveur DNS, en vous assurant qu'il résout correctement les requêtes pour votre domaine local.
Installer bind9 et configurer les options globales
Dans cette étape, vous commencerez par mettre en place les composants essentiels de votre serveur DNS. Cela implique l'installation de bind9, qui est l'un des progiciels de serveur DNS les plus utilisés sous Linux. Vous configurerez également ses options globales, qui contrôlent le comportement général du serveur, comme la manière dont il traite les requêtes pour les domaines dont il n'est pas l'autorité.
Tout d'abord, il est d'usage de mettre à jour la liste des paquets de votre système afin de vous assurer que vous obtenez les dernières versions disponibles des logiciels.
Exécutez la commande suivante dans votre terminal :
sudo apt-get update
Ensuite, installez le paquet bind9, qui contient le démon du serveur DNS, et bind9-utils, qui fournit des outils en ligne de commande utiles comme dig et named-checkconf que vous utiliserez plus tard pour les tests et la validation.
sudo apt-get install bind9 bind9-utils
Il vous sera demandé de confirmer l'installation. Tapez Y et appuyez sur Entrée. La sortie ressemblera à ceci :
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
bind9-libs bind9-doc dns-root-data
...
After this operation, XX.X MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
...
Setting up bind9 (1:9.18.X-XubuntuX.X) ...
Une fois bind9 installé, la tâche suivante consiste à configurer son comportement global. La configuration principale est divisée en plusieurs fichiers, tous situés dans le répertoire /etc/bind/. Pour les options globales, vous éditerez le fichier named.conf.options.
Ouvrez le fichier à l'aide de l'éditeur nano :
sudo nano /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 {
// 0.0.0.0;
// };
//========================================================================
// 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;
listen-on-v6 { any; };
};
Dans ce fichier, vous verrez un bloc options { ... };. Vous devez vous assurer que ce bloc contient les directives pour le forwarding, les permissions de requête et les interfaces d'écoute. Le forwarding permet à votre serveur DNS de résoudre des domaines externes (comme google.com) en interrogeant d'autres serveurs DNS publics.
Modifiez le bloc options pour qu'il corresponde à ce qui suit. Vous pouvez ajouter les lignes manquantes ou décommenter et modifier celles qui existent déjà.
Conseils : Vous pouvez nettoyer le contenu du fichier en appuyant sur
Ctrl+K, puis coller le contenu suivant.
options {
directory "/var/cache/bind";
// If there is not a line with forwarders, add the following section.
// If there is one, ensure it's not commented out and has valid IPs.
forwarders {
8.8.8.8;
8.8.4.4;
};
// Add or uncomment this line to allow queries from any host
allow-query { any; };
recursion yes;
listen-on { any; }; // Listen on all interfaces
listen-on-v6 { any; }; // Listen on all IPv6 interfaces
dnssec-validation auto;
auth-nxdomain no; ## conform to RFC1035
};
Une fois que vous avez terminé l'édition, enregistrez le fichier en appuyant sur Ctrl+O, puis appuyez sur Entrée pour confirmer le nom du fichier. Quittez l'éditeur nano en appuyant sur Ctrl+X. Vous avez maintenant installé avec succès bind9 et configuré sa configuration initiale.
Définir et créer une zone de recherche directe pour mylocaldomain.net
Dans cette étape, vous allez configurer votre serveur bind9 pour qu'il soit faisant autorité pour un domaine personnalisé. Ceci est réalisé en créant une zone de recherche directe (forward lookup zone), qui est une base de données qui associe des noms d'hôtes lisibles par l'homme (comme webserver.mylocaldomain.net) à leurs adresses IP correspondantes. Vous définirez d'abord la zone dans la configuration de bind9, puis vous créerez le fichier de zone réel contenant les enregistrements DNS.
Tout d'abord, vous devez informer bind9 de votre nouvelle zone. Les configurations de zones locales sont conservées dans /etc/bind/named.conf.local afin de les séparer de la configuration par défaut du paquet. Ce fichier sera entièrement configuré à l'étape suivante.
Maintenant que la zone est définie, vous devez créer le fichier de zone correspondant. Ce fichier contient les enregistrements DNS réels.
Tout d'abord, copiez un fichier modèle pour vous assurer que le nouveau fichier possède les bonnes permissions et le bon propriétaire :
sudo cp /etc/bind/db.local /etc/bind/db.mylocaldomain.net
Ensuite, au lieu d'éditer manuellement le fichier, vous pouvez exécuter un bloc de commande unique qui va :
- Obtenir l'adresse IP de votre VM.
- Générer un numéro de série dynamique en utilisant la date actuelle.
- Écrire le contenu complet et correct du fichier de zone dans
/etc/bind/db.mylocaldomain.net.
Tout d'abord, capturez l'adresse IP de votre VM dans une variable qui sera utilisée dans le fichier de zone :
VM_IP=$(ip -4 addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
Cette commande extrait l'adresse IPv4 de votre interface réseau principale (eth0) à l'aide d'une expression régulière. L'adresse IP sera automatiquement insérée dans vos enregistrements DNS.
Maintenant, créez le fichier de zone avec les enregistrements DNS appropriés. Cette commande unique générera le fichier de zone complet :
sudo bash -c "cat > /etc/bind/db.mylocaldomain.net" << EOF
\$TTL 604800
@ IN SOA ns1.mylocaldomain.net. admin.mylocaldomain.net. (
$(date +%Y%m%d)01 ; Serial (YYYYMMDDNN)
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns1.mylocaldomain.net.
ns1 IN A ${VM_IP}
webserver IN A ${VM_IP}
fileserver IN A ${VM_IP}
www IN CNAME webserver
EOF
Cette commande peuple automatiquement le fichier de zone avec les enregistrements corrects, en utilisant l'adresse IP spécifique de votre VM. Vous pouvez vérifier le contenu avec cat /etc/bind/db.mylocaldomain.net. Vous avez maintenant défini et créé avec succès votre première zone de recherche directe.
Définir et créer toutes les zones locales
Dans cette étape, vous allez créer toutes les configurations de zones locales nécessaires. Au lieu d'éditer les fichiers manuellement, vous utiliserez un script pour effectuer les actions suivantes, garantissant une configuration précise :
- Création de
/etc/bind/named.conf.local: Ce fichier sera généré à partir de zéro pour contenir les définitions de vos zones de recherche directe (mylocaldomain.net) et inverse. - Création du fichier de zone inverse: Le script créera également le fichier
db.REVERSE_IPavec les enregistrementsPTRnécessaires.
Tout d'abord, rassemblez les informations d'adresse IP nécessaires pour les deux configurations de zone :
IP=$(ip -4 addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
REV_IP=$(echo $IP | awk -F. '{print $3"."$2"."$1}')
LAST_OCTET=$(echo $IP | awk -F. '{print $4}')
Ceci extrait l'adresse IP de votre VM et la traite pour créer le format d'IP inverse nécessaire à la zone de recherche inverse. Par exemple, si votre IP est 172.16.50.100, REV_IP deviendra 50.16.172 et LAST_OCTET deviendra 100.
Ensuite, créez le fichier de configuration de zone principal qui informe bind9 des deux zones :
sudo bash -c "cat > /etc/bind/named.conf.local" << EOF
//
// Do any local configuration here
//
// Forward lookup zone
zone "mylocaldomain.net" {
type master;
file "/etc/bind/db.mylocaldomain.net";
};
// Reverse lookup zone
zone "${REV_IP}.in-addr.arpa" {
type master;
file "/etc/bind/db.${REV_IP}";
};
EOF
Ce fichier définit à la fois la zone de recherche directe (pour résoudre les noms en IPs) et la zone de recherche inverse (pour résoudre les IPs en noms). Le type master indique que ce serveur est faisant autorité pour ces zones.
Enfin, créez le fichier de zone inverse avec les enregistrements PTR :
sudo bash -c "cat > /etc/bind/db.${REV_IP}" << EOF
\$TTL 604800
@ IN SOA ns1.mylocaldomain.net. admin.mylocaldomain.net. (
$(date +%Y%m%d)01 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns1.mylocaldomain.net.
;
${LAST_OCTET} IN PTR ns1.mylocaldomain.net.
${LAST_OCTET} IN PTR webserver.mylocaldomain.net.
${LAST_OCTET} IN PTR fileserver.mylocaldomain.net.
EOF
Cette approche automatisée garantit que les deux zones sont correctement définies dans named.conf.local et que le fichier de zone inverse est créé correctement, évitant ainsi les erreurs de configuration courantes.
Valider la configuration de bind9 et tester la résolution DNS avec dig
Dans cette étape, vous allez valider toutes les modifications de configuration que vous avez apportées, puis tester votre serveur DNS en direct. Il est essentiel de vérifier la syntaxe des fichiers de configuration avant de les appliquer, car une erreur pourrait empêcher le bon démarrage du service bind9. Une fois validé, vous utiliserez l'utilitaire dig pour effectuer des recherches DNS et confirmer que votre serveur fonctionne comme prévu.
Tout d'abord, vérifiez les fichiers de configuration principaux de bind9 pour toute erreur de syntaxe à l'aide de named-checkconf. Si cette commande ne produit aucune sortie, cela signifie que vos fichiers de configuration (named.conf.local, named.conf.options, etc.) sont valides.
sudo named-checkconf
Ensuite, validez la syntaxe de votre fichier de zone de recherche directe. La commande named-checkzone vérifie la correction d'un fichier de zone.
sudo named-checkzone mylocaldomain.net /etc/bind/db.mylocaldomain.net
Une vérification réussie retournera un statut "OK" et affichera le numéro de série de votre fichier de zone :
zone mylocaldomain.net/IN: loaded serial 2024052001
OK
Maintenant, validez la zone de recherche inverse. Comme le nom de la zone et le nom du fichier dépendent de l'adresse IP de votre VM, rassemblez d'abord les informations nécessaires :
IP=$(ip -4 addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
REV_IP=$(echo $IP | awk -F. '{print $3"."$2"."$1}')
ZONE_NAME="${REV_IP}.in-addr.arpa"
ZONE_FILE="/etc/bind/db.${REV_IP}"
Ceci crée le nom de zone et le chemin de fichier appropriés en fonction de l'adresse IP réelle de votre VM.
Exécutez maintenant la commande de validation de zone :
echo "Checking reverse zone: ${ZONE_NAME}"
sudo named-checkzone ${ZONE_NAME} ${ZONE_FILE}
Une vérification réussie affichera à nouveau un statut "OK" :
zone 50.16.172.in-addr.arpa/IN: loaded serial 2024052001
OK
Avant de redémarrer, assurez-vous que le service bind9 peut lire les fichiers de zone en définissant les bons propriétaires. Tout d'abord, récupérez à nouveau les informations IP pour construire le chemin de fichier correct :
IP=$(ip -4 addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
REV_IP=$(echo $IP | awk -F. '{print $3"."$2"."$1}')
Définissez maintenant les propriétaires appropriés pour les deux fichiers de zone :
sudo chown root:bind /etc/bind/db.mylocaldomain.net "/etc/bind/db.${REV_IP}"
Toutes les configurations étant validées, il est temps de redémarrer le service bind9 pour appliquer les changements :
sudo systemctl restart bind9
Pour être certain que le service a démarré correctement et a chargé vos nouvelles zones, vérifiez les journaux système.
sudo grep named /var/log/syslog | grep "loaded serial"
Vous devriez voir une sortie confirmant que vos deux zones ont été chargées avec succès. La sortie inclura également des zones par défaut comme localhost, ce qui est normal. L'important est de trouver les lignes pour mylocaldomain.net et votre zone inverse.
... named[...]: zone mylocaldomain.net/IN: loaded serial 2025071401
... named[...]: zone 50.16.172.in-addr.arpa/IN: loaded serial 2025071401
...
Si vous ne voyez pas ces lignes, examinez la sortie de sudo systemctl status bind9 pour les erreurs.
Enfin, testez votre serveur DNS à l'aide de dig. Vous interrogez directement votre serveur local en spécifiant @127.0.0.1.
Testez d'abord la recherche directe pour webserver.mylocaldomain.net :
dig @127.0.0.1 webserver.mylocaldomain.net
Dans la sortie, recherchez la section ANSWER SECTION. Elle devrait afficher l'enregistrement A pointant vers l'adresse IP de votre VM, et surtout, les flags dans l'en-tête devraient inclure aa pour une réponse faisant autorité. La ligne SERVER en bas devrait afficher 127.0.0.1.
...
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: ...
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;webserver.mylocaldomain.net. IN A
;; ANSWER SECTION:
webserver.mylocaldomain.net. 604800 IN A <your_vm_ip>
;; SERVER: 127.0.0.1#53(127.0.0.1)
...
Ensuite, testez la recherche inverse en utilisant l'option -x. Tout d'abord, capturez l'adresse IP de votre VM :
IP=$(ip -4 addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
Effectuez maintenant le test de recherche inverse :
dig @127.0.0.1 -x $IP
La section ANSWER SECTION devrait maintenant afficher les enregistrements PTR que vous avez créés, associant votre IP aux noms d'hôtes, et les flags devraient à nouveau inclure aa.
...
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: ...
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;<last_octet>.<your_reversed_network_part>.in-addr.arpa. IN PTR
;; ANSWER SECTION:
<last_octet>.<your_reversed_network_part>.in-addr.arpa. 604800 IN PTR fileserver.mylocaldomain.net.
<last_octet>.<your_reversed_network_part>.in-addr.arpa. 604800 IN PTR ns1.mylocaldomain.net.
<last_octet>.<your_reversed_network_part>.in-addr.arpa. 604800 IN PTR webserver.mylocaldomain.net.
;; SERVER: 127.0.0.1#53(127.0.0.1)
...
Félicitations ! Vous avez configuré, validé et testé avec succès un serveur DNS faisant autorité de base.
Résumé
Dans ce laboratoire, vous avez configuré un serveur DNS faisant autorité local sur Linux en utilisant le paquet logiciel bind9. Le processus a commencé par l'installation de bind9 et de ses utilitaires essentiels, suivie de la modification du fichier global named.conf.options pour définir les comportements à l'échelle du serveur, tels que la configuration des forwarders pour résoudre les requêtes de domaines externes.
Vous avez ensuite créé les zones DNS principales : une zone de recherche directe pour mylocaldomain.net afin de mapper les noms d'hôtes aux adresses IP à l'aide d'enregistrements A, et une zone de recherche inverse correspondante pour mapper les adresses IP aux noms d'hôtes avec des enregistrements PTR. Le laboratoire s'est terminé par la phase cruciale de validation, où vous avez utilisé named-checkconf et named-checkzone pour vérifier les erreurs de configuration, puis testé la fonctionnalité du serveur en direct en effectuant des recherches directes et inverses réussies avec l'utilitaire dig.



