06 - DNS
Les types de serveurs DNS
Administrer un DNS implique généralement quatre principaux types de serveurs DNS :
-
Serveur DNS primaire/maître : Un serveur DNS est dit « primaire » lorsqu’il détient les enregistrements faisant autorité pour un domaine. Il est chargé de fournir des réponses définitives pour ce domaine. C’est le serveur principal qui fournit les enregistrements DNS aux autres serveurs ou clients DNS.
-
Serveur DNS secondaire/esclave : Un serveur DNS secondaire est défini par la déclaration de zone. Ce type de serveur DNS n’est pas nécessairement dédié, mais il peut l’être. Vous pouvez attribuer des zones primaires et seconaidre à des serveurs différents. Le serveur hébergeant la zone secondaire est considéré comme le serveur DNS secondaire, qui synchronise les enregistrements DNS du serveur primaire.
-
Serveur DNS cache : Un serveur DNS cache n’héberge aucune zone. Sa fonction principale est de communiquer avec d’autres serveurs DNS sur internet, de récupérer des enregistrements DNS et de les stocker dans son cache. Il sert toujours les réponses aux clients à partir de son cache, ce qui réduit la nécessité d’interroger des serveurs externes pour des requêtes répétées, améliorant ainsi le temps de réponse.
-
Serveur DNS de transfert (forwarder) : Ce type de serveur transmet toutes les requêtes DNS (lorsqu’il ne connaît pas la réponse) à un autre serveur DNS désigné, souvent un serveur parent. Il met ensuite les réponses en cache comme un serveur DNS cache ce qui accélère les futures requêtes. La principale différence réside dans le fait que sa fonction première est de transmettre les requêtes.
Serveur DNS primaire
Un serveur DNS primaire est le serveur faisant autorité pour un domaine spécifique. Il détient les enregistrements DNS originaux et sert de source principale d’informations DNS pour ce domaine. Lorsque d’autres serveurs ou clients DNS demandent ces enregistrements, le serveur DNS primaire les fournit et ses réponses sont considérées comme faisant autorité et définitives.
Zone et fichiers de zone
Une zone DNS est une partie distincte de l’espace de noms d’un domaine, comme « exemple.com », à l’intérieur de cette zone, on peut créer des sous-zones, comme « marketing.exemple.com » ou « sales.exemple.com »
Chaque zone contient divers enregistrements, tels que :
- les enregistrements A (A records) : correspondance entre les noms de domaine et les adresses IP
- les enregistrements MX (MX records) : Spécifient les serveurs de messagerie
- Enregistrements CNAME (CNAME records) : fournissent des alias de domaine
Ces enregistrements DNS sont stockés dans des fichiers spéciaux appelés fichiers de zone. Lorsqu’un client DNS demande un enregistrement, le serveur récupère les informations nécessaires dans ces fichiers de zone et les envoie.
Laboratoire 1 : Configurer un serveur DNS primaire
Objectifs
- Configurer un serveur DNS primaire avec
bind9
installé et configuré sur une machine Ubuntu Server 24. - Tester le DNS sur des machines clientes Windows 10.
Environnement
Pour ce laboratoire, nous avons besoin de 3 VMs :
- Une machine Ubuntu Server pour le DNS primaire
- 2 Interfaces : une en NAT, une en LAN Segment (192.168.10.0/24)
- Deux machines client Windows 10
- Une interface en LAN Segment (la même que celle du serveur DNS)
Les étapes :
- Configuration du système (adresses IP, nom d’hôte etc..)
- Mise à jour des paquets api et installation de bind9
- Analyser le fichier de configuration principal
named.conf
- Configurer les options du serveur DNS
- Créer une zone et des fichiers de zone
- Configurer les enregistrements pour la zone forward
- Configurer les enregistrements pour la zone reverse
- Tester le serveur DNS en utilisant nslookup, ping sur un client Windows 10 dans le même LAN Segment.
Etape 1 : Configuration du système
Avant toute configuration du serveur DNS Linux, nous devons préparer nos systèmes avec le nom d’hôte, le FQDN, la configuration de l’ip, etc.
- Configuration du nom d’hôte :
hostnamectl set-hostname ns1.lab.com
Dans le fichier /etc/hosts
127.0.0.1 localhost
192.168.10.10 ns1.lab.com ns1
Vérifiez avec les commandes hostname
, hostname -f
et dnsdomainname
.
- Configuration réseau :
Dans le fichier /etc/netplan/00-installer-config.yaml
network:
ethernets:
ens32:
dhcp4: yes
ens33:
addresses:
- 192.168.10.10/24
version: 2
Appliquez votre configuration :
netplan apply
Attention : Vérifiez les noms de vos interfaces (commande ip a
). Il se peut qu’elles soient différentes de ens32
et ens33
ou qu’elles ne soient pas dans le même ordre que l’exemple ci-dessus. Appelez votre enseignant si vous n’arrivez pas à avoir une adresse IP pour une de vos interfaces.
Étape 2
Mettre à jour la base de donnée des paquets
apt update -y && apt upgrade -y
Installer bind9 et les utilitaires
apt install bind9 bind9utils -y
Les fichiers de configuration sont situés dans le répertoire /etc/bind
.
Étape 3
Le fichier de configuration principal est /etc/bind/named.conf
. Nous n’éditerons pas directement ce fichier, il contient d’autres fichiers de configuration que nous éditerons.
Le fichier named.conf
se présente comme suit :
Trois fichiers ont été référencés dans le fichier named.conf
.
/etc/bind/named.conf.options
: Contient les paramètres de configuration du serveur DNS, comment le serveur DNS se comportera (ports d’écoute, ACL, forwarders, répertoires etc…)/etc/bind/named.conf.local
: C’est dans ce fichier que nous définissons les zones (forward, reverse)./etc/bind/named.conf.default-zones
: Contient des déclarations de zones par défaut.
Étape 4
La configuration par défaut du fichier named.conf.options
est la suivante :
Ci-dessous, un configuration minimale pour le serveur :
acl local-network {
192.168.10.0/24;
};
options {
directory "/var/cache/bind";
dnssec-validation auto;
allow-query { localhost; local-network; };
recursion yes;
listen-on-v6 { none; };
listen-on { 192.168.10.10; };
};
Les principales options utilisées :
- ACL : définit une plage d’adresses IP pouvant interagir avec le serveur DNS primaire. Ici, l’ACL réseau local inclut le sous-réseau
192.168.10.0/24
. - directory : Spécifie le répertoire de travail dans lequel BIND stocke les fichiers de zone, les caches et les données associées.
- dnssec-validation : Active la validation DNSSEC automatique pour la sécurité.
- allow-query : Contrôle les clients qui peuvent envoyer des requêtes DNS au serveur.
- recursion : Détermine si le serveur DNS primaire doit effectuer des requêtes récursives pour le compte des clients.
- forwarders : Définit les serveurs DNS en amont auxquels notre serveur transmet les requêtes qu’il ne peut résoudre localement.
- listen-on-v6 : Adresse(s) IPv6 d’écoute (aucune dans notre cas).
- listen-on : Adresse(s) IPv4 sur laquelle bind DNS écoute les requêtes.
Redémarrer bind9
après avoir appliqué les modifications pour s’assurer de la prise en compte de la nouvelle configuration :
systemctl restart bind9
Vérifier l’état du serveur DNS primaire et les ports d’écoute :
systemctl status bind9
Vérifier les ports d’écoute et les sockets :
Étape 5
Nous allons créer deux zones : une zone forward et une zone reverse.
Pour cela, nous allons créer des fichiers de zone dans le répertoire /etc/bind/zones
, c’est (optionnel, mais une bonne pratique).
Tout d’abord créeons le répertoire /etc/bind/zones
et changeons son groupe propriétaire à bind
:
mkdir /etc/bind/zones
chown root:bind /etc/bind/zones
C’est dans ce répertoire que nous allons entreposer nos fichiers de zone.
Deux zones :
zone lab.com
: la zone forward pour le domainelab.com
“- ”
zone 10.168.192.in-addr.arpa
: la zone reverse pour le réseau192.168.10.0/24
.
Dans le fichier /etc/bind/named.conf.local
:
zone "lab.com" {
type master;
file "/etc/bind/zones/forward.lab.com.db";
allow-update { none; };
};
zone "10.168.192.in-addr.arpa" {
type master;
file "/etc/bind/zones/reverse.192.168.10.db";
allow-update { none; };
};
Résumé des paramètres importants :
- zone : Définit le nom de la zone, soit pour un domaine (forward), soit pour un réseau (reverse).
- type : Indique le type de zone (par exemple, master pour primaire, slave pour secondaire ou direct).
- file : Indique le fichier dans lequel les enregistrements sont stockées.
- allow-update : Indique si les mises à jour dynamiques du DNS sont autorisées (transfert de zone). La valeur « none » bloque les modifications automatiques, ce qui améliore la sécurité. Dans notre cas, nous configurons un DNS primaire, nous n’avons pas
Étape 6
Maintenant, nous devons créer les enregistrements pour les différents hôtes du réseau. Pour cela, nous devons créer les fichiers de zone. Plus exactement, nous allons créer deux fichiers de zone, l’un pour la zone forward, l’autre pour la zone reverse. Nous pouvons facilement créer le fichier de zone en copiant les fichiers de zone localhost existants dans le répertoire /etc/bind.
cd /etc/bind
cp db.local zones/forward.lab.com.db
Le fichier de la zone forward par défaut se présente comme suit :
Éditons le fichier “forward.lab.com.db » pour créer des enregistrements DNS pour les périphériques du réseau.
Dans le fichier /etc/bind/zones/forward.lab.com.db
$TTL 604800
@ IN SOA ns1.lab.com. root.lab.com. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
@ IN NS ns1.lab.com.
ns1 IN A 192.168.10.10
pc1 IN A 192.168.10.23
pc2 IN A 192.168.10.24
pc3 IN A 192.168.10.25
Points clés des configurations ci-dessus :
- Enregistrement SOA : Définit le serveur faisant autorité et les paramètres de base du contrôle de zone (numéro de série, rafraîchissement, réessai, etc.).
- Enregistrement NS : Indique le nom du serveur DNS (ns1.lab.com) responsable de la résolution du domaine.
- Enregistrements A : Associent des noms d’hôtes spécifiques (pc1, pc2, www) à leurs adresses IP correspondantes dans le réseau 192.168.1.x.
Étape 7
Créons la zone reverse : copiez la zone locale du fichier /etc/bind/db.127
et l’utiliser comme “template” pour créer un nouveau fichier de zone reverse :
cd /etc/bind
cp db.127 zones/reverse.192.168.10.db
Le fichier de zone reverse par défaut se présente comme suit :
Créeons les entrées reverse pour les hôtes :
Dans le fichier /etc/bind/zones/reverse.192.168.10.db
$TTL 604800
@ IN SOA ns1.lab.com. root.lab.com. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
@ IN NS ns1.lab.com.
; PTR Records for Reverse Lookup
;
10 IN PTR ns1.lab.com.
23 IN PTR pc1.lab.com.
24 IN PTR pc2.lab.com.
Points clés des configurations ci-dessus :
- Durée de vie (TTL) :
$TTL 604800
Spécifie la durée de vie par défaut des enregistrements DNS, fixée à 604800 secondes (1 semaine). Start of Authority (SOA)
: Indique le serveur autoritaire (ns1.lab.com) et l’adresse courriel de l’administrateur (root.lab.com).Numéro de série (Serial)
: Réglé sur 1, il doit être incrémenté à chaque mise à jour de la zone.Refresh, Retry, Expire, Negative Cache TTL
: Paramètres pour les opérations DNS.- Enregistrement du serveur de noms (
NS
) : Désigne ns1.lab.com comme serveur de noms faisant autorité pour cette zone reverse. - Enregistrements de pointeurs (
PTR
ou Pointer Records) : Établissent une correspondance entre l’IP et les noms d’hôtes (tandis que les enregistrements A établissent une correspondance entre les noms d’hôtes et l’IP).
Redémarrez le service DNS pour que toutes les modifications soient prises en compte.
systemctl restart named
Vérification de la configuration et de la syntaxe
- Si named ne redémarre pas, il est très probable qu’il y ait une erreur glissée dans les fichiers de configuration. Pour le vérifier :
named-checkconf /etc/bind/named.conf.local
named-checkconf /etc/bind/named.conf.options
Pour une configuration valide, ces commandes ne retournent rien. Si un problème est trouvé, elles afficherons un message d’erreur.
- Pour vérifiez la syntaxe des fichiers de zone forward et reverse :
named-checkzone lab.com /etc/bind/zones/forward.lab.com.db
named-checkzone 10.168.192.in-addr.arpa zone/reverse.192.168.10.db
Étape 8
La configuration de notre serveur DNS terminée, nous allons maintenant tester si les hôtes du réseau sont capables de communiquer avec d’autres hôtes en utilisant leur nom d’hôte au lieu de leurs adresses IP.
Donnez, de façon statique l’adresse IP 192.168.10.23 à
Test 1 : en utilisant ping
Test 2 : en utilisant nslookup
#1. Query default DNS server:
nslookup lab.com
#2. Query a specific DNS server:
nslookup lab.com 192.168.10.10
#3. Query Specific Record type (A, MX, TXT, etc.):
nslookup -type=NS lab.com
#4. Forward Lookup Query
nslookup pc1.lab.com
#5. Reverse Lookup Query
nslookup 192.168.10.24
#6. Verbose Query
nslookup -debug lab.com
Test 3 : en utilisant dig
#1. Requête basique pour des A records
dig lab.com
#2. Query a specific DNS record type ex: Mail Exchanger record.
dig lab.com MX
#3. Reverse DNS lookup (PTR record):
dig -x 192.168.10.23
#4. Query a specific DNS server
dig @192.168.10.10 lab.com
#5. Query with short output (just the IP)
dig +short lab.com
#6. Query with detailed output (verbose mode)
dig +noall +answer lab.com
#7. Query DNS for all available record types (ANY)*
dig lab.com ANY
#8. Perform a non-recursive query
dig +norecurse lab.com
#9. Query authoritative name servers (NS records)
dig lab.com NS
#10. Query for CNAME (Canonical Name) records
dig example.com CNAME
#11. Display the query time
dig lab.com +stats
#12. Trace the entire DNS resolution path
dig lab.com +trace
Configurer un DNS secondaire
Un serveur DNS secondaire est une réplique du DNS primaire. Sa fonction principale est d’assurer la redondance et l’équilibrage de la charge des requêtes DNS. Si le serveur DNS primaire tombe en panne ou est mis hors ligne, le DNS secondaire peut continuer à répondre aux requêtes, garantissant ainsi la une meilleure disponibilité du service.
Les DNS secondaires contribuent également à répartir la charge des requêtes DNS : Lorsque plusieurs serveurs DNS sont disponibles, les requêtes peuvent être envoyées à n’importe lequel d’entre eux, ce qui réduit la charge du serveur principal.
Zone de transfert
Le DNS primaire met à jour les enregistrements et données du secondaire avec par le biais d’un transfert de zone. Il envoie des mises à jour périodiques de la zone au DNS secondaire.
Il est important de noter que le design primaire/secondaire n’est pas spécifique au serveur, mais est spécifique à la zone. L’idée peut être clarifiée avec le diagramme ci-dessous, ici nous avons 2 zones et deux serveurs DNS : domain1.com et domain2.com, pour domain1, ns1 est le primaire et ns2 est le secondaire, tandis que pour domain2, ns2 est le primaire et ns1 est le secondaire.
Dans cette conception, aucun serveur DNS ne fonctionne en tant que primaire ou secondaire seulement, mais ils contiennent tous deux des zones primaire et secondaires, chaque primaire étant responsables du transfert vers son (ou ses)secondaires respectif(s).
Laboratoire 2
Nous allons améliorer le scénario du labo 1 en ajoutant un DNS secondaire.
Les fonctionnalités des clients win-10 resteront les mêmes, mais ils pourront désormais configurer leurs paramètres DNS avec un autre serveur DNS en tant que serveur DNS alternatif.
- DNS primaire : ns1.lab.com (192.168.10.10)
- DNS secondaire : ns2.lab.com (192.168.10.11)
- Sous-réseau : 192.168.10.0/24
- Domaine : lab.com
Prérequis
Avant de configurer le DNS secondaire, nous devons effectuer quelques configurations sur le DNS primaire (ns1) :
-
Créer des enregistrements DNS pour le DNS esclave :
- Éditez
/etc/bind/zones/forward.lab.com.db
et mettez-le à jour avec l’enregistrementns2
.
- Éditez
Editez /etc/bind/zones/reverse.192.168.10.db
et mettez à jour avec les nouveaux enregistrements PTR
.
- Autoriser le DNS secondaire à obtenir les données de zone :
Le transfert de zone est restreint, seuls les serveurs autorisés pourront obtenir les données de zone du serveur priaire. Les serveurs DNS secondaire doivent donc être autorisés.
Editez le fichier
/etc/bind/named.conf.local
et ajoutez la directiveallow-transfer { ip_du_dns_secondaire ; } ;
pour la zone forward et reverse.
Maintenant, redémarrez le service Bind sur le serveur primaire pour que les changements soient pris en compte.
Nous avons terminé du côté du primaire, installons maintenant le serveur DNS secondaire.
- Étape 1 : Configuration du système
- Étape 2 : Mise à jour et installation des paquets du serveur DNS
- Étape 3 : Test du serveur DNS esclave
Etape 1 : Configuration du système
Avant toute configuration du serveur DNS Linux, nous devons préparer nos systèmes avec le nom d’hôte, le FQDN, la configuration de l’ip, etc.
- Configuration du nom d’hôte :
hostnamectl set-hostname ns2.lab.com
Dans le fichier /etc/hosts
127.0.0.1 localhost
192.168.10.11 ns2.lab.com ns2
Vérifiez avec les commandes hostname
, hostname -f
et dnsdomainname
.
- Configuration réseau :
Utilisation du serveur DNS principal comme adresse de serveur de noms préférée : après l’installation du serveur DNS, nous pouvons changer sa propre IP comme adresse de serveur de noms préférée.
Dans le fichier /etc/netplan/00-installer-config.yaml
network:
ethernets:
ens32:
addresses:
- 192.168.10.11/24
nameservers:
addresses:
- 192.168.10.10
search: []
ens33:
dhcp4: yes
version: 2
Appliquez votre configuration :
```bash
netplan apply
Attention : Vérifiez les noms de vos interfaces (commande ip a
). Il se peut qu’elles soient différentes de ens32
et ens33
ou qu’elles ne soient pas dans le même ordre que l’exemple ci-dessus. Appelez votre enseignant si vous n’arrivez pas à avoir une adresse IP pour une de vos interfaces.
Étape 2
Mettre à jour la base de donnée des paquets
apt update -y && apt upgrade -y
Installer bind9 et les utilitaires
apt install bind9 bind9utils -y
Étape 3
Créer les options du fichier de zone. Sur le DNS primaire, nous avions déclaré type master
. Pour le secondaire, ça sera type slave
.
Pour chaque zone, déclarer l’adresse IP du serveur primaire dans masters
.
Fichier /etc/bind/named.conf.local
:
zone "lab.com" {
type slave;
file "/etc/bind/zones/forward.lab.com.db";
masters {192.168.10.10;};
allow-notify {192.168.10.10;};
};
zone "1.168.192.in-addr.arpa" {
type slave;
file "/etc/bind/zones/reverse.192.168.10.db";
masters {192.168.10.10;};
allow-notify {192.168.10.10;};
};
Paramètres :
type slave
: Définit la zone comme une zone secondaire, (le serveur tirera ses données d’un serveur primaire).file "/etc/bind/zones/..."
: le fichier local dans lequel les données de la zone seront stockées. (sera mis à jour automatiquement lorsque le secondaire se synchronisera avec le primaire).masters { 192.168.10.10 ; };
: Identifie l’adresse IP du primaire à partir duquel le secondaire récupérera les données de la zone.allow-notify { 192.168.10.10 ; };
: Permet au secondaire de recevoir des notifications du primaire (192.168.1.10) lorsque les données de la zone sont mises à jour.
Vérification de la configuration et syntaxe :
named-checkconf /etc/bind/named.conf.local
named-checkconf /etc/bind/named.conf.options
Créer le répertoire /etc/bind/zones
:
mkdir /etc/bind/zones
chown bind:bind /etc/bind/zones
Redémarrer le service DNS pour que toutes les modifications soient prises en compte.
systemctl restart named
Étape 4
Nous allons maintenant vérifier que tous les serveurs DNS fonctionnent correctement.
L’objectif principal de ces tests est de s’assurer que les serveurs DNS primaires et secondaire peuvent communiquer comme prévu et transférer des données de zone.
Test 1 : Vérifier que les fichiers de zone sont créés automatiquement
Si toutes les configurations sont correctes des deux côtés (maître et esclave), après le redémarrage final du service DNS sur le serveur DNS secondaire, nous verrons que les fichiers de zone forward
et reverse
sont disponibles dans le répertoire /etc/bind/zones
du DNS secondaire. Ces fichiers seront créés automatiquement.
Test 2 : Vérifier que le DNS secondaire peut transférer manuellement les données de la zone.
Il s’agit d’une étape de dépannage du serveur DNS. Si la zone n’est pas transférée, alors nous pouvons faire ce test. Parfois, si nous voyons un problème sur le transfert de zone, il est pratique de faire ce test.
Sur le secondaire, exécutez la commande :
host -l lab.com 192.168.10.10
Cette commande affiche toutes les données d’une zone particulière à partir d’un serveur spécifique par le biais du transfert de zone.
Test #3 : Vérifier la résolution de nom à partir du DNS secondaire
- Arrêtez le DNS primaire.
- Essayez d’envoyer un ping à d’autres hôtes en utilisant leur nom d’hôte. Si le DNS secondaire a les informations de zone, il peut effectuer la résolution de nom avec succès.
Transfert DNS
Qu’est-ce que le transfert DNS ?
Lorsqu’un serveur DNS ne dispose pas des informations demandées dans son cache ou dans ses fichiers de zone locaux : Au lieu d’effectuer lui-même des recherches récursives complètes, il transmet la requête à un ou plusieurs serveurs DNS externes (forwarders). Ce serveur DNS est considéré comme un serveur DNS de transfert.
Généralement, lorsqu’un serveur DNS ne dispose pas des données demandées, il recherche les données sur l’internet, en commençant par les serveurs de noms racine, mais un serveur DNS de transfert ne va pas vers les serveurs de noms racine, il transmet plutôt les requêtes aux serveurs DNS de niveau supérieur, tels que les serveurs DNS des FAI.
Laboratoire 3
Ajoutez aux options du serveur primaire l’option forwarders
pour transférer les requêtes des zones non autoritaires vers les serveurs DNS de Clouflare et Google (les plus couramment utilisés) :
Fichier /etc/bind/named.conf.options
:
acl local-network {
192.168.1.0/24;
};
options {
directory "/var/cache/bind";
dnssec-validation auto;
allow-query { localhost; local-network; };
recursion yes;
listen-on-v6 { none; };
listen-on { 192.168.10.10; };
forwarders {
8.8.8.8;
1.1.1.1;
};
};