{"id":162,"date":"2012-11-14T15:00:39","date_gmt":"2012-11-14T14:00:39","guid":{"rendered":"http:\/\/pro.richardbaret.fr\/?p=162"},"modified":"2012-11-14T15:03:25","modified_gmt":"2012-11-14T14:03:25","slug":"installation-et-configuration-dun-serveur-dns-sous-debian","status":"publish","type":"post","link":"https:\/\/pro.richardbaret.fr\/?p=162","title":{"rendered":"Installation et configuration d&rsquo;un serveur DNS sous Debian"},"content":{"rendered":"<p>Cet article sera consacr\u00e9 \u00e0 la mise en place d&rsquo;un serveur DNS sous Debian, en utilisant Bind9, afin de r\u00e9soudre les noms de machines de notre futur domaine.<\/p>\n<h1>Installation de Bind9<\/h1>\n<p style=\"text-align: justify;\">Avant toute chose nous devons installer Bind, en passant par le gestionnaire <em>apt<\/em> :<\/p>\n<pre class=\"brush:shell\">riri@srv-debian:~$ sudo apt-get install bind9<\/pre>\n<p style=\"text-align: justify;\">Apt nous informe qu&rsquo;un paquetage suppl\u00e9mentaire sera install\u00e9 (bind9-utils) et nous demande si l&rsquo;on souhaite continuer. On accepte, cela va de soi.<br \/>\nUne fois l&rsquo;installation termin\u00e9e, le service bind d\u00e9marre. Nous allons maintenant nous attaquer \u00e0 la configuration du fichier de r\u00e9solution de noms. Dans cet exemple nous consid\u00e8rerons un domaine interne, nomm\u00e9 \u00ab\u00a0mondomaine.lan\u00a0\u00bb.<\/p>\n<p><!--more--><\/p>\n<h1>Configuration de Bind9<\/h1>\n<p style=\"text-align: justify;\">La configuration de bind se fait au sein de 2 fichiers, un principal et un secondaire nomm\u00e9s <strong>\/etc\/bind\/named.conf<\/strong> et <strong>\/etc\/bind\/db.mondomaine.lan<\/strong>. Le premier fichier liste les zones de r\u00e9solution de notre serveur (les diff\u00e9rents domaines) et les fichiers de zone associ\u00e9s, le second est le fichier de configuration de zone en lui m\u00eame. Commen\u00e7ons par \u00e9diter le fichier named.conf :<\/p>\n<pre class=\"brush:shell\">riri@srv-debian:~$ sudo nano \/etc\/bind\/named.conf<\/pre>\n<p>Voici son contenu :<br \/>\n<code><br \/>\n<\/code><\/p>\n<pre class=\"brush:shell\">\/\/ This is the primary configuration file for the BIND DNS server named.\r\n\/\/\r\n\/\/ Please read \/usr\/share\/doc\/bind9\/README.Debian.gz for information on the\r\n\/\/ structure of BIND configuration files in Debian, *BEFORE* you customize\r\n\/\/ this configuration file.\r\n\/\/\r\n\/\/ If you are just adding zones, please do that in \/etc\/bind\/named.conf.local\r\n\r\ninclude \"\/etc\/bind\/named.conf.options\";\r\n\r\n\/\/ prime the server with knowledge of the root servers\r\nzone \".\" {\r\n\ttype hint;\r\n\tfile \"\/etc\/bind\/db.root\";\r\n};\r\n\r\n\/\/ be authoritative for the localhost forward and reverse zones, and for\r\n\/\/ broadcast zones as per RFC 1912\r\n\r\nzone \"localhost\" {\r\n\ttype master;\r\n\tfile \"\/etc\/bind\/db.local\";\r\n};\r\n\r\nzone \"127.in-addr.arpa\" {\r\n\ttype master;\r\n\tfile \"\/etc\/bind\/db.127\";\r\n};\r\n\r\nzone \"0.in-addr.arpa\" {\r\n\ttype master;\r\n\tfile \"\/etc\/bind\/db.0\";\r\n};\r\n\r\nzone \"255.in-addr.arpa\" {\r\n\ttype master;\r\n\tfile \"\/etc\/bind\/db.255\";\r\n};\r\n\r\ninclude \"\/etc\/bind\/named.conf.local\";<\/pre>\n<p><code><br \/>\n<\/code><\/p>\n<p style=\"text-align: justify;\">On voit qu&rsquo;il contient d\u00e9j\u00e0 des informations. Celles-ci concernent la r\u00e9solution de noms de la machine locale, la r\u00e9solution d&rsquo;adresses inverse toujours pour la machine locale, et le chemin de configuration des serveurs DNS racine. Nous allons compl\u00e9ter ce fichier en rajoutant au dessus de la ligne <code>\"include \"\/etc\/bind\/named.conf.local\";\" <\/code> les lignes qui vont permettre de d\u00e9clarer une nouvelle zone correspondant \u00e0 notre domaine :<\/p>\n<pre class=\"brush:shell\">\/\/ Configuration du domaine mondomaine.lan\r\nzone \"mondomaine.lan\" { \/\/ On d\u00e9clare le nom de notre zone\r\n\ttype master; \/\/ Ce serveur sera serveur DNS principal de notre domaine\r\n\tfile \"\/etc\/bind\/db.mondomaine.lan\"; \/\/ Et il utilisera ce fichier de zone pour r\u00e9soudre les noms\r\n};<\/pre>\n<p><code><br \/>\n<\/code><br \/>\nVous pouvez supprimer les commentaires \u00e0 votre convenance.<br \/>\nOn enregistre et on quitte. Passons ensuite \u00e0 la configuration de notre fichier de zone :<\/p>\n<pre class=\"brush:shell\">riri@srv-debian:~$ sudo nano \/etc\/bind\/db.mondomaine.lan<\/pre>\n<p>C&rsquo;est l&rsquo;\u00e9tape la plus d\u00e9licate et j&rsquo;ai mis en commentaires toutes les explications. Au d\u00e9part notre fichier est vide. Nous allons devoir le remplir avec les lignes suivantes :<br \/>\n<code><br \/>\n<\/code><\/p>\n<pre class=\"brush:shell\">$ORIGIN mondomaine.lan.\r\n$TTL 604800\r\n@ IN SOA srv-debian.mondomaine.lan. root.mondomaine.lan. (\r\n\t2012111401 \t; Cette ligne est le num\u00e9ro de s\u00e9rie du fichier\r\n\t\t\t\t; Elle doit \u00eatre inc\u00e9ment\u00e9e \u00e0 chaque modification\r\n\t\t\t\t; afin de pas pas poser de souci de synchronisation\r\n\t\t\t\t; dans le cas de la pr\u00e9sence de serveurs secondaires\r\n\t\t\t\t; Par convention on utilise une date \u00e0 l'envers\r\n\t\t\t\t; suivie de 2 chiffres correspondant au num\u00e9ro de modif\r\n\t\t\t\t;\r\n\t604800 \t\t; Cette ligne repr\u00e9sente le d\u00e9lai en secondes au bout\r\n\t\t\t\t; duquel le serveur dns secondaire va contacter le serveur\r\n\t\t\t\t; maitre. S'il \u00e9choue, il r\u00e9essaiera au bout du d\u00e9lai de\r\n\t\t\t\t; retry d\u00e9fini en secondes \u00e0 la ligne en dessous\r\n\t\t\t\t;\r\n\t\t\t\t;\r\n\t86400 \t\t; Retry\r\n\t2419200 \t; D\u00e9lai au bout duquel le serveur maitre est consid\u00e9r\u00e9 comme\r\n\t\t\t\t; inactif\r\n\t604800)<\/pre>\n<p><code><br \/>\n<\/code><\/p>\n<p style=\"text-align: justify;\">Petite explication sur les 2 premi\u00e8res lignes : $TTL exprime la dur\u00e9e de validit\u00e9 du cache (la dur\u00e9e pendant laquelle une correspondance nom&lt; -&gt;adresse est consid\u00e9r\u00e9 comme valide sans avoir a \u00eatre rafraichie). La seconde ligne :<\/p>\n<p><code>@ IN SOA srv-debian.mondomaine.lan. root.mondomaine.lan.<\/code><br \/>\nsignifie :<br \/>\n&#8211; @ IN SOA : On d\u00e9clare une zone d&rsquo;autorit\u00e9, SOA signifie Start of Authority<br \/>\n&#8211; srv-debian.mondomaine.lan : le nom du serveur DNS<br \/>\n&#8211; root.mondomaine.lan : l&rsquo;adresse de contact. Le premier point en partant de la gauche sera transform\u00e9 en \u00ab\u00a0@\u00a0\u00bb. Ici l&rsquo;adresse de contact sera root@mondomaine.lan<\/p>\n<p>Le principal est fait. Il faut maintenant affiner notre fichier en le compl\u00e9tant avec certaines informations. On rajoute \u00e0 la suite :<br \/>\n<code><br \/>\n<\/code><\/p>\n<pre class=\"brush:shell\">@\tNS\tsrv-debian.mondomaine.lan. ;Nom du serveur de noms\r\nsrv-debian \tIN A \t10.0.0.2 \t\t;Adresse IP du serveur de noms\r\nsrv-debian \tHINFO \t\"Intel Core i5 750\" \"Debian Lenny\" ;Infos compl\u00e9mentaires<\/pre>\n<p><code><br \/>\n<\/code><\/p>\n<p style=\"text-align: justify;\">Ces 3 lignes vont permettre au serveur de se trouver lui-m\u00eame.<br \/>\nLes lignes suivantes vont permettre d&rsquo;une part d&rsquo;assurer la correspondance nom&lt; -&gt;adresse des machines du r\u00e9seau mais aussi les alias lorsque par exemple on veut faire pointer plusieurs noms vers une seule et m\u00eame machine. Dans notre cas, il n&rsquo;y a qu&rsquo;une seule machine sur le r\u00e9seau mais on pr\u00e9voit par exemple d&rsquo;ajouter un autre serveur d\u00e9di\u00e9 aux mails et au serveur web. Compl\u00e9tons notre fichier en pr\u00e9vision de ces futurs ajouts (il sera toujours possible de modifier le fichier par la suite) :<\/p>\n<p><code><br \/>\n<\/code><\/p>\n<pre class=\"brush:shell\">; Les lignes suivantes d\u00e9finissent la correspondance entre les noms et les IP\r\nsrv-mail \tIN A \t10.0.0.3\r\nsrv-db \t\tIN A \t10.0.0.4\r\nsrv-proxy \tIN A \t10.0.0.254\r\nsrv-dc \t\tIN A \t10.0.0.1\r\n\r\n; Les lignes suivantes sont des alias entre des noms virtuels et des noms r\u00e9els\r\npop \t\tIN CNAME \tsrv-mail\r\nsmtp \t\tIN CNAME \tsrv-mail\r\nwww \t\tIN CNAME \tsrv-db\r\nad \t\tIN CNAME \tsrv-dc\r\nproxy \t\tIN CNAME \tsrv-proxy<\/pre>\n<p>Notre fichier de zone est maintenant complet ! R\u00e9capitulatif de son contenu :<\/p>\n<pre class=\"brush:shell\">$ORIGIN mondomaine.lan.\r\n$TTL 604800\r\n@ IN SOA srv-debian.mondomaine.lan. root.mondomaine.lan. (\r\n\t2012111401 \t; Cette ligne est le num\u00e9ro de s\u00e9rie du fichier\r\n\t\t\t\t; Elle doit \u00eatre inc\u00e9ment\u00e9e \u00e0 chaque modification\r\n\t\t\t\t; afin de pas pas poser de souci de synchronisation\r\n\t\t\t\t; dans le cas de la pr\u00e9sence de serveurs secondaires\r\n\t\t\t\t; Par convention on utilise une date \u00e0 l'envers\r\n\t\t\t\t; suivie de 2 chiffres correspondant au num\u00e9ro de modif\r\n\t\t\t\t;\r\n\t604800 \t\t; Cette ligne repr\u00e9sente le d\u00e9lai en secondes au bout\r\n\t\t\t\t; duquel le serveur dns secondaire va contacter le serveur\r\n\t\t\t\t; maitre. S'il \u00e9choue, il r\u00e9essaiera au bout du d\u00e9lai de\r\n\t\t\t\t; retry d\u00e9fini en secondes \u00e0 la ligne en dessous\r\n\t\t\t\t;\r\n\t\t\t\t;\r\n\t86400 \t\t; Retry\r\n\t2419200 \t; D\u00e9lai au bout duquel le serveur maitre est consid\u00e9r\u00e9 comme\r\n\t\t\t\t; inactif\r\n\t604800 )\r\n\r\n@ NS srv-debian.mondomaine.lan. ;Nom du serveur de noms\r\nsrv-debian \tIN A 10.0.0.2 \t\t;Adresse IP du serveur de noms\r\nsrv-debian \tHINFO \"Intel Core i5 750\" \"Debian Lenny\" ;Infos compl\u00e9mentaires\r\n\r\n; Les lignes suivantes d\u00e9finissent la correspondance entre les noms et les IP\r\nsrv-mail \tIN A 10.0.0.3\r\nsrv-db \t\tIN A 10.0.0.4\r\nsrv-proxy \tIN A 10.0.0.254\r\nsrv-dc \t\tIN A 10.0.0.1\r\n\r\n; Les lignes suivantes sont des alias entre des noms virtuels et des noms r\u00e9els\r\npop \t\tIN CNAME srv-mail\r\nsmtp \t\tIN CNAME srv-mail\r\nwww \t\tIN CNAME srv-db\r\nad \t\tIN CNAME srv-dc\r\nproxy \t\tIN CNAME srv-proxy<\/pre>\n<p>On enregistre puis on ferme le fichier. Il faut maintenant red\u00e9marrer le serveur DNS pour qu&rsquo;il prenne en compte notre nouvelle configuration :<\/p>\n<pre class=\"brush:shell\">riri@srv-debian:~$ sudo \/etc\/init.d\/bind9 restart<\/pre>\n<h1>Test de la configuration<\/h1>\n<p style=\"text-align: justify;\">Pour v\u00e9rifier que notre serveur DNS fonctionne bien, nous allons param\u00e9trer une machine du r\u00e9seau pour qu&rsquo;elle l&rsquo;utilise en tant que serveur DNS principal. A des fins de test j&rsquo;ai install\u00e9 Ubuntu sur une machine virtuelle reli\u00e9e au r\u00e9seau de notre serveur mais ca marche aussi bien sous Windows. Sur la machine de test on sp\u00e9cifie qu&rsquo;elle doit utiliser en serveur dns primaire l&rsquo;adresse du serveur que nous venons de configurer (modifier \/etc\/resolv.conf sous linux ou les propri\u00e9t\u00e9s de la carte r\u00e9seau sous windows) puis on lance un terminal (ou l&rsquo;invite de commandes dos) et on tape :<\/p>\n<p><code>nslookup nomdelamachine<\/code>.<br \/>\nCette commande doit nous retourner l&rsquo;IP de la machine cible, comme ceci :<\/p>\n<pre class=\"brush:shell\">riri@srv-debian:~$ nslookup smtp\r\nServer: 10.0.0.2\r\nAddress: 10.0.0.2#53\r\nsmtp.mondomaine.lan canonical name = srv-mail.mondomaine.lan.\r\nName: srv-mail.mondomaine.lan\r\nAddress: 10.0.0.3<\/pre>\n<p style=\"text-align: justify;\">Notre serveur DNS effectue correctement son travail. Cependant il faut lui ajouter une fonctionnalit\u00e9 : la r\u00e9solution de noms inverse, c&rsquo;est \u00e0 dire retrouver le nom d&rsquo;une machine \u00e0 partir de son adresse IP. Pour cela nous allons d\u00e9clarer une zone de r\u00e9solution inverse dans notre named.conf et g\u00e9n\u00e9rer le fichier de zone associ\u00e9<\/p>\n<h1>Configuration de la zone de r\u00e9solution inverse<\/h1>\n<p>Comme pour la zone de recherche directe configur\u00e9e pr\u00e9cedemment, nous allons d\u00e9clarer une nouvelle zone dans le fichier named.conf en y ajoutant les lignes suivantes \u00e0 la suite de la d\u00e9claration de la zone mondomaine.lan :<\/p>\n<pre class=\"brush:shell\">\/\/ D\u00e9claration de la zone de recherche invers\u00e9e\r\nzone \"0.0.10.in-addr.arpa\" {\r\n\ttype master;\r\n\tfile \"\/etc\/bind\/db.0.0.10\r\n};<\/pre>\n<p>La ligne <em>0.0.10.in-addr.arpa<\/em> repr\u00e9sente l&rsquo;adresse de notre r\u00e9seau \u00e0 l&rsquo;envers (pour un r\u00e9seau en 10.0.0.x)<br \/>\nOn enregistre le fichier et on quitte. Il faut ensuite g\u00e9n\u00e9rer le fichier de zone :<\/p>\n<pre class=\"brush:shell\">riri@srv-debian:~$ sudo nano \/etc\/bind\/db.0.0.10<\/pre>\n<p>On y met les lignes suivantes :<\/p>\n<pre class=\"brush:shell\">$TTL 604800\r\n@ IN SOA srv-debian.mondomaine.lan. root.mondomaine.lan. (\r\n\t2010060401 ; Serial\r\n\t604800 ; Rafraichissement\r\n\t86400 ; Nouvel essai\r\n\t2419200 ; Expire\r\n\t604800 ) ; Dur\u00e9e de vie minimum du cache\r\n\r\n@ \tNS \tsrv-debian.mondomaine.lan.\r\n1 \tIN PTR \tsrv-dc.mondomaine.lan.\r\n2 \tIN PTR \tsrv-debian.mondomaine.lan.\r\n3 \tIN PTR \tsrv-mail.mondomaine.lan.\r\n4 \tIN PTR \tsrv-db.mondomaine.lan.\r\n254\tIN PTR \tsrv-proxy.mondomaine.lan.<\/pre>\n<p>Les enregistrements de type <em>IN PTR<\/em> font l&rsquo;inverse des <em>IN A<\/em>, ils associent un nom \u00e0 une IP. Les chiffres qui pr\u00e9c\u00e8dent <em>IN PTR<\/em> repr\u00e9sentent la partie h\u00f4te de l&rsquo;adresse, par exemple <em>1 IN PTR srv-dc.mondomaine.lan<\/em> signifie que l&rsquo;adresse 10.0.0.1 a pour nom srv-dc.mondomaine.lan.<br \/>\nOn peut enregistrer et fermer le fichier. Puis on red\u00e9marre Bind :<br \/>\n<code><\/code><\/p>\n<pre class=\"brush:shell\">riri@srv-debian:~$ sudo \/etc\/init.d\/bind9 restart\r\nStopping domain name service...: bind9.\r\nStarting domain name service...: bind9.<\/pre>\n<p><code><br \/>\n<\/code><\/p>\n<p>Pour tester que tout marche bien, comme pr\u00e9c\u00e9demment on effectue un nslookup sur l&rsquo;une des ip enregistr\u00e9es dans la zone<\/p>\n<pre class=\"brush:shell\">riri@srv-debian:~$ nslookup 10.0.0.4\r\nServer: 10.0.0.2\r\nAddress: 10.0.0.2#53\r\n\r\n4.0.0.10.in-addr.arpa name = srv-db.mondomaine.lan.<\/pre>\n<p style=\"text-align: justify;\">La configuration de notre serveur DNS est maintenant quasiment termin\u00e9e. Il manque un petit d\u00e9tail \u00e0 r\u00e9gler. En effet, ce serveur DNS ne r\u00e9sout que les noms des machines du domaine et se sert des serveurs racine (root servers) pour r\u00e9soudre les noms de domaine internet (google.fr par exemple). Plut\u00f4t que de solliciter ces serveurs qui le sont bien assez, on va configurer notre serveur DNS pour qu&rsquo;il utilise des forwarders, c&rsquo;est a dire qu&rsquo;il transmette les requ\u00eates de r\u00e9solution de tous les noms n&rsquo;appartenant pas au domaine \u00ab\u00a0mondomaine.lan\u00a0\u00bb au serveur DNS de notre FAI. Pour cela, il suffit de modifier le fichier <strong>\/etc\/bind\/named.conf.options<\/strong> et de d\u00e9commenter les lignes suivantes :<\/p>\n<pre class=\"brush:shell\">\/\/forwarders{\r\n\t\/\/ 0.0.0.0;\r\n\/\/};<\/pre>\n<p>et de remplacer 0.0.0.0 par l&rsquo;adresse du DNS de votre choix (votre FAI, Google&#8230;) :<br \/>\n<code><\/code><\/p>\n<pre class=\"brush:shell\">forwarders{\r\n\t8.8.8.8;\r\n};<\/pre>\n<p><code><br \/>\n<\/code><br \/>\nici 8.8.8.8 est l&rsquo;adresse du serveur DNS primaire fourni par Google. Sauvez, quittez le fichier et red\u00e9marrez bind:<\/p>\n<pre class=\"brush:shell\">riri@srv-debian:~$ sudo \/etc\/init.d\/bind9 restart<\/pre>\n<p>La configuration de notre serveur DNS est maintenant termin\u00e9e et vous pouvez d\u00e9sormais vous en servir comme serveur primaire pour toutes les machines du r\u00e9seau.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cet article sera consacr\u00e9 \u00e0 la mise en place d&rsquo;un serveur DNS sous Debian, en utilisant Bind9, afin de r\u00e9soudre&#8230; <a href=\"https:\/\/pro.richardbaret.fr\/?p=162\">Continue reading &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-162","post","type-post","status-publish","format-standard","hentry","category-non-classe"],"_links":{"self":[{"href":"https:\/\/pro.richardbaret.fr\/index.php?rest_route=\/wp\/v2\/posts\/162","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pro.richardbaret.fr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pro.richardbaret.fr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pro.richardbaret.fr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pro.richardbaret.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=162"}],"version-history":[{"count":32,"href":"https:\/\/pro.richardbaret.fr\/index.php?rest_route=\/wp\/v2\/posts\/162\/revisions"}],"predecessor-version":[{"id":189,"href":"https:\/\/pro.richardbaret.fr\/index.php?rest_route=\/wp\/v2\/posts\/162\/revisions\/189"}],"wp:attachment":[{"href":"https:\/\/pro.richardbaret.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=162"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pro.richardbaret.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=162"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pro.richardbaret.fr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=162"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}