Afficher la pageAnciennes révisionsLiens de retourHaut de page Cette page est en lecture seule. Vous pouvez afficher le texte source, mais ne pourrez pas le modifier. Contactez votre administrateur si vous pensez qu'il s'agit d'une erreur. ===== TP Mise en oeuvre de bind sous Linux Debian ===== **//Version 1.2.8 - Mis à jour le le 2023-02-03//** //Philippe Sevre// ===== Objectifs ===== * installer un serveur DNS **bind9** sur une machine //Debian Bullseye// * mettre en évidence le fonctionnement du serveur DNS maitre au moyen d'outils de test (//host//, //nslookup// ou //dig//) dans les situations suivantes : * nom courts/FQDN * résolution directe/inverse * depuis un client local/distant * test des différents types d'enregistrements (A, CNAME, PTR, SOA, ...) * résolution hors zone d'autorité (redirection DNS) * installer un serveur esclave * mettre en évidence le transfert de zone du maître vers l'esclave * autres pistes * délégation de zones * utilisation d'ACL * scripting pour automatiser la gestion des fichiers de zone ==== Les concepts ==== * domaine, sous-domaine * zone d'autorité, zone directe/inverse * enregistrements SOA, NS, A, CNAME, MX, PTR * le TTL * résolution directe/inverse * requête itérative/récursive * serveur maître/esclave/cache * transfert de zone * délégation de zone * les roots serveurs * les clients (résolveurs) * les outils de test * tolérance de panne * sécurité ===== Prérequis ===== * une machine //Linux Debian Bullseye// opérationnelle avec la couche réseau fonctionnelle * le domaine concerné s'appelle **domaine.lan** * le réseau est en **192.168.1.0** * le serveur s'appelle **srv1** (192.168.1.1) * on dispose d'une machine **poste1** (192.168.1.100) ==== Schéma ==== {{:tp-bind.png|}} ===== Installation ===== ==== Paquetages à installer ==== On installera les paquetages suivants : //bind9//, //bind9-doc//, //dnsutils// (pour les clients) ==== Paramétrage du serveur maître ==== Les fichier de configuration sont situés dans ///etc/bind// === le fichier /etc/bind/named.conf === Il contient des //includes// vers les autres fichiers de configuration. === le fichier /etc/bind/named.conf.local === Il doit comprendre les //déclarations de zone// : ici la //zone maitre directe// **domaine.lan** et la //zone inverse arpa// **1.168.192-in-addr.arpa**. // zone directe zone "domaine.lan" { type master; file "/etc/bind/db.domaine.lan"; }; // zone inverse zone "1.168.192.in-addr.arpa" { type master; notify no; file "/etc/bind/db.domaine.lan.rev"; }; === le fichier de zone directe db.domaine.lan === On pourra se servir du fichier //db.local// comme base de travail en le copiant. Il devra comporter au minimum un enregistrement SOA, un NS et un A correspondant au NS. On créera également d'autres enregistrements A et des Alias (CNAME). : * poste1 192.168.1.50 * poste2 192.168.1.51 * www cname poste1 (www est un alias de poste1) === le fichier de zone inverse db.domaine.lan.rev === On pourra se servir du fichier //db.local// comme base. Il devra comporter au minimum * un enregistrement **SOA** (Start Of Authority), * un **NS** (Name Server) * et un **PTR** correspondant au **NS**. On créera également d'autres enregistrements PTR. **Remarque générale à propos des test** Il est très intéressant d'ouvrir une console (avec Alt-Fx) qui servira à observer les logs de //bind9// au moyen de la commande suivante : tail -f /var/log/syslog Il peut être intéressant en cas de problème de syntaxe sur les fichiers de zone, de tester ceux-ci avec la commande //zonecheck// Il faudra également prendre garde aux point terminaux **obligatoires** dans les FQDN. === le fichier /etc/resolv.conf === doit contient les élements suivants : search domaine.lan nameserver 127.0.0.1 === Tests locaux === * préparer la console d'observation des logs (voir plus haut) * relancer le démon bind9 * vérifier le fonctionnement effectif de ce dernier en examinant les logs * tester host srv1.domaine.lan : résultat ? host poste1.domaine.lan : résultat ? host srv1 : resultat ? host poste1 : résultat ? host 192.168.1.1 : resultat ? host 192.168.1.100 : résultat ? host -l domaine.lan : résultat ? host -t soa domaine.lan : résultat ? host google.com : resultat ? === Tests hors zone d'autorité === Il est nécessaire de spécifier un ou plusieurs serveurs (**forwarder**) pour la redirection (on pourra utiliser ceux du lycée). Le paramètre à changer est le suivant dans le fichier **/etc/bind/named.conf.options** (à adapter aux conditions locales): forwarders { 1.2.3.4; ici forwarder 1 5.6.7.8; ici forwarder 2 }; Et mettre à //no// **dnssec-validation** (pour une éventuelle certification) Une fois effectué le changement, relancer le démon //bind// puis tester à nouveau la résolution. Il pourra être intéressant d'examiner les requêtes DNS sortantes avec : <code bash> tcpdump port 53 </code> host google.com : resultat ? === Tests depuis un client Windows === Après avoir vérifié la configuration du client Windows (serveur DNS, nom de domaine DNS), tester la résolution de noms dans les mêmes conditions. ===== Installation du serveur esclave ===== * installer les mêmes paquetages sur la machine **srv2** (192.168.1.2) * sur le maître (**srv1**), dans les fichier de zone directe et inverse, ajouter un enregistrement **NS** correspondant au 2ème serveur DNS (**srv2**) ainsi que l'enregistrement **A** correspondant. * Sur le maitre, relancer //bind// * l'esclave doit disposer d'un fichier **/etc/bind/named.conf.local** dans lequel on définit les zones esclaves et les adresses du serveur maître pour récupérer les fichiers de zone. * le plus simple est de récupérer celui du serveur maitre et de la tranferer sur l'esclave avec la commande //scp//. On peut alors l'éditer pour obtenir : <code> // zone directe zone "domaine.lan" { type slave; file "/etc/bind/db.domaine.lan"; masters { 192.168.1.1; }; }; // zone inverse zone "1.168.192.in-addr.arpa" { type slave; notify no; file "/etc/bind/db.domaine.lan.rev"; masters { 192.168.1.1; }; }; </code> ==== Remarque ==== :!: Depuis la version 9.9 de bind, les fichiers de zone sont transférés vers les esclaves au format **binaire** de façon à améliorer les performances. En conséquence, il n'est plus possible d'afficher ou d'éditer les fichiers de zone de l'esclave. Pour revenir au comportement initial (fichiers de zone au format //texte//), on pourra ajouter la clause ''masterfile-format text'' dans le fichier **named.conf.local** <code> zone "domaine.lan" { type slave; file "/etc/bind/db.domaine.lan"; masters { 192.168.1.1; }; masterfile-format text; }; </code> ==== Mise en évidence du transfert de zone ==== Depuis l'esclave : Vérifier que le fichier **resolv.conf** contienne les élements suivants : search domaine.lan server 127.0.0.1 # on résoud localement * relancer le démon //bind// * vérifier dans les logs le transfert effectif des fichiers de zone ainsi que la présence des fichier db. dans le répertoire ///etc/bind// * en cas de problème de transfert, vérifier les droits en écriture du démon //bind// dans le répertoire ///etc/bind//. Au besoin, les adapter avec la commande //chmod//. Dans ce cas, relancer le démon //bind// puis vérifier la présence des fichiers //db// : le transfert doit être pris en charge par les serveurs DNS hors de toute intervention humaine. :!: on doit éditer le fichier **/etc/apparmor.d/usr.sbin.named ** et changer les droits pour le répertoire /etc/bind : <code > /etc/bind/** rw, </code> * on doit alors relancer le service **apparmor** * on peut alors tester la résolution de noms dans les mêmes conditions que précedemment. ==== Mise en évidence du fonctionnement du client ==== * Modifier le paramétrage du client Windows pour lui indiquer l'existence de deux serveurs DNS. * couper le serveur maître * tester la résolution depuis le client Windows (locale et hors zone) * conclusion ==== Autres pistes ==== * tester les ACL pour le transfert de zone et les requêtes en restreignant les transferts et les requêtes tp_bind.txt Dernière modification : 2023/02/03 00:19de ps