Table des matières
1. Objectifs
Lors du TP précédent, nous avons mis en place une résolution DNS dans un petit réseau. Ce faisant, nous avons approché le logiciel Bind
dans un premier usage, en tant que résolveur.
Nous allons à présent reprendre ce même réseau, et l’enrichir d’un service supplémentaire : La gestion de la zone interne. Le serveur qui fera autorité sur la zone sera construit également au départ du logiciel Bind
, dans un second usage donc. Soyez attentif à bien saisir les différences et les nuances entre les deux types de serveurs DNS!
Ce TP comporte 2 étapes :
- L’ajout d’un SOA
Bind
dans le réseau existant, permettant d’avoir la résolution forward (nom -> IP) pour toutes les machines du réseau - L’ajout de la zone reverse pour avoir la résolution inverse (IP -> nom)
- Pour les plus avancés d’entre vous, vous pourrez également coupler ce SOA au service DHCP, pour que les entrées concernant les machines clientes puissent être intégrées au DNS et mises à jour en fonction des leases DHCP.
Pour commencer ce TP, il est indispensable que le TP précédent soit finalisé, puisque sans résolution DNS ni DHCP, votre serveur SOA ne servira pas à grand chose.
A la fin de ce TP, vous devrez :
- Savoir utiliser Wireshark et
dig
à bon escient pour observer le fonctionnement (correct ou non) d’un serveur DNS SOA - Etre à l’aise avec les principales directives de
Bind
en mode SOA - Ecrire un fichier de zone correct, en mode forward ou reverse
- Pouvoir expliquer les opérations effectuées par un serveur SOA lorsqu’il répond à des requêtes DNS
- Valider le bon fonctionnement d’un SOA
2. Mise en place du SOA et de la zone forward
Pour commencer, lancez votre labo GNS3 et assurez-vous que tout fonctionne, à savoir que les clients DNS (directeur et atelier) doivent avoir une adresse IP dynamique et accéder à Internet en utilisant le résolveur pour sa résolution DNS. Quant aux serveurs, ils doivent être configurés en IP statiques conformément au schéma ci-dessous.
Les étapes à suivre pour cette partie du TP sont les suivantes :
2.1. Configuration réseau du serveur SOA
Sur la machine soa
, vérifiez la configuration de l’interface réseau de cette machine en IP fixe.
Faut-il lui configurer un résolveur?
2.2. Configuration du SOA
Nous allons à présent configurer Bind en mode “authoritative” (name server) sur la machine soa
. Pour cela, vous pouvez copier le fichier de configuration utilisé pour le résolveur dans le TP6, puis l’adapter au rôle de SOA.
Réfléchissez : de quels clients notre SOA doit-il accepter les requêtes? Y a t’il une différence selon qu’il s’agisse d’un SOA interne (comme ici) ou dun SOA public (par exemple ephec.be)?
- Vérifiez bien que la machine
soa
accepte les requêtes sur la/les bonnes interfaces - Définissez les IPs pour lesquelles le SOA acceptera de répondre aux requêtes. Utilisez pour cela la directive
allow-query
(même syntaxe queallow-recursion
). - Contrairement aux résolveurs, un SOA ne doit pas répondre aux requêtes récursives. Indiquez donc
none
dans la directiveallow-recursion
. Ajoutez en outre la directiverecursion no
:
allow-recursion { none; };
recursion no
2.3. Fichier de zone
Une fois le SOA configuré pour recevoir des requêtes des machines spécifiées, nous allons maintenant nous intéresser aux informations qu’il va fournir à ses clients.
Un SOA répond aux requêtes concernant la zone dont il a la responsabilité. Il s’agit, dans notre cas, de la zone woodytoys.lab
. Nous ne nous intéressons pour le moment qu’à la partie interne du réseau, il s’agira donc de la zone privée, donnant les informations concernant les services joignables en interne. Ces services sont typiquement joignable via l’adressage IP interne de l’entreprise. Nous travaillerons sur la zone publique plus tard, au second semestre.
Vous allez donc créer le fichier de zone correspondant à la zone woodytoys.lab
interne. Pour cela, vous pouvez vous inspirer de l’exemple de la section 12.3.3 du guide de référence Red Hat.
Paramètres de la zone
Pour commencer, remarquez le premier Resource Record du fichier : il s’agit du record SOA
@ IN SOA dns1.example.com. hostmaster.example.com. (
2001062501 ; serial
21600 ; refresh after 6 hours
3600 ; retry after 1 hour
604800 ; expire after 1 week
86400 ) ; minimum TTL of 1 day
Ce record va définir des informations administratives importantes concernant la zone : son NS primaire, l’adresse de la personne responsable, puis, dans les paramètres :
- Le Serial Number : ce numéro doit être incrémenté à chaque édition du fichier de zone. En cas d’utilisation d’un serveur secondaire, ce dernier utilise le numéro de série du fichier de zone du serveur primaire pour savoir quand le fichier a été modifié et s’il doit lancer un “transfert de zone” pour se resynchroniser. Une bonne pratique extraite du RFC 1912 consiste à utiliser 10 chiffres : 8 pour la date à l’envers, et 2 pour indiquer le numéro du changement dans ceux effectués ce jour-là. C’est cette syntaxe qui est utilisée dans l’exemple du site Red Hat.
- Plusieurs valeurs en seconde, définissant différents timers ou TTL pour la gestion des réplications et des caches.
Définition des ressources de la zone
Les machines devant figurer dans ce fichier de zone au stade actuel sont :
- Le serveur SOA (appelé
soa
) - Le résolveur (appelé
resolv
) - Le serveur DHCP (appelé
dhcp
) - Le serveur web (appelé
www
), que vous aurez auparavant configuré en IP statique conformément au schéma ci-dessous. - Et le serveur mail (appelé
mail
), idem que pourwww
.
Complétez le fichier de zone avec les ressources records correspondant à ces cinq serveurs.
2.4. Finalisation et validation de la configuration du SOA
Revenez ensuite dans le fichier named.conf
. Définissez la zone woodytoys.lab
, en indiquant que le serveur gère cette zone en tant que “master” et en spécifiant le chemin vers le fichier de zone que vous avez créé.
Vérifier la validité de la syntaxe de votre configuration avec les utilitaires named-checkconf
et named-checkzone
. Le premier permet de vérifier le fichier de configuration, tandis que le second vérifie la syntaxe de la zone.
Démarrer le serveur avec la commande named
.
Pour lancer le serveur en arrière plan, vous pouvez simplement ajouter un
&
à la fin de la ligne de commande.
Si vous l’avez démarré en avant-plan et souhaitez le basculer en arrière-plan, vous pouvez utilisezctrl-z
pour interrompre le processus, puis la commandebg
pour le redémarrer mettre en arrière plan.
Faites les vérifications habituelles, avec ps
et netstat -nltpu
pour vous assurez que bind
est bien démarré.
Vérifiez le fonctionnement du SOA depuis une autre machine (notamment le résolveur) :
- avec
dig @<IP SOA> <query>
- ou avec un
nslookup <query> <IP SOA>
depuis une autre machine
2.5. Ajustement du résolveur
Pour le moment, le résolveur effectue des requêtes à la place des clients, en s’adressant au DNS public via les serveurs racines.
Cependant, notre zone interne n’existe pas dans le DNS public. Il faut donc dire au résolveur que pour cette zone en particulier, il ne doit pas faire de la résolution récursive, mais transférer (“forwarder”) les requêtes vers notre serveur SOA.
Pour cela, revenez dans le fichier de configuration du résolveur, et ajoutez-lui ceci :
zone "woodytoys.lab" IN {
type forward;
forwarders { 192.168.0.3; };
forward only;
};
Pour que cela fonctionne, nous devons en outre (malheureusement) désactiver le DNSSEC sur le résolveur. Le DNSSEC est un système permettant de vérifier l’authenticité des ressources records. Nous ne l’exploiterons pas dans le cadre de ce cours-ci, et laissons donc de coté pour le moment cette étape de sécurisation importante.
Pour désactivez le DNSSEC, ajoutez la ligne suivante dans la section “options” du fichier named.conf
:
dnssec-validation no;
Retenez bien que désactiver le DNSSec est une mauvaise idée en production! Au second semestre, vous devrez l’activer et le configurer dans vos réseaux.
Testez à présent que n’importe quel poste client peut joindre les autres machines à partir des noms DNS (par ex : ping www.woodytoys.lab
)
3. Mise en place de la zone inverse
Si votre zone woodytoys.lab
fonctionne, vous pouvez à présent configurer votre zone inverse.
3.1. Rappels sur le DNS inverse et mise en pratique
La zone inverse (ou reverse) contiendra les ressources records de type PTR
, qui permettent, à l’inverse des records A ou AAAA, de récupérer le nom d’une machine au départ de son adresse IP. Pour cela, il faut transformer l’adresse IPv4 sur laquelle porte la requête en un nom DNS particulier : il se construit en inversant les octets de l’adresse IPv4, et en ajoutant le domaine spécial in-addr.arpa
.
Dans notre cas, nous utilisons le préfixe 192.168.0.0/24
. Nos machines différeront au niveau du dernier octet. Le nom de domaine de la zone inverse sera alors constitué des trois premiers octets inversés, suivi du nom de domaine générique, ce qui donne : 0.168.192.in-addr.arpa
.
De la même manière, le nom DNS inverse de la machine dhcp
dont l’IP est 192.168.0.1
sera 1.0.168.192.in-addr.arpa
.
3.2. Configuration de la zone inverse
Pour configurer la zone inverse, le principe est similaire à ce qui a été effectué pour la zone dite “directe” (forward) :
- Créez le fichier de zone concernant la zone reverse
0.168.192.in-addr.arpa
. Ajoutez-y tous les records inverses (PTR) correspondant aux IPs des serveurs. - Vérifiez que la configuration est correcte avec
named-checkconf
etnamed-checkzone
. N’oubliez pas de redémarrer le serveur, et de valider le fonctionnement avecdig
/nslookup
. - Modifiez le fichier de configuration du résolveur pour qu’il forwarde les requêtes pour la zone reverse au SOA.
Les PTR doivent pointer vers les FQDN des machines concernées, et non vers des noms relatifs ! Par ex :
1 IN PTR ns.woodytoys.lab.
et non1 IN PTR ns
Savez-vous expliquer pourquoi il faut mettre ici des FQDNs, alors que des noms relatifs peuvent être utilisés dans le fichier de zone directe ?
4. DNS dynamique (bonus)
Dans les étapes précédentes de ce TP, nous avons mis en place la résolution DNS directe et inverse des noms des serveurs de la zone interne woodytoys.lab
.
Malheureusement, cette résolution via un fichier de zone statique ne fonctionne pas pour les adresses des postes client, car ces derniers obtiennent leurs adresses IP de manière dynamique.
Il est possible d’intégrer les clients DHCP à une zone interne, en couplant le serveur DNS SOA et le serveur DHCP. De la sorte, lorsqu’une entrée DHCP est ajoutée ou modifiée dans le serveur DHCP, ce dernier notifie le serveur SOA afin que le fichier de zone soit mis à jour en fonction. C’est possible dans notre cas, notamment car les deux serveurs sont édités par le même organisme (l’ISC), et leurs configurations s’intègrent donc facilement.
Nous allons voir ici la procédure à suivre pour construire un tel scénario.
4.1. Couplage du DHCP et du SOA
Pour que les deux serveurs acceptent de communiquer, et pour que le SOA accepte de modifier son fichier de zone sur demande du DHCP, il faut qu’ils partagent une clé servant d’authentification. Nous allons générer cette clé sur le SOA puis la copieront dans la configuration du DHCP :
- Sur le serveur
soa
, générez une clé via l’utilitairerndc
, installé par défaut avecbind
:rndc-confgen
- Dans l’output de cette commande, récupérez la clé, que vous reconnaitrez car elle aura un format similaire à ceci :
key "rndc-key" { algorithm hmac-md5; secret "something long"; };
- Copiez/collez cette clé dans le fichier
named.conf
du SOA, et ajoutez la directive suivante dans chacune des deux zones pour indiquer qu’on autorise les mises à jour si la clé indiquée figure dans la requête :allow-update { key rndc-key; };
-
Validez cette configuration avec les outils adéquat, puis redémarrer le serveur SOA pour prendre en compte cette nouvelle configuration.
- Sur le serveur DHCP, ajoutez la clé en mettant à jour le fichier
dhcp.conf
(à adapter en fonction de votre clé) , et ajoutez également les directives correspondant au “ddns” (DNS dynamique). Configurez les deux zones en indiquant le serveur à contacter et la clé à utiliser.ddns-updates on; ddns-update-style standard; authoritative; default-lease-time 7200; max-lease-time 7200; key "rndc-key" { algorithm hmac-sha256; secret "Something long"; };
zone woodytoys.lab. {
primary 192.168.0.3;
key rndc-key;
}
zone 0.168.192.in-addr.arpa.{
primary 192.168.0.3;
key rndc-key;
}
subnet 192.168.0.0 netmask 255.255.255.0 {
option routers 192.168.0.254;
option subnet-mask 255.255.255.0;
range 192.168.0.10 192.168.0.100;
option domain-name-servers 192.168.0.2;
option domain-name "woodytoys.lab";
}
- Redémarrez le serveur DHCP et validez-en le fonctionnement. Vous pouvez pour cela changer le hostname d’un des postes client dans GNS3 et relancer un lease DHCP depuis sa console :
dhclient -r // Renoncement au "lease actuel" dhclient // relance d'un échange DHCP DORA pour obtenir un nouveau lease
- Vérifiez les logs dans
/var/log/named/misc.log
(si vous utilisezbind
en arrière-plan) : Normalement, vous devriez avoir des indications comme quoi les fichiers de zone ont été mis à jour. Si les logs indiquent des problèmes de permissions : Vérifiez que les deux fichiers de logs appartiennent bien à l’utilisateurbind
. - Testez avec un ping depuis l’autre poste client :
ping mynewclientname.woodytoys.lab
- Idem pour tester le reverse : Faites un
dig @192.168.0.3 -x <IP>
pour vérifier que les adresses IP attribuées par DHCP sont bien associées aux noms d’hôte des postes clients
Si votre DNS dynamique n’a pas l’air de se mettre à jour de manière adéquate, n’oubliez pas que trois serveurs interagissent : le DHCP et le SOA pour la mise à jour des adresses, mais également le résolveur comme “relais” des requêtes provenant des clients. Chacun d’eux peut être source de dysfonctionnement. Pour résoudre les problèmes éventuels, vous pouvez :
- Tout d’abord et comme toujours : utiliser Wireshark pour comprendre les échanges et identifier le serveur responsable du problèmen
- Vider la cache du résolveur avec la commande
rndc flush
,- Réinitialiser les zone DNS dynamiques dans le SOA en effaçant les fichiers
<zone>.jnl
,- Et surtout, surveiller les logs pour comprendre quel serveur effectue quelle opération !