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)

“Topologie laboratoire 1” “Topologie laboratoire 1”

Les étapes :

  1. Configuration du système (adresses IP, nom d’hôte etc..)
  2. Mise à jour des paquets api et installation de bind9
  3. Analyser le fichier de configuration principal named.conf
  4. Configurer les options du serveur DNS
  5. Créer une zone et des fichiers de zone
  6. Configurer les enregistrements pour la zone forward
  7. Configurer les enregistrements pour la zone reverse
  8. 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.

“Fichiers de configuration DNS” “Fichiers de configuration DNS”

É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 :

“Fichier named de configuration DNS” “Fichier named de configuration DNS”

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 :

“Fichiers option DNS” “Fichiers option DNS”

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

“Service Bind est démarré” “Service Bind est démarré”

Vérifier les ports d’écoute et les sockets : “Service Bind est démarré” “Service Bind est démarré”

É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 domaine lab.com
  • zone 10.168.192.in-addr.arpa : la zone reverse pour le réseau 192.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 :

“Fichier de zone pour une interface loopback” “Fichier de zone pour une interface loopback”

É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 :

“Fichier de zone inverse par défaut” “Fichier de zone inverse par défaut”

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

  1. 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.

  1. 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.

“Transfert de zone maître-esclave” “Transfert de zone maître-esclave”

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.

“Transfert de zone multiple” “Transfert de zone multiple”

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

“Transfert de zone maître-esclave” “Transfert de zone maître-esclave”

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) :

  1. Créer des enregistrements DNS pour le DNS esclave :

    • Éditez /etc/bind/zones/forward.lab.com.db et mettez-le à jour avec l’enregistrement ns2.

“Secondary DNS Server Entries on the primary DNS” “Secondary DNS Server Entries on the primary DNS”

Editez /etc/bind/zones/reverse.192.168.10.db et mettez à jour avec les nouveaux enregistrements PTR. “PTR Records For Secondary DNS on the Master DNS Server” “PTR Records For Secondary DNS on the Master DNS Server”

  1. 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 directive allow-transfer { ip_du_dns_secondaire ; } ; pour la zone forward et reverse.

“Allow Secondary DNS Server For Zone Transfer” “Allow Secondary DNS Server For Zone Transfer”

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.

“Zones are Transferred from Master Server” “Zones are Transferred from Master Server”

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.

“Zone Transfer Test with Host Command” “Zone Transfer Test with Host Command”

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;
        };

};