Il faut d'abord modifier deux fichiers pour indiquer quels serveurs de noms utiliser, et quels services de conversion de noms sont disponibles.
Le fichier /etc/resolv.conf détermine la façon dont le DNS doit chercher les informations :
# # Fichier /etc/resolv.conf - Determine la facon dont le convertisseur # utilise le DNS. Voir resolver(5). # # # Liste des serveurs a contacter pour resoudre un nom. Il faut mieux # mettre en premier le serveur de noms local, pour eviter de passer par # internet pour une machine du reseau local. On peut mettre jusqu'a 3 # adresses. # nameserver 127.0.0.1 |
Le fichier /etc/host.conf indique quels services de conversion de noms sont disponibles, et dans quel ordre il faut les appliquer :
# # Fichier /etc/host.conf - Indique quels services de conversion des # noms sont disponibles, et dans quel ordre il faut les appliquer. # # Pour resoudre un nom en adresse IP, on peut passer soit par le # DNS, soit par le fichier /etc/hosts. La ligne suivante indique dans # quel ordre appliquer cette recherche : d'abord dans le fichier # /etc/hosts, puis par le DNS en cas d'echec. # # Valeurs possibles : hosts, bind, nis. # order hosts, bind |
Le premier fichier de configuration lu par named indique quels autres fichiers lire. Voici le fichier par défaut /etc/named.conf :
/* * Fichier /etc/named.conf - Premier fichier lu par named. Cf. named.conf(5) * * Specifie le(s) chemin(s) ou se trouvent les fichiers de zone DNS. * * Valeurs possibles : directory chemin */ options { directory "/var/named"; /* * Adresse des serveurs a contacter si le serveur de noms local est incapable * de resoudre le nom. Cette option peut remplacer la commande nameserver * du fichier /etc/resolv.conf. */ forward only; forwarders { 212.27.32.5; 212.27.32.6; }; }; /* * Fichier de cache. */ zone "." { type hint; file "named.ca"; }; /* * Fichier utilise pour la resolution inverse. Les adresses IP commencant * par 127.0.0 peuvent etre resolues en nom d'hote dans le fichier specifie */ zone "0.0.127.in-addr.arpa" { type master; file "named.local"; }; /* * Fichier utilise pour la resolution des noms d'hote se terminant par * domaine1 */ zone "domaine1" { type master; file "domaine1"; }; /* * Fichier utilise pour la resolution inverse. Les adresses IP commencant * par 192.168.1 peuvent etre resolues en nom d'hote dans le fichier * specifie */ zone "1.168.192.in-addr.arpa" { type master; file "domaine1.rev"; }; |
Le DNS va piocher les informations dans les fichiers named.ca pour la zone . et named.local pour la zone 0.0.127.in-addr.arpa. Ces fichiers sont situés dans le répertoire /var/named (comme indiqué par la ligne ).
La zone . correspond à la zone racine (la racine à tous les domaines de l'Internet, voir figure ).
Le fichier /var/named/named.ca contient donc l'adresse des DNS qui peuvent renseigner un utilisateur à partir de la racine de la hiérarchie.
La zone 0.0.127.in-addr.arpa permet d'effectuer la résolution inverse de toute les adresses commencant par 127.0.0, donc cette zone permet de résoudre l'adresse 127.0.0.1 en son nom.
On configure ici un serveur de noms maître comme l'indique la ligne . On verra à la section
comment configurer un serveur de noms esclave.
Pour une version de bind inférieure à 8, c'est le fichier /etc/named.boot qui est lu au démarrage de named :
; ; a caching only nameserver config ; directory /var/named cache . named.ca primary 0.0.127.in-addr.arpa named.local |
C'est à peu près les mêmes instructions que dans le fichier /etc/named.conf. Se référer à la DNS HOW-TO [1] pour la suite des opérations, ou installer named version supérieure à 8 (plus sécurisée). Pour savoir la version, taper :
# named -v named 8.2.2-P5 Mon Feb 28 10:17:53 EST 2000 root@porky.devel.redhat.com:/usr/src/bs/BUILD/bind-8.2.2_P5/src/bin/named # |
Voici le fichier /var/named/named.local :
; ; Enregistrement de ressources. Syntaxe : ; ; proprietaire ttl classe type donnees ; ; ou : ; ; - proprietaire : nom de domaine ou nom d'hote relatif a ; l'enregistrement. Nom de domaine de l'enregistrement de ressources ; precedent par defaut ; ; ; - ttl (time to live) : indique la duree de validite des informations, ; en secondes, depuis leur recuperation depuis un serveur DNS. ttl ; minimal du dernier debut d'autorisation par defaut ; ; ; - classe : classe d'adresse du reseau. IN pour les resaux TCP/IP (ceux ; qu'on utilise). Celle de l'enregistrement de ressources precedent par ; defaut ; ; ; - type : type d'enregistrement de ressources. Champ OBLIGATOIRE. Le ; type sera explicite dans chaque exemple ; ; ; - donnees : donnees associes au type d'enregistrement ; ; ; Cf. named(8). ; ; Debut d'autorisation (SOA=Start Of Authority). Cet enregistrement de ; ressources utilise l'adressage TCP/IP (IN). Le serveur de noms primaire ; a pour nom "machine1.domaine1.", la personne a contacter a pour ; adresse mel "root@machine1.domaine1". ; ; @ IN SOA machine1.domaine1. root.machine1.domaine1. ( ; ; Les options qui suivent n'ont pas a etre modifiees dans le cas d'une ; configuration simple. Elles concernent le serveur de noms secondaire. ; 1997022700 ; serial 28800 ; refresh 14400 ; retry 3600000 ; expire 86400 ; default_ttl ) ; ; "machine1.domaine1" est le serveur de noms pour le domaine. ; @ IN NS machine1.domaine1. ; ; l'adresse domaine_local.1 (soit 192.168.1.1) sera accociee au nom ; "localhost". ; 1 IN PTR localhost. |
Voici le fichier /var/named/domaine1 :
; ; Fichier /var/named/domaine1 - Contient les informations sur ; la zone domaine1 pour resoudre un nom d'hote en adresse IP. ; ; Ce fichier est appelle par le fichier /etc/named.conf. Le domaine ; actuel est celui specifie par la ligne appelant ce fichier : ; ; zone "domaine1" { ; type master; ; file "domaine1"; ; }; ; ; Le domaine local, represente par le caractere ``@'', est donc ; "domaine1". ; @ IN SOA machine1.domaine1. root.machine1.domaine1. ( 2000070306 ; serial 3600 ; refresh 900 ; retry 1209600 ; expire 43200 ; default_ttl ) ; ; Permet d'associer le domaine local (@) a l'adresse IP 192.168.1.1. ; @ IN A 192.168.1.1 ; ; Ce qui suit est assez explicite... ; @ TXT "Serveur DNS local de domaine1" ; ; "machine1" et "machine1.domaine1" sont les serveurs de noms pour ; le domaine1. ; @ IN NS machine1 @ IN NS machine1.domaine1. ; ; Echange de mel : tout mel doit etre envoye d'abord a machine1, puis a ; machine1.domaine1. Les nombres indiquent la priorite. ; @ IN MX 10 machine1 @ IN MX 20 machine1.domaine1. ; ; Informations concernant chaque machine du reseau devant etre resolue ; par le serveur de noms local. ; ; Adresse de reference de machine1 : 192.168.1.1 (type A, unique pour une ; adresse). Diverses informations sur la machine peuvent etre specifiees ; par HINFO. Ici, c'est en commentaires car problème sécurité ;-) ; machine1 IN A 192.168.1.1 machine1. IN A 192.168.1.1 ; machine1 IN HINFO "Intel P133+" "Linux 2.2.14-12" ; ; nougat, une autre machine. ; nougat IN A 192.168.1.2 ; nougat IN HINFO "Non definit" "Non definit" ; ; localhost, pour l'interface de bouclage. ; localhost IN A 127.0.0.1 ; ; Quelque alias (CNAME) : un nom d'hote precise par un enregistrement de ; type A peut avoir un ou plusieurs alias. Dans l'exemple ci-dessous, ; www <-> machine1, ftp <-> machine1, mail <-> machine1, si bien que ; www.domaine1, ftp.domaine1 ou encore mail.domaine1 ; designent la meme adresse IP, celle de l'enregistrement de type A de ; machine1. On peut ainsi faire une requête du style : ; ; - lynx http://www.domaine1 ; ; - ftp ftp.domaine1 ; ; - fetchmail mail.domaine1 ; www CNAME machine1 ftp CNAME machine1 mail CNAME machine1 |
Enfin, voici le fichier /var/named/domaine1.rev :
; ; Fichier /var/named/domaine1.rev - Contient les informations sur ; la zone domaine1 pour resoudre une adresse IP en nom d'hote. ; ; Ce fichier est appelle par le fichier /etc/named.conf. Le domaine ; actuel est celui specifie par la ligne appelant ce fichier : ; ; zone "1.168.192.in-addr.arpa" { ; type master; ; file "domaine1"; ; }; ; ; Le domaine local, represente par le caractere ``@'', est donc ; "1.168.192.in-addr.arpa". ; @ IN SOA machine1.domaine1. root.machine1.domaine1. ( 2000070305 ; serial 3600 ; refresh 900 ; retry 1209600 ; expire 43200 ; default_ttl ) ; ; Serveur de noms pour le domaine. ; IN NS machine1.domaine1. ; ; Associe des adresses IP a des noms. Les adresses sont donnees par rapport ; au domaine local. Ainsi, 2 <-> 2.1.168.192.in-addr.arpa. ; 1 IN PTR machine1.domaine1. 2 IN PTR nougat.domaine1. |
Noter qu'un nom d'hôte seul se termine par un point (``.'') si c'est un nom relatif au domaine courant (le domaine spécifié par la ligne dans le fichier /etc/named.conf). Ce point est donc extremement important ! Ce domaine courant est représenté par le caractère
, et si il est homis (comme à la ligne indiquant le serveur de noms pour le domaine, par exemple), named considère qu'il s'agit du domaine courant.
Le fait de transmettre toute les requêtes qu'on ne peut résoudre au DNS du fournisseur d'accès permet de soulager les DNS de la racine. Ainsi, au lieu de surcharger les DNS connus par le monde entier, on surcharge les DNS connus par tous les clients du fournisseur d'accès.
Voilà, le serveur de noms servant de cache est configuré, il n'y a plus qu'à le relancer pour tester ! Pour cela, taper :
# ndc start new pid is 3443 # |
ou, si le DNS tourne déjà :
# ndc restart new pid is 3446 # |
Pour savoir si il y a des erreurs dans les fichiers de configuration, consulter le fichier /var/log/messages. Si tout s'est bien passé, on devrait avoir :
Sep 28 19:26:02 zecastor named[1513]: named shutting down Sep 28 19:26:02 zecastor named[1513]: USAGE 970161962 970161765 CPU=0.01u/0s CHILDCPU=0u/0s Sep 28 19:26:02 zecastor named[1513]: NSTATS 970161962 970161765 Sep 28 19:26:02 zecastor named[1513]: XSTATS 970161962 970161765 RR=0 RNXD=0 RFwdR=0 RDupR=0 RFail=0 RFErr=0 RErr=0 RAXFR=0 RLame=0 ROpts=0 SSysQ=1 SAns=0 SFwdQ=0 SDupQ=36 SErr=0 RQ=0 RIQ=0 RFwdQ=0 RDupQ=0 RTCP=0 SFwdR=0 SFail=0 SFErr=0 SNaAns=0 SNXD=0 sep 28 19:26:03 zecastor named: named shutdown succeeded Sep 28 19:26:03 zecastor named[1556]: starting. named 8.2.2-P5 Mon Feb 28 10:17:53 EST 2000 ^Iroot@porky.devel.redhat.com:/usr/src/bs/BUILD/bind-8.2.2_ P5/src/bin/named Sep 28 19:26:03 zecastor named[1556]: hint zone "" (IN) loaded (serial 0) Sep 28 19:26:03 zecastor named[1556]: Zone "0.0.127.in-addr.arpa" (file named.local): No default TTL set using SOA minimum instead Sep 28 19:26:03 zecastor named[1556]: master zone "0.0.127.in-addr.arpa" (IN) loaded (serial 1997022700) Sep 28 19:26:03 zecastor named[1556]: listening on [127.0.0.1].53 (lo) Sep 28 19:26:03 zecastor named[1556]: listening on [192.168.1.1].53 (eth0) Sep 28 19:26:03 zecastor named[1556]: Forwarding source address is [0.0.0.0]. 1033 Sep 28 19:26:03 zecastor named[1557]: group = 25 Sep 28 19:26:03 zecastor named[1557]: user = named Sep 28 19:26:03 zecastor named[1557]: Ready to answer queries. sep 28 19:26:03 zecastor named: named startup succeeded |
Un message du type est normal, il signifie que aucune zone n'étant spécifiée, il utilise la zone par défaut. En revanche, un message du type :
Sep 28 19:27:49 zecastor named[1590]: Zone "0.0.127.in-addr.arpa" (file named.local): no NS RRs found at zone top Sep 28 19:27:49 zecastor named[1590]: master zone "0.0.127.in-addr.arpa" (IN) rejected due to errors (serial 1997022700) |
est plus grave. Il signifie qu'aucun serveur de noms n'est spécifié par l'option pour la zone 0.0.127.in-addr.arpa. En regardant de près le fichier de configuration de cette zone, on se rend compte qu'il manque un espace au début de la ligne suivante :
IN NS localhost. |
En effet, ce n'est pas parce qu'on peut se passer de spécifier un domaine qu'il ne faut pas laisser d'espace ! En rajoutant un espace au début de la ligne, le problème est corrigé.
Un bon moyen de débugger les fichiers de configuration mal écrits est d'utiliser tail et grep :
# tail -50 /var/log/messages | grep error Sep 28 19:27:49 zecastor named[1590]: master zone "0.0.127.in-addr.arpa" (IN) rejected due to errors (serial 1997022700) # |
On voit tout de suite s'afficher les lignes contenant des erreurs. On peut aussi utiliser l'option -f de la commande tail pour avoir les dernières lignes du fichier, au fur et à mesure qu'elles arrivent.
Pour tester le nouveau serveur de noms installé, on peut utiliser le programme nslookup 2, par exemple :
# nslookup 127.0.0.1 Server: localhost Address: 127.0.0.1 Name: localhost Address: 127.0.0.1 # |
Conclusion : on est capable de résoudre l'adresse 127.0.0.1, donc ça marche. Si on n'a qu'une seule machine à disposition, c'est terminé pour la partie DNS. Sinon, il va falloir rendre accessible aussi la résolution des noms et/ou adresses des autres machines.