DNS statique / Debian 10

Mémento 7.1 - DNS avec BIND 9

Le service DNS statique reposera sur bind 9 et sera installé sur srvlan pour gérer la zone LAN.

1 - Préambule

Le service permettra de créer un sous-domaine de loupipfire.fr de nom intra.loupipfire.fr et d'associer le nom de ce sous-domaine avec les adresses IP des VM situées en zone LAN.

Au préalable, mettez à jour vos systèmes Debian 10.

Pour cela, vérifiez le fichier /etc/apt/sources.list :

# Debian Buster, mises à jour principales
deb http://deb.debian.org/debian/ buster main
deb-src http://deb.debian.org/debian/ buster main

# Debian Buster, mises à jour de sécurité
deb http://deb.debian.org/debian-security/ buster/updates main
deb-src http://deb.debian.org/debian-security/ buster/updates main

# Debian Buster,  mises à jour volatiles
deb http://deb.debian.org/debian/ buster-updates main
deb-src http://deb.debian.org/debian/ buster-updates main

# Debian Buster, mises à jour des paquets encore en test
deb http://deb.debian.org/debian/ buster-proposed-updates main

puis lancez les Cdes suivantes :

$ sudo apt update
$ sudo apt upgrade
$ sudo apt dist-upgrade

1.1 - Configuration actuelle de la zone LAN

a) Une IP fixe et un nom d'hôte pour chaque VM.
Ex : IP fixe 192.168.3.2 pour l'hôte debian10-vm1

Cde utile pour découvrir les adresses IP :

[user@hostname:~$] ip address

Cdes utiles pour découvrir les noms d'hôtes :

[user@hostname:~$] cat /etc/hostname
[user@hostname:~$] cat /etc/hosts

b) Une Box Internet déclarée comme serveur DNS.

Cde utile pour découvrir les serveurs DNS exploités :

[user@hostname:~$] cat /etc/resolv.conf

c) Des pings qui émis depuis le LAN montrent un retour :
- Positif sur un nom de domaine Internet
Ex : ping www.google.fr

- Positif sur leur propre nom d'hôte
Ex : ping debian10-vm1 depuis la VM debian10-vm1

- Négatif sur les autres noms d'hôtes de la zone LAN

Exemple de retour :

client-linux@debian10-vm1:~$ ping srvlan
ping: srvlan: Aucune adresse associée ... l'hôte
client-linux@debian10-vm1:~$ 

Un serveur DNS local solutionnera le retour négatif.

2 - Mise en place du service DNS statique

Le système fournit bind et unbound soit les 2 serveurs DNS les plus utilisés sous Debian.

Le choix se portera sur bind qui contrairement à unbound peut être utilisé à la fois comme serveur de noms récursif et serveur de noms faisant autorité.

Un serveur DNS récursif recherchera le résultat d'une requête DNS dans son cache ou à défaut interrogera un serveur DNS faisant autorité pour obtenir le résultat.

Un serveur DNS faisant autorité contiendra le résultat, il n'interrogera pas d'autres serveurs et sera l’autorité finale contenant tous les noms d'hôtes et adresses IP d'une zone donnée.

Le service sera statique car les données seront renseignées manuellement.

2.1 - Installation de bind9

Installez le paquet bind9 :

[srvlan@srvlan:~$] sudo apt install bind9

et vérifiez le démarrage de celui-ci :

[srvlan@srvlan:~$] systemctl status bind9

Retour :

bind9.service - BIND Domain Name Server
 Loaded: loaded (/lib/syst.../bind9.service; ...
 Active: active (running) since Mon 2019-08...
    Docs: man:named(8)
 Process: 1015 ExecStart=/usr/sbin/named ... SUC...
Main PID: 1016 (named)
   Tasks: 4 (limit: 679)
  Memory: 9.4M
   CGroup: /system.slice/bind9.service
      └─1016 /usr/sbin/named -u bind

Vérifiez son lancement automatique au boot de la VM :

[srvlan@srvlan:~$] systemctl is-enabled bind9

Retour :

enabled 

Vérifiez la version installée :

[srvlan@srvlan:~$] sudo named -v    

Retour :

BIND 9.11.5...Debian (Extended Supp...) <id:...> 

Vérifiez l'utilisation des ports TCP/UDP 53 et 953 :

[srvlan@srvlan:~$] sudo netstat -lnptu | grep named 

Retour :

tcp      0     0  192.168.3.1:53    .../named
tcp      0     0  192.168.2.2:53    .../named
tcp      0     0  127.0.0.1:53      .../named            
tcp      0     0  127.0.0.1:953     .../named          
tcp6     0     0  :::53             .../named          
tcp6     0     0  ::1:953           .../named          
udp      0     0  192.168.3.1:53    .../named          
udp      0     0  192.168.2.2:53    .../named          
udp      0     0  127.0.0.1:53      .../named          
udp      0     0  :::53             .../named

53 = Port DNS TCP/UDP par défaut
953 = Port des Cdes rndc pour gérer le démon named

Vérifiez l'activation de l'outil associé rndc :

[srvlan@srvlan:~$] sudo rndc status 

Retour :

version: BIND 9.11.5-P4-5.1-Debian (Extended Supp...
running on srvlan: Linux i686 4.19.0-5-686-pae #...
boot time: Tue, 27 Aug 2019 13:49:48 GMT
last configured: Tue, 27 Aug 2019 13:49:48 GMT
configuration file: /etc/bind/named.conf
CPUs found: 1
worker threads: 1
UDP listeners per interface: 1
number of zones: 104 (97 automatic)
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/900/1000
tcp clients: 4/150
server is up and running

L'interface en ligne de Cde rndc permet de gérer le démon named localement ou à distance.

Pour finir, observez les fichiers de configuration présents dans les dossiers suivants :

[srvlan@srvlan:~$] ls /etc/bind
[srvlan@srvlan:~$] ls /var/cache/bind   

3 - Configuration de base

3.1 - Définition des zones de recherche

Une zone de recherche directe permet à un service DNS interrogé de renvoyer une adresse IP associée à un nom alors qu'une zone de recherche inverse fera le contraire.

Le fichier named.conf.local contient la configuration locale du serveur DNS bind9, vous y déclarerez donc les zones de recherche pour intra.loupipfire.fr.

Editez le fichier de configuration named.conf.local :

[srvlan@srvlan:~$] sudo nano /etc/bind/named.conf.local

et ajoutez les lignes suivantes à la fin de celui-ci :

# Zone ou Domaine intra.loupipfire.fr
# Définition des zones de recherche directe et inverse
# Serveur DNS maître pour le domaine (type)
# Fichiers de zones associés dans /etc/bind (file)
# MAJ dynamique des fichiers de zones > none (allow-update)  

# zone de recherche directe
zone "intra.loupipfire.fr" IN {
type master;
file "/etc/bind/db.intra.loupipfire.fr.directe";
allow-update { none; };
};

# zone de recherche inverse
# Le réseau 192.168.3.0 aura pour adresse inverse 
# 3.168.192.in-addr.arpa 
zone "3.168.192.in-addr.arpa" IN {
type master;
file "/etc/bind/db.intra.loupipfire.fr.inverse";
allow-update { none; };
};

3.2 - Construction des zones de recherche

Les fichiers de zones de recherche contiendront les directives et enregistrements de ressources pour le domaine intra.loupipfire.fr.

Créez le fichier pour la zone directe :

[srvlan@srvlan:~$] cd /etc/bind
[srvlan@srvlan:~$] sudo nano db.intra.loupipfire.fr.directe

et insérez les lignes suivantes :

;
; DNS - Fichier de zone pour la résolution directe
;
$TTL 86400
@ IN SOA srvlan.intra.loupipfire.fr. root.intra.loupipfire.fr. (
1                             ; Serial
604800                  ; Refresh - 1w (1 semaine)
84600                    ; Retry - 1d (1 jour)
2419200               ; Expire - 4w 
604800 )               ; Negative Cache TTL - 1w
;
@ IN NS srvlan.intra.loupipfire.fr.
srvlan IN A 192.168.3.1
ovs IN A 192.168.3.15
debian10-vm1 IN A 192.168.3.2
debian10-vm2 IN A 192.168.3.4

- Détail des paramètres -
a) Directives SOA (Start of Authority) :

@Représente le nom de domaine de la zone soit intra.loupipfire.fr
IN SOADésigne srvlan comme autorité pour la zone intra.loupipfire.fr
1N° de série du fichier, à changer à chaque modification de celui-ci
604800Un DNS esclave attendra 1w avant de rafraichir ses données
84600Si échec, il réessaiera 1d après
2419200Si échec durant 4w, il cessera de répondre en tant qu'autorité
604800Mise en cache des réponses négatives durant 1w

Le n° de série peut être une date suivie d'un n° d'ordre :
Ex : AAAAMMJJxx

b) Enregistrements de type NS et A :

IN NSIndique le nom du serveur DNS pour la zone
IN ARelie un nom d’hôte (domaine - s/domaine) à une adresse IPv4

Créez maintenant le fichier pour la zone inverse :

[srvlan@srvlan:~$] cd /etc/bind
[srvlan@srvlan:~$] sudo nano db.intra.loupipfire.fr.inverse

et insérez les lignes suivantes :

;
;  DNS - Fichier de zone pour la résolution inverse
;
$TTL 86400
@ IN SOA srvlan.intra.loupipfire.fr. root.intra.loupipfire.fr. (
1
1w
1d
4w
1w )
;
@ IN NS srvlan.intra.loupipfire.fr.
1 IN PTR srvlan.intra.loupipfire.fr.
15 IN PTR ovs.intra.loupipfire.fr. 
2 IN PTR debian10-vm1.intra.loupipfire.fr. 
4 IN PTR debian10-vm2.intra.loupipfire.fr.  

- Détail des paramètres -
a) Directives SOA (Start of Authority) :
Idem fichier de zone pour la résolution directe.

b) Enregistrements de type PTR :

IN PTR Relie une adresse IP à un nom d'hôte

3.3 - Prise en compte des modifications

Redémarrez le service DNS :

[srvlan@srvlan:~$] sudo systemctl restart bind9

4 - Configuration finale et tests du DNS statique

4.1 - Configuration du fichier hosts

Editez le fichier DNS hosts :

[srvlan@srvlan:~$] sudo nano /etc/hosts

et ajoutez le FQDN de srvlan (nom d'hôte + nom de domaine) comme suit :

127.0.0.1        localhost
127.0.1.1        srvlan
192.168.3.1    srvlan.intra.loupipfire.fr srvlan

Ce fichier est consulté avant l'accès au serveur bind et peut donc être utilisé pour un minimum de résolution de noms en cas de panne du serveur DNS.

N'effacez pas le groupe de lignes dédié à l'IPv6.

4.2 - Configuration du fichier resolv.conf

Ce fichier indique entre autres à srvlan quels serveurs DNS interroger.

Actuellement, aucun programme comme un client dhcp, network-manager ou resolvconf ne le modifie dynamiquement. Il faut donc le faire manuellement.

Editez le fichier resolv.conf :

[srvlan@srvlan:~$] sudo nano /etc/resolv.conf

et remplacez tout le contenu existant par ceci :

# Fichier resolv.conf - Client DNS

# Nom du domaine local
domain intra.loupipfire.fr 

# Ajout auto du nom de domaine local aux noms d'hôtes
# non pleinement qualifiés
search intra.loupipfire.fr

# Adresses IP du ou des serveurs DNS à interroger
nameserver 192.168.3.1

4.3 - Tests DNS depuis la VM srvlan

a) Vérifiez la syntaxe du fichier /etc/bind/named.conf :

[srvlan@srvlan:~$] sudo named-checkconf

Sont inclus dans la vérification les fichiers DNS :
- named.conf.options
- named.conf.local
- named.conf.default-zones
Aucune erreur ne sera retournée en cas de résultat OK.

b) Vérifiez la validité du fichier de zone directe :

[srvlan@srvlan:~$] cd /etc/bind
[srvlan@srvlan:~$] sudo named-checkzone -d intra.loupipfire.fr db.intra.loupipfire.fr.directe

La Cde retourne normalement :

loading "intra.loupipfire.fr" from "db.intra.loupipfire.fr.directe" class "IN"
zone intra.loupipfire.fr/IN: loaded serial 1
OK

c) Vérifiez la validité du fichier de zone inverse :

[srlan@srvlan:~$] sudo named-checkzone -d 3.168.192.in-addr.arpa  db.intra.loupipfire.fr.inverse  

La Cde retourne normalement :

loading "3.168.192.in-addr.arpa" from "db.intra.loupipfire.fr.inverse" class "IN"
zone 3.168.192.in-addr.arpa/IN: loaded serial 1
OK

d) Lancez les outils de vérification host et dig.
Ceux-ci peuvent aider à détecter des problèmes dans la résolution de noms.

La Cde host est incluse dans le paquet bind9-host installé de base :

[srvlan@srvlan:~$] sudo host -v srvlan.intra.loupipfire.fr

Celle-ci retourne normalement :

Trying "srvlan.intra.loupipfire.fr"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51244
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;srvlan.intra.loupipfire.fr.    IN  A

; ANSWER SECTION:
srvlan.intra.loupipfire.fr. 86400 IN    A   192.168.3.1

;; AUTHORITY SECTION:
intra.loupipfire.fr.    86400   IN  NS  srvlan.intra.loupipfire.fr.
 
Received 74 bytes from 127.0.0.1#53 in 2 ms
Trying "srvlan.intra.loupipfire.fr"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10937
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
 
;; QUESTION SECTION:
;srvlan.intra.loupipfire.fr.    IN  AAAA
 
;; AUTHORITY SECTION:
intra.loupipfire.fr.    86400   IN  SOA srvlan.intra.loupipfire.fr. root.intra.loupipfire.fr. 1 604800 84600 2419200 604800
 
Received 85 bytes from 127.0.0.1#53 in 2 ms
Trying "srvlan.intra.loupipfire.fr"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56000
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;srvlan.intra.loupipfire.fr.    IN  MX
 
;; AUTHORITY SECTION:
intra.loupipfire.fr.    86400   IN  SOA srvlan.intra.loupipfire.fr. root.intra.loupipfire.fr. 1 604800 84600 2419200 604800
 
Received 85 bytes from 127.0.0.1#53 in 2 ms

La Cde dig nécessite au préalable l'installation du paquet dnsutils :

[srvlan@srvlan:~$] sudo apt install dnsutils
[srvlan@srvlan:~$] sudo dig SOA srvlan.intra.loupipfire.fr

Celle-ci retourne normalement :

; <<>> DiG 9.11.5-P4-5.1-Debian <<>> SOA srvlan.intra.loupipfire.fr
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7715
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
 
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: e921b304fc93f8e3650c9dca5d60fb7284ddbf9b4f7af6da (good)
;; QUESTION SECTION:
;srvlan.intra.loupipfire.fr.    IN  SOA

;; AUTHORITY SECTION:
intra.loupipfire.fr.    86400   IN  SOA srvlan.intra.loupipfire.fr. root.intra.loupipfire.fr. 1 604800 84600 2419200 604800
 
;; Query time: 7 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: sam. août 24 10:55:14 CEST 2019
;; MSG SIZE  rcvd: 124

e) Pour finir, testez la résolution DNS interne et externe :

[srvlan@srvlan:~$] ping debian10-vm1
[srvlan@srvlan:~$] ping debian10-vm2.intra.loupipfire.fr
[srvlan@srvlan:~$] ping srvlan
[srvlan@srvlan:~$] ping srvlan.intra.loupipfire.fr
[srvlan@srvlan:~$] ping mappy.fr

Le ping srvlan renvoie 127.0.0.1.
Le ping srvlan.intra.loupipfire.fr renvoie 192.168.3.1.

5 - Déclaration d'un serveur DNS externe

Le DNS utilise 13 destinations de serveurs racines pour gérer les requêtes d'accès à Internet. Ces serveurs sont chargés de renvoyer lesdites requêtes vers les serveurs DNS de premier niveau appropriés (.com, .fr, etc...).

Le résolveur bind9 exploite par défaut le fichier /usr/share/dns/root.hints pour interroger ces serveurs racines (adresses de a.root-servers.net à m.root-servers.net) et obtenir les réponses aux requêtes d'accès à Internet.

Actuellement bind9 traite les requêtes locales (Ex : ping debian10-vm1.intra.loupipfire.fr) ainsi que les requêtes d'accès à Internet (Ex : ping www.yahoo.fr) et construit son cache en fonction.

Test d'une requête locale :

 [srvlan@srvlan:~$] nslookup ovs.intra.loupipfire.fr

Retour :

Server:        127.0.0.1
Address:    127.0.0.1#53

Name:    ovs.intra.loupipfire.fr
Address: 192.168.3.15

La VM srvlan est l'autorité pour la réponse.

Test d'une requête d'accès à Internet :

 [srvlan@srvlan:~$] nslookup mappy.fr

Retour :

Server:        127.0.0.1
Address:    127.0.0.1#53

Non-authoritative answer:
Name:    mappy.fr
Address: 193.203.32.57

Constat, srvlan n'est plus l'autorité pour la réponse.

Vous allez à présent, pour alléger le travail de srvlan, demander que les requêtes d'accès à Internet (les demandes de résolutions externes) soient dorénavant traitées par le serveur DNS de votre box Internet.

Editez pour cela le fichier DNS named.conf.options :

[srvlan@srvlan:~$] sudo nano /etc/bind/named.conf.options

et modifiez celui-ci afin qu'il contienne ces lignes :

options {
     directory "/var/cache/bind";
     
     dnssec-validation auto;      # Certaines Box gèrent mal la
                                                    # valeur auto qu'il faut dans
                                                    # ce cas remplacer par no 

     // Limiter les réponses récursives
     // aux réseaux/IP des interfaces du serveur DNS
     allow-recursion { localnets; }; 

     // Pour les autres réseaux/IP,
     // transfert des requêtes DNS vers la box Internet
     forward only;
     forwarders { 192.168.x.z; };      # IP de la box Internet
     
     listen-on-v6 { any; };
};    

Redémarrez maintenant le service bind9 :

[srvlan@srvlan:~$] sudo systemctl restart bind9 

et testez une requête d'accès à Internet :

[srvlan@srvlan:~$] nslookup yahoo.fr

Résultat :

Server:        127.0.0.1
Address:    127.0.0.1#53

Non-authoritative answer:
Name:	yahoo.fr
Address: 124.108.115.101
Name:	yahoo.fr
Address: 212.82.100.151
Name:	yahoo.fr
Address: 106.10.248.151
Name:	yahoo.fr
Address: 98.136.103.24
Name:	yahoo.fr
Address: 74.6.136.151

La résolution externe se fait toujours mais utilisez-vous le DNS de la Box ?

Pour le savoir, remplacez l'IP du paramètre forwarders par une IP quelconque, redémarrez le service bind9 afin de vider le cache DNS actif et relancez la requête :

[srvlan@srvlan:~$] nslookup yahoo.fr 

Résultat :

;; Got SERVFAIL reply from 127.0.0.1, trying nex...
Server:		::1
Address:	::1#53

** server can't find yahoo.fr: SERVFAIL

La résolution externe ne fonctionne plus, vous utilisiez bien le DNS de la Box.

Remettez maintenant la bonne adresse IP.

6 - Tests DNS depuis les VM de la zone LAN

6.1 - VM ovs

Editez le fichier DNS resolv.conf :

[switch@ovs:~$] sudo nano /etc/resolv.conf

et remplacez tout le contenu existant par ceci :

# Fichier resolv.conf - Client DNS

# Nom du domaine local
domain intra.loupipfire.fr 

# Ajout auto du nom de domaine local aux noms d'hôtes
# non pleinement qualifiés
search intra.loupipfire.fr

# Adresses IP du ou des serveurs DNS à interroger
nameserver 192.168.3.1

Installez ensuite le paquet incluant la Cde DNS dig :

[switch@ovs:~$] sudo apt install dnsutils 

et vérifiez l'ID du Name Server pour intra.loupipfire.fr :

[switch@ovs:~$] dig NS intra.loupipfire.fr +short 

Retour :

srvlan.intra.loupipfire.fr.

Pinguez pour terminer les VM suivantes :

[switch@ovs:~$] ping srvlan
[switch@ovs:~$] ping debian10-vm1.intra.loupipfire.fr
[switch@ovs:~$] ping debian10-vm2

et observez les FQDN (hôte+domaine) retournés.

6.2 - VM debian10-vm1 et debian10-vm2

Faites un clic droit sur l'applet réseau NetworkManager :
> Modifier les connexions...

Une fenêtre s'ouvre :
> Sélectionnez la connexion réseau affichée
> Cliquez sur la roue dentée située en bas à gauche

Une fenêtre s'ouvre :
> Onglet Paramètres IPv4

Modifiez ensuite la valeur des champs suivants :
> Serveurs DNS > 192.168.3.1
> Domaines de recherche > intra.loupipfire.fr
> Enregistrer
> Authentifiez-vous si une demande est affichée

Puis redémarrez le réseau pour une MAJ des nouveaux paramètres nameserver et search :

[client-linux@debian10-vmx:~$] su root
Mot de passe : Entrez le MDP de l'administrateur root 
[root@debian10-vmx:~#] systemctl restart NetworkManager
[root@debian10-vmx:~#] sudo cat /etc/resolv.conf

Installez le paquet incluant la Cde DNS nslookup :

 [root@debian10-vmx:~#] apt install dnsutils  

et vérifiez l'IP du Name Server pour intra.loupipfire.fr :

[root@debian10-vmx:~#] nslookup ovs.intra.loupipfire.fr

Retour :

Server:		192.168.3.1
Address:	192.168.3.1#53

Name:	ovs.intra.loupipfire.fr
Address: 192.168.3.15

Pinguez les VM suivantes :

[root@debian10-vmx:~#] ping srvlan.intra.loupipfire.fr
[root@debian10-vmx:~#] ping ovs

et observez les FQDN (hôte+domaine) retournés.

Pour terminer, lancez le navigateur Web et vérifiez le bon accès à Internet.

7 - Simulation de panne

Arrêtez le service DNS fourni par srvlan :

[srvlan@srvlan:~$] sudo systemctl stop bind9

Redémarrez les clients debian10-vm* et ovs afin de vider leurs caches DNS.

Les pings depuis les VM debian10-vm* du § 6.2 devraient échouer.

Redémarrez le service DNS et vérifiez que les pings fonctionnent à nouveau.

Image - Rédacteur satisfait


Voilà, c'est fini pour le DNS statique.
Le mémento 7.2 vous attend à
présent pour installer un serveur
DHCP.

Laisser un commentaire