DNS HOWTO Nicolai Langfeldt janl@math.uio.no Version 1.3.2 du 3 Juin 1997 Comment devenir un administrateur de DNS a la petite semaine. Traduc- tion francaise par Julien Vayssiere (jul@mygale.org) 11.. PPrreeaammbbuullee Mots-cles : DNS, bind, named, dialup, ppp, slip, Internet, domain, name, hosts, resolving 11..11.. AAssppeecctt jjuurriiddiiqquuee (C)opyright 1995 Nicolai Langfeldt. Ne modifiez pas ce document sans en modifier le message de copyright en consequence. Vous pouvez distribuer ce document librement sous reserve de conserver le message de copyright. 11..22.. RReemmeerrcciieemmeennttss eett aappppeell aauuxx bboonnnneess vvoolloonntteess J'aimerais remercier Arnt Gulbrandsen qui a relu le brouillon de ce document un nombre incalculable de fois et a apporte nombre de suggestions pertinentes. Merci egalement a tous ceux qui m'ont envoye leurs suggestions par courrier electronique, merci aussi pour tous les billets de banque que je recois. Merci beaucoup ! Vous m'aidez vraiment dans ce travail. Ce document n'est pas destine a atteindre un jour un etat final, alors mailez-moi vos problemes ainsi que le recit de vos reussites, cela me permettra d'ameliorer ce HOWTO. Merci d'envoyer l'argent, les commentaires et/ou les questions a janl@math.uio.no. Si vous m'envoyez un courrier electronique, merci de _v_e_r_i_f_i_e_r que votre adresse de retour est correcte car je recois _b_e_a_u_c_o_u_p de courrier electronique. Essayez aussi de lire le chapitre ``FAQ'' avant de m'envoyer un mail. Si vous voulez traduire ce HOWTO, prevenez-moi pour que je puisse garder le compte de toutes les langues dans lesquelles j'ai ete traduit :-). 11..33.. DDeeddiiccaaccee Ce HOWTO est dedie a Anne Line Norheim, bien qu'elle ne le lise sans doute jamais. Il ne s'agit pas du tout du genre de fille auquel vous pensez. 22.. IInnttrroodduuccttiioonn.. CCee qquuee ccee ddooccuummeenntt eesstt eett ccee qquu''iill nn''eesstt ppaass Pour ceux qui sont entierement nouveaux dans ce domaine, le DNS est le Domain Name System. C'est l'ensemble des regles utilisees par les machines et les logiciels pour etablir la correspondance entre les noms de machines et les adresses IP. Ce document explique comment definir de telles correspondances a l'aide d'un systeme Linux. Une correspondance est tout simplement une association entre deux choses, dans notre cas un nom de machine, comme ftp.linux.org, et l'adresse IP de cette machine, 199.249.150.4. Le DNS constitue pour le non-initie (vous dans le cas present ;-) une des parties les plus obscures de l'administration de reseau. Le but de ce HOWTO est d'essayer d'en eclaircir quelques aspects. Ce document explique comment configurer un DNS _s_i_m_p_l_e. Nous allons commencer avec un serveur de noms qui ne sert qu'a faire cache puis nous continuerons en configurant un serveur DNS primaire pour un domaine. Pour des configurations plus complexes, jetez un coup d'oeil a la section ``FAQ'' de ce document. Si vous n'y trouvez pas ce que vous cherchez, vous allez alors devoir _l_i_r_e la Vraie Documentation. Je reviendrai sur ce en quoi consiste la Vraie Documentation dans le chapitre ``final''. Avant de commencer, vous devez configurer votre machine pour etre capable de vous connecter par telnet sur d'autres machines mais aussi pouvoir recevoir des connexions sur votre machine. Vous devez aussi etre en mesure de vous connecter au reseau par tous les services possibles, et en particulier pouvoir faire telnet 127.0.0.1, ce qui revient a vous connecter a votre propre machine (verifiez tout de suite que ca marche !). Il est aussi necessaire, pour commencer, que les fichiers /etc/host.conf (ou /etc/nnswitch.conf), /etc/resolv.conf et /etc/hosts soient correctement configures car je n'expliquerai pas ici a quoi ils servent. Si tout cela n'est pas deja configure et en etat de marche, lisez le networking/NET-2 HOWTO pour savoir comment faire. Si vous utilisez une connexion SLIP ou PPP, il est indispensable qu'elle fonctionne. Lisez le PPP HOWTO si ce n'est pas le cas. Quand je dis 'votre machine', j'entends la machine sur laquelle vous aller essayer d'installer le DNS, et non pas une autre machine dont vous pourriez vous servir pour acceder au reseau. Je supposerai par la suite que vous ne vous trouvez pas derriere un firewall qui bloque les requetes de resolution de nom. Si tel est le cas, vous aurez besoin d'une configuration speciale. Reportez-vous alors au chapitre ``FAQ''. Le service de resolution de nom sous Unix est assure par un programme appele named. Il fait partie du paquetage bind, gere par Paul Vixie pour l'Internet Software Consortium. Named est inclus dans la plupart des distributions de Linux et se trouve le plus souvent installe dans /usr/sbin/named. Si vous disposez d'un named, vous pouvez vraisemblablement l'utiliser. Si vous n'en avez pas, chargez-en un a partir d'un site FTP Linux ou allez chercher la derniere et meilleure version des sources du programme depuis ftp.vix.com:/pub/bind, soit dans le repertoire release soit dans testing, suivant ce qui correspond le mieux a votre maniere de vivre. Le service DNS est une base de donnees a l'echelle du reseau tout entier. Faites donc tres attention a ce que vous y introduisez. Si vous y mettez n'importe quoi, vous, et les autres avec, en retirerez n'importe quoi. Conservez votre DNS bien propre, a jour et coherent et vous verrez qu'il vous offrira le meilleur de lui-meme. Apprenez a l'utiliser, l'administrer, le debugger et vous ferez partie de ces administrateurs qui empechent que le reseau ne s'ecroule sous le poids des systemes mal geres. Dans ce document, j'enonce deux ou trois choses qui ne sont pas tout a fait vraies (mais qui le sont toujours au moins a moitie). Si je le fais, c'est toujours dans le but de rendre les choses plus simples. Tout marchera (probablement ;-) tres bien si vous croyez ce que je vous dis. AAssttuuccee :: Si ils existent deja, faites une copie de sauvegarde de tous les fichiers que je vous demande de modifier. Ainsi, si plus rien ne marche apres ce que nous allons faire, vous pourrez toujours revenir au bon vieux temps ou tout marchait bien. 33.. UUnn SSeerrvveeuurr ddee NNoomm qquuii nnee ffaaiitt qquuee ccaacchhee.. UUnn pprreemmiieerr aappeerrccuu ddee llaa ccoonnffiigguurraattiioonn dd''uunn DDNNSS,, ttrreess uuttiillee ppoouurr cceeuuxx qquuii uuttiilliisseenntt uunnee ccoonnnneexxiioonn eenn ddiiaalluupp.. Un serveur de nom qui ne fait que cache sert a trouver la reponse aux requetes de resolution de nom et se souvient de cette reponse chaque fois qu'on lui posera la meme question par la suite. Vous avez tout d'abord besoin du fichier /etc/named.boot. Ce fichier est lu au lancement de named. Pour le moment, il ne doit pas contenir autre chose que : ______________________________________________________________________ ; Boot file for caching name server ; directory /var/named ; ; type domain source file or host cache . root.cache primary 0.0.127.in-addr.arpa pz/127.0.0 ______________________________________________________________________ TTRREESS IIMMPPOORRTTAANNTT :: Dans certaines versions de ce document, les fichiers listes comme ci-dessus presentent un certain nombre de caracteres espace ou tabulation avant le premier caractere non blanc de la ligne. Ils ne sont pas supposes faire partie du fichier. EEffffaacceezz ddoonncc ttoouuss lleess ccaarraacctteerreess bbllaannccss de debut de ligne des fichiers que vous copiez- collez a partir de ce HOWTO. La ligne "directory" indique a named l'endroit ou il doit rechercher ses fichiers. Tous les fichiers dont nous parlerons maintenant seront relatifs a cet endroit. D'apres le _L_i_n_u_x _F_i_l_e_s_y_s_t_e_m _S_t_a_n_d_a_r_d, ce repertoire doit etre /var/named. Ainsi, pz est un sous-repertoire de /var/named, i-e /var/named/pz. On trouve a cet endroit le fichier /var/named/root.cache, qui doit ressembler a ceci : ______________________________________________________________________ . 518400 NS D.ROOT-SERVERS.NET. . 518400 NS E.ROOT-SERVERS.NET. . 518400 NS I.ROOT-SERVERS.NET. . 518400 NS F.ROOT-SERVERS.NET. . 518400 NS G.ROOT-SERVERS.NET. . 518400 NS A.ROOT-SERVERS.NET. . 518400 NS H.ROOT-SERVERS.NET. . 518400 NS B.ROOT-SERVERS.NET. . 518400 NS C.ROOT-SERVERS.NET. ; D.ROOT-SERVERS.NET. 3600000 A 128.8.10.90 E.ROOT-SERVERS.NET. 3600000 A 192.203.230.10 I.ROOT-SERVERS.NET. 3600000 A 192.36.148.17 F.ROOT-SERVERS.NET. 3600000 A 192.5.5.241 G.ROOT-SERVERS.NET. 3600000 A 192.112.36.4 A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4 H.ROOT-SERVERS.NET. 3600000 A 128.63.2.53 B.ROOT-SERVERS.NET. 3600000 A 128.9.0.107 C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12 ______________________________________________________________________ SSoouuvveenneezz--vvoouuss bbiieenn ddee ccee qquuee jj''aaii ddiitt ppoouurr lleess ccaarraacctteerreess bbllaannccss eenn tteettee ddee lliiggnnee !! Ce fichier donne une description de tous les serveurs de noms du monde qui se trouvent a la racine (au plus haut niveau) de la hierarchie des serveurs de noms. Il arrive que cette liste change, c'est pourquoi il est _e_s_s_e_n_t_i_e_l que ce fichier soit maintenu a jour. Reportez-vous a la section ``maintenance'' pour savoir comment le garder a jour. Le contenu de ce fichier est decrit dans la page de man de named mais cette-derniere s'adresse plus, a mon humble avis, a ceux qui savent deja comment fonctionne named. La ligne suivante de named.boot est la ligne primary. J'expliquerai son role dans un chapitre ulterieur. Pour l'instant, il s'agit simplement d'un fichier appele 127.0.0 situe dans le repertoire pz : ______________________________________________________________________ @ IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 1 ; Serial 28800 ; Refresh 7200 ; Retry 604800 ; Expire 86400) ; Minimum TTL NS ns.linux.bogus. 1 PTR localhost. ______________________________________________________________________ Apres ca, vous avez besoin d'un fichier /etc/resolv.conf qui ressemble a peu pres a ca : ______________________________________________________________________ search subdomain.your-domain.edu your-domain.edu nameserver 127.0.0.1 ______________________________________________________________________ La ligne search specifie dans quels domaines il faudra chercher lorsque vous voudrez vous connecter sur une machine de nom quelconque. La ligne "nameserver" indique a quelle adresse votre machine peut contacter un serveur de noms. Si vous voulez indiquer plusieurs serveurs de nom, mettez une ligne `nameserver' pour chacun. Dans notre cas, il s'agit de notre propre machine puisque c'est elle qui fait tourner named. (Note : named ne lit jamais ce fichier, c'est le resolver qui utilise named qui le fait). Illustrons ce a quoi sert ce fichier : si un client cherche a contacter foo, on essaye d'abord foo.subdomain.your-domain.edu puis foo.your-domain.edu et enfin foo. Si un client essaye de contacter sunsite.unc.edu, on essaye d'abord sunsite.unc.edu.subdomain.your- domain.edu (je sais, c'est stupide, mais c'est comme ca) puis sunsite.unc.edu.your-domain.edu et enfin sunsite.unc.edu. Faites attention a ne pas mettre trop de noms de domaine dans la ligne search car cela prend du temps de tous les essayer. Cet exemple suppose que vous appartenez au domaine subdomain.your- domain.edu. Votre machine s'appelle alors certainement your- machine.subdomain.your-domain.edu. La ligne search ne doit pas contenir votre TLD (Top Level Domain; edu dans notre cas). Si vous vous connectez frequemment a des machines dans un autre domaine, vous pouvez rajouter ce domaine dans la ligne search comme ceci : ______________________________________________________________________ search subdomain.your-domain.edu your-domain.edu other-domain.com ______________________________________________________________________ et ainsi de suite. Evidemment, il faut appliquer cet exemple a de vrais noms de domaines. Remarquez qu'ici il n'y a pas de point a la fin des noms de domaine. Ensuite, suivant votre version de la libc, vous allez devoir modifier soit /etc/nsswitch.conf, soit /etc/host.conf. Si vous avez deja nsswitch.conf, c'est celui-la que nous allons modifier, sinon ce sera host.conf. //eettcc//nnsssswwiittcchh..ccoonnff C'est un long fichier qui specifie ou trouver differentes sortes de types de donnees, dans quel fichier ou quelle base de donnees. Il contient generalement des commentaires precieux au debut, que vous auriez tout interet a lire tout de suite. Ensuite, trouvez la ligne qui commence par "hosts:", elle doit ressembler a ceci: ______________________________________________________________________ hosts: files dns ______________________________________________________________________ Si il n'y a aucune ligne qui commence par "hosts:", mettez celle ci- dessus. Elle dit que les programmes doivent d'abord regarder dans /etc/hosts puis demander au DNS en suivant les indications de resolv.conf. //eettcc//hhoosstt..ccoonnff Ce fichier contient certainement plusieurs lignes, dont une doit commencer par order et ressembler a ca : ______________________________________________________________________ order hosts,bind ______________________________________________________________________ Si il n'y a pas de ligne "order", il faut en mettre une. Elle indique aux routines de resolution de nom de regarder d'abord dans /etc/hosts puis de demander au serveur de noms (que vous avez precise dans resolv.conf comme etant 127.0.0.1). Ces deux derniers fichiers sont documentes dans la page de man resolv(8) (tapez `man 8 resolv') dans la plupart des distributions de Linux. Cette page de man est, a mon humble avis, largement lisible et tout le monde, a commencer par les administrateurs de DNS, devrait l'avoir lue. Faites-le maintenant. Si vous vous dites "je le ferai plus tard", vous n'y reviendrez jamais. DDeemmaarrrreerr nnaammeedd.. Apres tout ca, il est temps de demarrer named. Si vous utilisez une connexion en dialup, commencez par vous connecter. Tapez `ndc start' et appuyez sur la touche entree, sans donner d'options. Si ca ne demarre pas, essayez plutot `/usr/sbin/ndc start'. Si ca ne marche toujours pas, jetez un coup d'oeil au chapitre ``FAQ''. Maintenant, vous pouvez tester votre configuration. Si vous jetez un oeil a votre fichier de messages syslog (souvent appele /var/adm/messages, mais regardez egalement dans le repertoire /var/log ou dans le fichier syslog) tout en lancant named (faites tail -f /var/adm/messages), vous devrez voir quelque chose comme ca : Jun 30 21:50:55 roke named[2258]: starting. named 4.9.4-REL Sun Jun 30 21:29:0 3 MET DST 1996 janl@roke.slip.ifi.uio.no:/var/tmp/bind/named Jun 30 21:50:55 roke named[2258]: cache zone "" loaded (serial 0) Jun 30 21:50:55 roke named[2258]: primary zone "0.0.127.in-addr.arpa" loaded (serial 1) Si il y a un quelconque message d'erreur, named donnera le nom du fichier dans lequel se trouve l'erreur (soit named.boot, soit root.cache, j'espere :-). Tuez le processus named et retournez verifier ces fichiers. Il est maintenant temps de lancer nslookup pour regarder le resultat de votre petit travail manuel $ nslookup Default Server: localhost Address: 127.0.0.1 > Si vous obtenez ceci, c'est que ca marche. Nous l'esperons tous. Si vous obtenez quoi que ce soit d'autre, revenez en arriere et verifiez tout. Chaque fois que vous modifiez le fichier named.boot, il vous faut relancer named avec la commande ndc restart. Maintenant, vous pouvez entrer une requete. Essayez de contacter une machine proche de vous. pat.uio.no est proche de moi, a l'Universite d'Oslo : > pat.uio.no Server: localhost Address: 127.0.0.1 Name: pat.uio.no Address: 129.240.2.50 nslookup a demande a votre named de rechercher la machine pat.uio.no. Il a ensuite contacte un des serveurs de noms mentionnes dans root.cache et a demande le chemin a suivre. Il peut s'ecouler un certain temps avant que vous obteniez le resultat puisqu'il recherche tous les domaines listes dans /etc/resolv.conf. Si vous reessayez, vous obtiendrez ceci : > pat.uio.no Server: localhost Address: 127.0.0.1 Non-authoritative answer : Name: pat.uio.no Address: 129.240.2.50 Notez cette fois-ci l'apparition de la ligne `Non-authoritative answer :'. Elle veut dire que named n'a pas accede au reseau pour obtenir la reponse mais a trouve l'information dans son cache. Cependant, l'information cachee _p_o_u_r_r_a_i_t ne plus etre a jour. C'est pourquoi vous etes informe de ce (tres faible) danger par le message `Non- authoritative answer:' Quand nslookup repond ceci la seconde fois qu'on lui demande un certain hote, c'est un signe certain que named cache bien les informations et que tout marche. Pour sortir de nslookup, utilisez la commande `exit'. Si vous avez une connexion en dialup (ppp ou slip), lisez le chapitre ``Configuration des connexions en dialup'', il y a des conseils pour vous. Maintenant, vous savez comment configurer un named qui fait cache. Servez-vous une biere, un verre de lait ou tout ce que vous voudrez pour feter l'evenement, ca le merite. 44.. UUnn ddoommaaiinnee _s_i_m_p_l_e CCoommmmeenntt mmeettttrree eenn ppllaaccee vvoottrree pprroopprree ddoommaaiinnee Avant d'entrer _v_r_a_i_m_e_n_t dans le vif du sujet, il va falloir que je vous fasse un brin de theorie sur le principe du service DNS. Et il va falloir que vous le lisiez, parce que c'est pour votre bien. Si vous ne "voulez" pas, vous devriez au moins le survoler rapidement. Arretez le survol quand vous en arrivez au point ou j'explique ce qu'il faut mettre dans le fichier named.boot. Le service DNS est un systeme organise de maniere hierarchique. Le sommet est designe par "." et se prononce "root". En dessous de . se trouvent un certain nombre de TLD (Top Level Domains), dont les plus connus sont ORG, COM, EDU et NET, mais il y en a beaucoup d'autres. Lorsque vous voulez trouver l'adresse IP de prep.ai.mit.edu, votre DNS doit trouver un serveur de noms qui serve le domaine edu. Votre DNS demande d'abord a un serveur de noms de fichier root.cache), et le serveur de . donne une liste des serveurs d'edu. En voici une illustration : $ nslookup Default Server: localhost Address: 127.0.0.1 Interrogeons un serveur situe a la racine (root). > server c.root-servers.net. Default Server: c.root-servers.net Address: 192.33.4.12 Positionnons le type de requete (Query Type) a NS (Name Server records). > set q=ns Posons la question a propos de edu. > edu. Le . terminal est significatif, il indique au serveur que nous interrogeons que edu se trouve juste sous ., ce qui permet de faciliter un peu la recherche. edu nameserver = A.ROOT-SERVERS.NET edu nameserver = H.ROOT-SERVERS.NET edu nameserver = B.ROOT-SERVERS.NET edu nameserver = C.ROOT-SERVERS.NET edu nameserver = D.ROOT-SERVERS.NET edu nameserver = E.ROOT-SERVERS.NET edu nameserver = I.ROOT-SERVERS.NET edu nameserver = F.ROOT-SERVERS.NET edu nameserver = G.ROOT-SERVERS.NET A.ROOT-SERVERS.NET internet address = 198.41.0.4 H.ROOT-SERVERS.NET internet address = 128.63.2.53 B.ROOT-SERVERS.NET internet address = 128.9.0.107 C.ROOT-SERVERS.NET internet address = 192.33.4.12 D.ROOT-SERVERS.NET internet address = 128.8.10.90 E.ROOT-SERVERS.NET internet address = 192.203.230.10 I.ROOT-SERVERS.NET internet address = 192.36.148.17 F.ROOT-SERVERS.NET internet address = 192.5.5.241 G.ROOT-SERVERS.NET internet address = 192.112.36.4 Ceci nous dit que les serveurs *.root-servers.net servent le domaine edu., nous pouvons donc continuer en interrogeant c. Maintenant, nous voulons savoir qui sert le niveau suivant du nom de domaine : mit.edu.: > mit.edu. Server: c.root-servers.net Address: 192.33.4.12 Non-authoritative answer: mit.edu nameserver = STRAWB.mit.edu mit.edu nameserver = W20NS.mit.edu mit.edu nameserver = BITSY.mit.edu Authoritative answers can be found from: STRAWB.mit.edu internet address = 18.71.0.151 W20NS.mit.edu internet address = 18.70.0.160 BITSY.mit.edu internet address = 18.72.0.3 steawb, w20ns et bitsy servent le domaine mit, prenons-en un au hasard et posons-lui la question au sujet de ai.mit.edu: > server W20NS.mit.edu. Les noms de domaine ne sont pas sensibles a la difference entre lettres minuscules et majuscules, mais comme j'utilise ma souris pour faire du copier-coller, vous lisez les choses dans ce document telles qu'elles apparaissent sur mon ecran. Server: W20NS.mit.edu Address: 18.70.0.160 > ai.mit.edu. Server: W20NS.mit.edu Address: 18.70.0.160 Non-authoritative answer: ai.mit.edu nameserver = WHEATIES.AI.MIT.EDU ai.mit.edu nameserver = ALPHA-BITS.AI.MIT.EDU ai.mit.edu nameserver = GRAPE-NUTS.AI.MIT.EDU ai.mit.edu nameserver = TRIX.AI.MIT.EDU ai.mit.edu nameserver = MUESLI.AI.MIT.EDU Authoritative answers can be found from: AI.MIT.EDU nameserver = WHEATIES.AI.MIT.EDU AI.MIT.EDU nameserver = ALPHA-BITS.AI.MIT.EDU AI.MIT.EDU nameserver = GRAPE-NUTS.AI.MIT.EDU AI.MIT.EDU nameserver = TRIX.AI.MIT.EDU AI.MIT.EDU nameserver = MUESLI.AI.MIT.EDU WHEATIES.AI.MIT.EDU internet address = 128.52.32.13 WHEATIES.AI.MIT.EDU internet address = 128.52.35.13 ALPHA-BITS.AI.MIT.EDU internet address = 128.52.32.5 ALPHA-BITS.AI.MIT.EDU internet address = 128.52.37.5 GRAPE-NUTS.AI.MIT.EDU internet address = 128.52.32.4 GRAPE-NUTS.AI.MIT.EDU internet address = 128.52.36.4 TRIX.AI.MIT.EDU internet address = 128.52.32.6 TRIX.AI.MIT.EDU internet address = 128.52.38.6 MUESLI.AI.MIT.EDU internet address = 128.52.32.7 MUESLI.AI.MIT.EDU internet address = 128.52.39.7 Ainsi, weaties.ai.mit.edu est un serveur de noms pour le domaine ai.mit.edu: > server WHEATIES.AI.MIT.EDU. Default Server: WHEATIES.AI.MIT.EDU Addresses: 128.52.32.13, 128.52.35.13 Changeons le type de requete. Nous avons reussi a trouver le serveur de noms, nous allons maintenant chercher tout ce que wheaties sait sur le domaine prep.ai.mit.edu. > set q=any > prep.ai.mit.edu. Server: WHEATIES.AI.MIT.EDU Addresses: 128.52.32.13, 128.52.35.13 prep.ai.mit.edu CPU = dec/decstation-5000.25 OS = unix prep.ai.mit.edu inet address = 18.159.0.42, protocol = tcp #21 #23 #25 #79 prep.ai.mit.edu preference = 1, mail exchanger = life.ai.mit.edu prep.ai.mit.edu internet address = 18.159.0.42 ai.mit.edu nameserver = alpha-bits.ai.mit.edu ai.mit.edu nameserver = wheaties.ai.mit.edu ai.mit.edu nameserver = grape-nuts.ai.mit.edu ai.mit.edu nameserver = mini-wheats.ai.mit.edu ai.mit.edu nameserver = trix.ai.mit.edu ai.mit.edu nameserver = muesli.ai.mit.edu ai.mit.edu nameserver = count-chocula.ai.mit.edu ai.mit.edu nameserver = life.ai.mit.edu ai.mit.edu nameserver = mintaka.lcs.mit.edu life.ai.mit.edu internet address = 128.52.32.80 alpha-bits.ai.mit.edu internet address = 128.52.32.5 wheaties.ai.mit.edu internet address = 128.52.35.13 wheaties.ai.mit.edu internet address = 128.52.32.13 grape-nuts.ai.mit.edu internet address = 128.52.36.4 grape-nuts.ai.mit.edu internet address = 128.52.32.4 mini-wheats.ai.mit.edu internet address = 128.52.32.11 mini-wheats.ai.mit.edu internet address = 128.52.54.11 mintaka.lcs.mit.edu internet address = 18.26.0.36 En commencant a partir de ., nous avons successivement trouve les serveurs de noms des differents niveaux du nom de domaine. Si vous aviez utilise votre propre serveur DNS a la place de tous ces autres serveurs, votre named aurait, bien sur, cache toutes ces informations et il n'aurait plus eu besoin de les redemander pendant un certain temps. Un domaine dont on parle beaucoup moins, mais qui n'en est pas moins important, est in-addr.arpa. Ce domaine trouve sa place dans la hierarchie des noms de domaine comme un domaine "normal". in-addr.arpa nous sert a obtenir le nom d'hote connaissant l'adresse IP d'une machine. Une chose tres importante ici est de bien remarquer que les adresses IP sont notees en sens inverse a l'interieur du domaine in- addr.arpa. Si vous avez l'adresse d'une machine : 192.128.52.43, named procede exactement comme dans l'exemple de prep.ai.mit.edu : il trouve les serveurs pour in-addr.arpa., trouve les serveurs pour 192.in- addr.arpa., trouve les serveurs pour 128.192.in-addr.arpa., et finalement trouve les serveurs pour 52.128.192.in-addr.arpa. . On obtient bien ainsi l'information liee a 43.52.128.192.in-addr.arpa. Malin, n'est-ce-pas ? (dites "oui"). En fait, la resolution de noms inverse est assez difficile a admettre les deux premieres annees. Pour dire vrai, je viens de vous mentir. Le service DNS ne marche pas vraiment comme je vous l'ai expose. Mais ca en est suffisamment proche. NNoottrree pprroopprree ddoommaaiinnee Maintenant, nous en sommes a definir notre propre domaine bien a nous. Nous allons creer le domaine _l_i_n_u_x_._b_o_g_u_s et y declarer quelques machines. C'est un nom de domaine totalement factice, afin d'etre sur de ne deranger personne dans le Vaste Monde. En fait, nous avons deja commence a creer notre propre domaine avec cette ligne dans named.boot: ______________________________________________________________________ primary 0.0.127.in-addr.arpa pz/127.0.0 ______________________________________________________________________ Notez bien l'absence de `.' a la fin des noms de domaine de ce fichier. La premiere ligne designe le fichier pz/127.0.0 comme etant celui qui definit le domaine 0.0.127.in-addr.arpa. Nous avons deja configure ce fichier, il se presente comme ceci : ______________________________________________________________________ @ IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 1 ; Serial 28800 ; Refresh 7200 ; Retry 604800 ; Expire 86400) ; Minimum TTL NS ns.linux.bogus. 1 PTR localhost. ______________________________________________________________________ Notez bien le `.' a la fin de tous les noms de domaine complets de ce fichier, au contraire du fichier named.boot dont nous parlions un peu plus haut. Certaines personnes aiment commencer chaque fichier definissant une zone par une directive $ORIGIN, mais en fait c'est superflu. L'origine (l'emplacement dans la hierarchie du service DNS) d'un fichier de zone est indiquee dans la colonne `domain' du fichier named.boot. Dans notre cas, c'est 0.0.127.in-addr.arpa. Ce `fichier de zone' (`zone file'), contient 3 `resource records' (RRs) : un SOA RR, un NS RR et un PTR RR. SOA est l'abbreviation de `Start Of Authority' (Origine d'Autorite). Le `@' est une notation speciale qui designe l'origine. Et comme la colonne `domain' de ce fichier donne 0.0.127.in-addr.arpa, la premiere ligne signifie donc : 0.0.127.IN-ADDR.ARPA. IN SOA ... NS est le `resource records' pour le serveur de noms (NS = Name Server), il dit au service DNS quelle est la machine qui est serveur de noms pour ce domaine. Enfin, le champ PTR dit que 1 (c'est-a-dire 1.0.0.127.IN-ADDR.ARPA, c'est-a-dire 127.0.0.1) est appele localhost. Le champ SOA est le preambule de _t_o_u_s les fichiers de zone, et il doit y en avoir exactement un dans chaque fichier de zone, et ce doit etre le tout premier champ du fichier. Ce champ SOA decrit la zone, son origine (une machine appelee linux.bogus), qui est responsable de son contenu (hostmaster@linux.bogus), de quelle version du fichier de zone il s'agit (serial : 1), et quelques autres choses qui ont a voir avec le cache et les serveurs DNS secondaires. Pour les champs restants, refresh, retry, expire et minimum, utilisez les valeurs donnees dans ce HOWTO et tout se passera certainement tres bien. Le champ NS nous dit qui fait serveur DNS pour 0.0.127.in-addr.arpa, il s'agit de ns.linux.bogus. Le champ PTR nous indique que 1.0.0.127.in-addr.arpa (c'est-a-dire 127.0.0.1), est connu sous le nom localhost. Maintenant, relancez votre named (la commande est ndc restart) et utilisez nslookup pour regarder le resultat de ce que vous avez fait : $ nslookup Default Server: localhost Address: 127.0.0.1 > 127.0.0.1 Server: localhost Address: 127.0.0.1 Name: localhost Address: 127.0.0.1 Tout va bien, on arrive a obtenir localhost a partir de 127.0.0.1. Maintenant, pour le sujet qui nous preoccupe, le domaine linux.bogus, inserez une nouvelle ligne primary dans named.boot : ______________________________________________________________________ primary linux.bogus pz/linux.bogus ______________________________________________________________________ Notez qu'encore une fois il n'y a pas de `.' a la fin des noms de domaine dans le fichier named.boot. Dans le fichier de zone linux.bogus, nous allons mettre quelques donnees totalement factices : ______________________________________________________________________ ; ; Zone file for linux.bogus ; ; Mandatory minimum for a working domain ; @ IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 199511301 ; serial, todays date + todays serial # 28800 ; refresh, seconds 7200 ; retry, seconds 3600000 ; expire, seconds 86400 ) ; minimum, seconds NS ns.linux.bogus. NS ns.friend.bogus. MX 10 mail.linux.bogus ; Primary Mail Exchanger MX 20 mail.friend.bogus. ; Secondary Mail Exchanger localhost A 127.0.0.1 ns A 127.0.0.2 mail A 127.0.0.4 ______________________________________________________________________ Il y a deux choses a noter a propos du champ SOA. ns.linux.bogus _d_o_i_t _a_b_s_o_l_u_m_e_n_t etre une vraie machine possedant un champ A. Il n'est pas legal d'avoir un champ CNAME pour la machine mentionnee dans le champ SOA. Il n'est pas necessaire que son nom soit `ns', ce peut etre tout autre nom valide. La deuxieme chose a noter c'est que hostmaster.linux.bogus doit se lire comme hostmaster@linux.bogus. Ce doit etre un alias de mail, ou une veritable boite aux lettres electronique, et la personne qui maintient le DNS doit la lire regulierement. Tous les mails concernant l'administration du domaine seront envoyes a cette adresse. Il n'est pas obligatoire que le nom soit `hostmaster', ce peut etre toute autre adresse mail legale, mais il faut dans ce cas que l'adresse `hostmaster' fonctionne aussi. Il y a un nouveau RR (Resource Record) dans ce fichier, c'est le MX, pour Mail eXchanger. Il indique aux systemes de gestion du courrier electronique a quelle machine envoyer le mail adresse a someone@linux.bogus, dans notre cas a mail.linux.bogus ou mail.friend.bogus. Le nombre devant chaque machine est sa priorite vis-a-vis du champ MX, le RR avec le numero le plus faible (10) correspond a la machine vers laquelle le courrier doit etre adresse en priorite. En cas d'echec, le courrier peut etre adresse a la machine qui a le numero de priorite immediatement superieur, c'est-a-dire mail.friend.bogus qui a une priorite de 20 dans notre cas. Relancez named en tapant ndc restart. Examinons le resultat avec nslookup : $ nslookup > set q=any > linux.bogus Server: localhost Address: 127.0.0.1 linux.bogus origin = linux.bogus mail addr = hostmaster.linux.bogus serial = 199511301 refresh = 28800 (8 hours) retry = 7200 (2 hours) expire = 604800 (7 days) minimum ttl = 86400 (1 day) linux.bogus nameserver = ns.linux.bogus linux.bogus nameserver = ns.friend.bogus linux.bogus preference = 10, mail exchanger = mail.linux.bogus.linux.bogus linux.bogus preference = 20, mail exchanger = mail.friend.bogus linux.bogus nameserver = ns.linux.bogus linux.bogus nameserver = ns.friend.bogus ns.linux.bogus internet address = 127.0.0.2 mail.linux.bogus internet address = 127.0.0.4 Un examen approfondi vous montrera qu'il y a un bug. En effet, la ligne linux.bogus preference = 10, mail exchanger = mail.linux.bogus.linux.bogus est entierement fausse. Il devrait y avoir linux.bogus preference = 10, mail exchanger = mail.linux.bogus J'ai fait cette erreur deliberement, c'etait juste pour voir si vous suiviez :-) En regardant dans le fichier de zone, nous trouvons que dans la ligne @ MX 10 mail.linux.bogus ; Primary Mail Exchanger il manque un point. Ou a un 'linux.bogus' de trop. Si, dans un fichier de zone, un nom de machine ne se termine pas par un point, l'origine est ajoutee au nom de la machine. Ainsi, une des deux formes : ______________________________________________________________________ @ MX 10 mail.linux.bogus. ; Primary Mail Exchanger ______________________________________________________________________ ou ______________________________________________________________________ @ MX 10 mail ; Primary Mail Exchanger ______________________________________________________________________ est correcte. Je prefere la deuxieme forme parce qu'il y a moins a taper. Dans un fichier de zone, le nom de domaine doit soit etre ecrit et termine par un point, ou ne pas etre inclus du tout. Dans ce dernier cas, le nom de domaine par defaut est l'origine. Il faut que j'insiste sur le point suivant : dans le fichier named.boot, il ne doit _p_a_s y avoir de points apres les noms de domaines. Vous ne pouvez pas vous imaginer combien de fois un `.' en trop ou en moins a tout foutu en l'air et a cause de graves prises de tete aux gens. Cela etant dit, voici le nouveau fichier de zone, avec quelques informations supplementaires : ______________________________________________________________________ ; ; Zone file for linux.bogus ; ; Mandatory minimum for a working domain ; @ IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 199511301 ; serial, todays date + todays serial # 28800 ; refresh, seconds 7200 ; retry, seconds 604800 ; expire, seconds 86400 ) ; minimum, seconds NS ns ; Inet Address of name server NS ns.friend.bogus. MX 10 mail ; Primary Mail Exchanger MX 20 mail.friend.bogus. ; Secondary Mail Exchanger localhost A 127.0.0.1 ns A 127.0.0.2 mail A 127.0.0.4 ; ; Extras ; @ TXT "Linux.Bogus, your DNS consultants" ns MX 10 mail MX 20 mail.friend.bogus. HINFO "Pentium" "Linux 1.2" TXT "RMS" richard CNAME ns www CNAME ns donald A 127.0.0.3 MX 10 mail MX 20 mail.friend.bogus. HINFO "i486" "Linux 1.2" TXT "DEK" mail MX 10 mail MX 20 mail.friend.bogus. HINFO "386sx" "Linux 1.0.9" ftp A 127.0.0.5 MX 10 mail MX 20 mail.friend.bogus. HINFO "P6" "Linux 1.3.59" ______________________________________________________________________ Vous prefererez certainement changer les trois premiers champs A de place afin qu'ils se trouvent a cote de leurs autres champs, au lieu d'etre en tete du fichier. Il y a un certain nombre de nouveaux RR que nous allons passer en revue : HINFO (Host INFOrmation), et c'est une bonne habitude a prendre que d'encadrer chaque partie de guillemets. La premiere partie est la descrition materielle ou le type de processeur de la machine tandis que la deuxieme partie decrit le logiciel utilise ou le systeme d'exploitation de la machine. ns a pour processeur un Pentium et tourne sous Linux 1.2. Le champ TXT est libre et vous pouvez l'utiliser pour tout ce qui vous passera par la tete. CNAME (Canonical NAME) est un champ qui permet de donner a chaque machine plusieurs noms. Ainsi, richard et www sont des alias pour ns. Il est important de noter que les champs MX, CNAME et SOA ne doivent _j_a_m_a_i_s mentionner un CNAME, ils ne doivent mentionner que des noms de machine possedant un champ A. Ainsi, il serait faux d'avoir : ______________________________________________________________________ foobar CNAME richard ; NO! ______________________________________________________________________ En revanche, ceci serait correct : ______________________________________________________________________ foobar CNAME ns ; Yes! ______________________________________________________________________ Il est aussi important de noter qu'un CNAME n'est pas un nom d'hote legal pour une adresse de courrier electronique. : webmaster@www.linux.bogus est une adresse de mail illegale avec la configuration ci-dessus. Vous pouvez etre surs qu'il y a un certain nombre d'administrateurs systeme dans le Vaste Monde qui sont tres a cheval sur cette regle, meme si elle marche pour vous. Une facon de contourner le probleme est d'utiliser des champs A (et peut-etre d'autres, comme un champ MX par exemple) a la place : ______________________________________________________________________ www A 127.0.0.2 ______________________________________________________________________ Paul Vixie, le gourou dont nous avons deja parle, recommande de ne _j_a_m_a_i_s utiliser de CNAME. Envisagez donc _t_r_e_s serieusement de ne pas en utiliser. Chargez la nouvelle base de donnees en lancant ndc reload, ce qui forcera named a relire ses fichiers de configuration. $ nslookup Default Server: localhost Address: 127.0.0.1 > ls -d linux.bogus Ceci veut dire que l'on souhaite que tous les champs soient affiches. [localhost] linux.bogus. SOA ns.linux.bogus hostmaster.linux.bogus. (199511301 28800 7200 604800 86400) linux.bogus. NS ns.linux.bogus linux.bogus. NS ns.friend.bogus linux.bogus. MX 10 mail.linux.bogus linux.bogus. MX 20 mail.friend.bogus linux.bogus. TXT "Linux.Bogus, your DNS consultants" localhost A 127.0.0.1 mail A 127.0.0.4 mail MX 10 mail.linux.bogus mail MX 20 mail.friend.bogus mail HINFO 386sx Linux 1.0.9 donald A 127.0.0.3 donald MX 10 mail.linux.bogus donald MX 20 mail.friend.bogus donald HINFO i486 Linux 1.2 donald TXT "DEK" www CNAME ns.linux.bogus richard CNAME ns.linux.bogus ftp A 127.0.0.5 ftp MX 10 mail.linux.bogus ftp MX 20 mail.friend.bogus ftp HINFO P6 Linux 1.3.59 ns A 127.0.0.2 ns MX 10 mail.linux.bogus ns MX 20 mail.friend.bogus ns HINFO Pentium Linux 1.2 ns TXT "RMS" linux.bogus. SOA ns.linux.bogus hostmaster.linux.bogus. (199511301 28800 7200 604800 86400) Tout va bien. Regardons ce qu'il dit pour www tout seul : > set q=any > www.linux.bogus. Server: localhost Address: 127.0.0.1 www.linux.bogus canonical name = ns.linux.bogus linux.bogus nameserver = ns.linux.bogus linux.bogus nameserver = ns.friend.bogus ns.linux.bogus internet address = 127.0.0.2 et ns.linux.bogus possede l'adresse 127.0.0.2. Ca a l'air bon aussi. OOnn ssee rreellaaxxee Bien sur, ce domaine est tres factice, tout comme le sont ses adresses. Ce peut-etre, malheureusement, un peu deroutant pour vous. Un vrai exemple tire d'un vrai domaine vous attend au chapitre suivant. 55.. UUnn eexxeemmppllee ttiirree dd''uunn ddoommaaiinnee rreeeell OOuu nnoouuss aalllloonnss eennffiinn vvooiirr ddee _v_r_a_i_s ffiicchhiieerrss ddee zzoonnee Certains utilisateurs ont suggere que je mette un vrai exemple d'un domaine qui marche dans la realite car mon explication de la difference entre un vrai domaine et l'exemple bidon ci-dessus n'etait pas tres claire. Une chose importante a propos de cet exemple : ne l'entrez _p_a_s dans vos serveurs de nom ! Ne l'utilisez que comme reference. Si vous voulez experimentez, faites-le avec l'exemple du domain bogus. J'utilise cet exemple avec la permission de David Bullock de LAND-5. Ces fichiers etaient a jour le 24 Septembre 96, et peuvent donc differer de ce que vous pouvez trouver en questionnant les serveurs de nom de LAND-5 aujourd'hui. Et souvenez-vous : enlevez les caracteres blancs en tete de ligne ;-) 55..11.. //eettcc//nnaammeedd..bboooott ((oouu //vvaarr//nnaammeedd//nnaammeedd..bboooott)) Voici les deux lignes primary pour les deux zones inverses dont nous avons besoin : le reseau 127.0.0, ainsi que le sous-reseau 206.6.177 de LAND-5. Et une ligne primary pour la forward zone land-5.com. Notez enfin qu'au lieu de mettre les fichiers dans un repertoire appele pz, comme je fais dans ce HOWTO, il les place dans un repertoire appele zone. ______________________________________________________________________ ; Boot file for LAND-5 name server ; directory /var/named ; ; type domain source file or host cache . root.cache primary 0.0.127.in-addr.arpa zone/127.0.0 primary 177.6.206.in-addr.arpa zone/206.6.177 primary land-5.com zone/land-5.com ______________________________________________________________________ 55..22.. //vvaarr//nnaammeedd//rroooott..ccaacchhee Souvenez-vous que le contenu de ce fichier peut changer, et celui donne ici est assez vieux. Vous feriez mieux d'utiliser un fichier plus recent, produit par dig. ______________________________________________________________________ ; <<>> DiG 2.1 <<>> ;; res options: init recurs defnam dnsrch ;; got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6 ;; flags: qr rd ra; Ques: 1, Ans: 9, Auth: 0, Addit: 9 ;; QUESTIONS: ;; ., type = NS, class = IN ;; ANSWERS: . 518357 NS H.ROOT-SERVERS.NET. . 518357 NS B.ROOT-SERVERS.NET. . 518357 NS C.ROOT-SERVERS.NET. . 518357 NS D.ROOT-SERVERS.NET. . 518357 NS E.ROOT-SERVERS.NET. . 518357 NS I.ROOT-SERVERS.NET. . 518357 NS F.ROOT-SERVERS.NET. . 518357 NS G.ROOT-SERVERS.NET. . 518357 NS A.ROOT-SERVERS.NET. ;; ADDITIONAL RECORDS: H.ROOT-SERVERS.NET. 165593 A 128.63.2.53 B.ROOT-SERVERS.NET. 165593 A 128.9.0.107 C.ROOT-SERVERS.NET. 222766 A 192.33.4.12 D.ROOT-SERVERS.NET. 165593 A 128.8.10.90 E.ROOT-SERVERS.NET. 165593 A 192.203.230.10 I.ROOT-SERVERS.NET. 165593 A 192.36.148.17 F.ROOT-SERVERS.NET. 299616 A 192.5.5.241 G.ROOT-SERVERS.NET. 165593 A 192.112.36.4 A.ROOT-SERVERS.NET. 165593 A 198.41.0.4 ;; Total query time: 250 msec ;; FROM: land-5 to SERVER: default -- 127.0.0.1 ;; WHEN: Fri Sep 20 10:11:22 1996 ;; MSG SIZE sent: 17 rcvd: 312 ______________________________________________________________________ ______________________________________________________________________ ; Boot file for LAND-5 name server ; directory /var/named ; ; type domain source file or host cache . root.cache primary 0.0.127.in-addr.arpa zone/127.0.0 primary 177.6.206.in-addr.arpa zone/206.6.177 primary land-5.com zone/land-5.com ______________________________________________________________________ 55..33.. //vvaarr//nnaammeedd//zzoonnee//112277..00..00 Seulement l'essentiel, le champ SOA obligatoire, et un champ qui etablit la correspondance entre 127.0.0.1 et localhost. Ils sont tous les deux indispensables. Rien d'autre ne doit figurer dans ce fichier. Il ne sera probablement jamais besoin de le mettre a jour, a moins que l'adresse du serveur de noms ou de hostmaster ne change. ______________________________________________________________________ @ IN SOA land-5.com. root.land-5.com. ( 199609203 ; Serial 28800 ; Refresh 7200 ; Retry 604800 ; Expire 86400) ; Minimum TTL NS land-5.com. 1 PTR localhost. ______________________________________________________________________ 55..44.. //vvaarr//nnaammeedd//zzoonnee//llaanndd--55..ccoomm Nous trouvons ici le classique et obligatoire champ SOA ainsi que les champs NS. Nous pouvons voir qu'il a un serveur de noms secondaire ns2.psi.net. C'est comme ca que tout le monde devrait faire : _t_o_u_j_o_u_r_s avoir un serveur secondaire sur un site distant pour faire des sauvegardes. Nous voyons egalement que le serveur primaire est land-5, qui assure tous les services, et que l'administrateur a utilise des CNAME pour faire ca (il aurait pu utiliser des champs A). Comme vous pouvez voir d'apres le champ SOA, le fichier de zone a son origine a land-5.com, la personne a contacter est root@land-5.com. hostmaster est une autre adresse souvent utilisee pour la personne a contacter. Le numero de serie est au format obligatoire aaaammjj, avec le numero de serie dans la journee ajoute a la fin; il s'agit certainement de la sixieme version du fichier de zone pour la journee du 20 septembre 1996. N'oubliez-pas que le numero de serie doit _o_b_l_i_g_a_t_o_i_r_e_m_e_n_t augmenter de maniere monotone, ici il n'y a qu'un chiffre pour le numero de serie dans la journee, si bien qu'apres 9 modifications il faudra attendre le lendemain pour modifier le fichier a nouveau. Envisagez d'utiliser deux chiffres au lieu d'un seul. ______________________________________________________________________ @ IN SOA land-5.com. root.land-5.com. ( 199609206 ; serial, todays date + todays serial # 10800 ; refresh, seconds 7200 ; retry, seconds 10800 ; expire, seconds 86400 ) ; minimum, seconds NS land-5.com. NS ns2.psi.net. MX 10 land-5.com. ; Primary Mail Exchanger localhost A 127.0.0.1 router A 206.6.177.1 land-5.com. A 206.6.177.2 ns CNAME land-5.com. ftp CNAME land-5.com. www CNAME land-5.com. mail CNAME land-5.com. news CNAME land-5.com. funn A 206.6.177.3 illusions CNAME funn.land-5.com. @ TXT "LAND-5 Corporation" ; ; Workstations ; ws_177200 A 206.6.177.200 MX 10 land-5.com. ; Primary Mail Host ws_177201 A 206.6.177.201 MX 10 land-5.com. ; Primary Mail Host ws_177202 A 206.6.177.202 MX 10 land-5.com. ; Primary Mail Host ws_177203 A 206.6.177.203 MX 10 land-5.com. ; Primary Mail Host ws_177204 A 206.6.177.204 MX 10 land-5.com. ; Primary Mail Host ws_177205 A 206.6.177.205 MX 10 land-5.com. ; Primary Mail Host ; {Many repetitive definitions deleted - SNIP} ws_177250 A 206.6.177.250 MX 10 land-5.com. ; Primary Mail Host ws_177251 A 206.6.177.251 MX 10 land-5.com. ; Primary Mail Host ws_177252 A 206.6.177.252 MX 10 land-5.com. ; Primary Mail Host ws_177253 A 206.6.177.253 MX 10 land-5.com. ; Primary Mail Host ws_177254 A 206.6.177.254 MX 10 land-5.com. ; Primary Mail Host ______________________________________________________________________ Une autre chose qu'il faut noter est que les stations de travail n'ont pas de nom personnel, mais plutot un prefixe suivit des deux derniers morceaux de leur adresse IP. Utiliser une telle convention simplifie grandement la maintenance, mais c'est un peu impersonnel. 55..55.. //vvaarr//nnaammeedd//zzoonnee//220066 Les commentaires se trouvent apres ce fichier ______________________________________________________________________ @ IN SOA land-5.com. root.land-5.com. ( 199609206 ; Serial 28800 ; Refresh 7200 ; Retry 604800 ; Expire 86400) ; Minimum TTL NS land-5.com. NS ns2.psi.net. ; ; Servers ; 1 PTR router.land-5.com. 2 PTR land-5.com. 3 PTR funn.land-5.com. ; ; Workstations ; 200 PTR ws_177200.land-5.com. 201 PTR ws_177201.land-5.com. 202 PTR ws_177202.land-5.com. 203 PTR ws_177203.land-5.com. 204 PTR ws_177204.land-5.com. 205 PTR ws_177205.land-5.com. ; {Many repetitive definitions deleted - SNIP} 250 PTR ws_177250.land-5.com. 251 PTR ws_177251.land-5.com. 252 PTR ws_177252.land-5.com. 253 PTR ws_177253.land-5.com. 254 PTR ws_177254.land-5.com. ______________________________________________________________________ La zone inverse est la partie de la configuration qui semble poser le plus de problemes. Elle est utilisee pour trouver le nom d'hote d'une machine connaissant son adresse IP. Exemple : vous etes un serveur IRC et vous acceptez des connexions provenant de clients IRC. Cependant, comme vous etes un serveur IRC norvegien, vous ne voulez accepter que les connexions venant de Norvege ou des autres pays scandinaves. Ainsi, lorsqu'un client se connecte chez vous, la bibliotheque C peut vous dire quelle est l'adresse IP du client, puisque cette-derniere se trouve dans tous les paquets qui traversent le reseau. Ensuite, vous pouvez appeler une fonction connue sous le nom de gethostbyaddr qui va rechercher le nom d'une machine connaissant son adresse IP. Gethostbyaddr va poser la question a un serveur de noms, qui va alors faire une recherche de la machine dans le DNS. Supposons que la connexion du client se fasse depuis ws_177200.land-5.com. L'adresse IP que la bibliotheque C fournit au serveur IRC est 206.6.177.200. Pour retrouver le nom de cette machine, il nous faut trouver 200.177.6.206.in-addr.arpa. Le serveur de noms va donc d'abord trouver les serveurs arpa., puis les serveurs in-addr.arpa., poursuivre la recherche inverse par 206, puis 6 et finalement trouver le serveur pour la zone 177.6.206.in-addr.arpa a land-5. C'est ce-dernier qui lui dira que pour 200.177.6.206.in-addr.arpa nous avons un champ 'PTR ws_177200.land-5.com', ce qui veut dire que le nom qui va avec 206.6.177.200 est ws_177200.land-5.com. Tout comme pour l'explication de la resolution de prep.ai.mit.edu, tout ceci est legerement fictif. Revenons a l'exemple du serveur IRC. Le serveur n'accepte que les connexions venant des pays scandinaves, c'est-a-dire *.no, *.se, *.dk. Le nom ws_177200.land-5.com ne correspond evidemment pas, et le serveur va donc refuser la connexion. Si il n'existait _p_a_s de resolution inverse de 206.2.177.200 au travers de la zone in- addr.arpa, le serveur aurait ete tout a fait incapable de trouver le nom, et aurait du se contenter de comparer 206.6.177.200 a *.no, *.se et *.dk, dont aucun ne correspond. Certains gens vous diront que la resolution de noms inverse n'est importante que pour les serveurs, ou pas importante du tout. Pas tant que ca : beaucoup de serveurs ftp, news, irc ou http (Web) n'acceptent _p_a_s les connexions venant de machines dont ils ne peuvent retrouver le nom. C'est pourquoi la resolution de noms inverse pour les machines est _o_b_l_i_g_a_t_o_i_r_e. 66.. MMaaiinntteennaannccee GGaarrddeerr vvoottrree DDNNSS eenn eettaatt ddee mmaarrcchhee En plus des taches normales, il y a une tache de maintenance speciale a effectuer sur les serveurs de nom. Il s'agit de garder le fichier root.cache a jour. La facon la plus simple de le faire est d'utiliser dig. Lancez d'abord dig sans argument, vous obtiendrez le fichier root.cache de votre propre serveur. Posez alors la meme question a un des serveurs de cette liste avec la commande dig @rootserver. Vous remarquerez que ce que vous obtenez ressemble enormement a un fichier root.cache, avec quelques chiffres en plus. Ces chiffres supplementaires sont inoffensifs. Sauvez-le dans un fichier (dig . @e.root-servers.net >root.cache.new) et remplacez l'ancien fichier root.cache avec. N'oubliez pas de relancer named apres avoir remplace le fichier root.cache. Al Longyear m'a envoye ce script qui peut etre lance automatiquement pour mettre a jour named.cache. Lancez-le automatiquement a partir de la crontab et vous pourrez oublier qu'il existe. Ce script suppose que l'alias de mail `hostmaster' existe. Il vous faudra modifier quelque peu ce fichier pour qu'il fonctionne chez vous. ______________________________________________________________________ #!/bin/sh # # Update the nameserver cache information file once per month. # This is run automatically by a cron entry. # ( echo "To: hostmaster " echo "From: system " echo "Subject: Automatic update of the named.boot file" echo export PATH=/sbin:/usr/sbin:/bin:/usr/bin: cd /var/named dig . @rs.internic.net >named.cache.new echo "The named.boot file has been updated to contain the following information:" echo cat named.boot.new chown root.root named.cache.new chmod 444 named.cache.new rm -f named.cache.old mv named.cache named.cache.old mv named.cache.new named.cache ndc restart echo echo "The nameserver has been restarted to ensure that the update is complete. " echo "The previous named.cache file is now called /var/named/named.cache.old." ) 2>&1 | /usr/lib/sendmail -t exit 0 ______________________________________________________________________ 77.. CCoonnffiigguurraattiioonn aauuttoommaattiiqquuee ppoouurr lleess ccoonnnneexxiioonnss eenn ddiiaalluupp Ce chapitre explique comment j'ai configure les choses pour que tout se fasse de maniere automatique. Le facon dont j'ai procede peut ne pas vous convenir du tout, mais ca peut quand meme vous donner des idees. En outre, j'utilise ppp pour faire du dialup alors que beaucoup utilisent slip ou cslip, c'est pourquoi votre configuration peut etre totalement differente de la mienne. Mais le programme dip de slip doit pouvoir faire beaucoup de ces choses pour vous. Normalement, lorsque je ne suis pas connecte au Net, mon fichier resolv.conf contient simplement la ligne suivante : domain uio.no Ca permet d'eviter que la librairie de resolution de nom n'essaye de se connecter a un serveur de noms qui ne peut rien pour moi. Mais lorsque je me connecte, je veux demarrer mon named et avoir un resolv.conf qui ressemble a ceux que nous avons vus plus haut. J'ai resolu ce probleme en gardant deux fichiers 'a la' resolv.conf que j'ai appeles resolv.conf.local et resolv.conf.connected. Le dernier ressemble au fichier resolv.conf decrit plus haut dans ce document. Pour me connecter automatiquement au Net, je lance un script appele ______________________________________________________________________ #!/bin/sh echo calling... pppd ______________________________________________________________________ pppd possede un fichier appele options qui lui donne tous les details necessaires pour etablir la connexion. Une fois que ma connexion ppp est etablie, le pppd lance un script appele ip-up (Tout ceci est decrit dans la page de man de pppd). Voici un extrait de ce script : ______________________________________________________________________ #!/bin/sh interface="$1" device="$2" speed="$3" myip="$4" upip="$5" ... cp -v /etc/resolv.conf.connected /etc/resolv.conf ... /usr/sbin/named ______________________________________________________________________ C'est ici que je demarre mon named. A la fermeture de la connexion ppp, pppd lance un script appele ip-down : ______________________________________________________________________ #!/bin/sh cp /etc/resolv.conf.local /etc/resolv.conf read namedpid >/etc/hosts ______________________________________________________________________ hosts.ppp contient tout simplement ______________________________________________________________________ 127.0.0.1 localhost ______________________________________________________________________ C'est la ligne echo qui insere l'adresse IP que j'obtiens pour mon nom d'hote (roke). Il faut que vous remplaciez roke par le nom sous lequel votre machine se connait. On peut l'obtenir par la commande hostname. Il n'est pas tres malin de faire tourner named lorsque l'on n'est pas connecte au Net. En effet, named essaye d'envoyer des requetes sur le Net et, comme il a un grand timeout, il vous faut attendre ce timeout a chaque fois qu'un de vos programmes essaye de resoudre un nom. Si vous utilisez une connexion en dialup, il vous faut demarrer named a la connexion et l'arreter lors de la deconnexion. J'ai recu du courrier me disant que le comportement normal n'etait pas celui-la, mais je n'ai pas reussi a le faire marcher sans avoir a attendre de longs timeouts. Merci de me mailer _t_o_u_s les details si vous avez des informations plus precises. Certaines personnes utilisent une directive forwarders parce qu'elles se trouvent au bout d'une ligne tres lente. Si votre fournisseur d'acces a des serveurs de nom aux adresses 1.2.3.4 et 1.2.3.5, vous pouvez inserer la ligne suivante : ______________________________________________________________________ forwarders 1.2.3.4 1.2.3.5 ______________________________________________________________________ dans le fichier named.boot. N'oubliez pas, dans ce cas, de laisser le fichier named.cache vide. Ceci vous permettra de diminuer la quantite de trafic IP genere par votre machine, et peut-etre accelerer un peu les choses. C'est particulierement important si vous payez au volume de donnees transferees. En plus, ca vous evite d'avoir a maintenir un serveur de nom pour faire cache : vous n'avez pas a maintenir a jour un fichier named.cache qui est desormais vide. 88.. FFAAQQ Dans cette section, je passe en revue quelques-unes des questions les plus frequemment posees a propos du DNS et de ce HOWTO. Et je donne meme les reponses ;-) Merci de bien lire cette section avant de me mailer. 1. Question : Comment utiliser un DNS si l'on se trouve derriere un firewall ? Voici quelques indices : `forwarders', `slaves', et jetez un coup d'oeil a la bibliographie qui se trouve a la fin de ce HOWTO. 2. Question : Comment dire a un DNS qu'il doit faire une rotation entre un certain nombre d'adresses pour un service donne, comme par exemple si l'on veut obtenir un effet d'equilibrage de charge sur www.busy.site, ou quelque chose du meme genre ? Creez plusieurs champs A pour www.busy.com et utilisez bind 4.9.3 ou une version plus recente, qui supporte les reponses a scrutation circulaire. Cela ne marchera _p_a_s avec des versions de bind anterieures. 3. Mon systeme ne possede pas le programme ndc. Que puis-je faire ? Votre systeme doit avoir une vieille version de bind, certainement obsolete. Si la securite est une chose importante pour vous, passez a une version recente de bind tout de suite. Si ce n'est pas le cas, vous pouvez vivre sans ndc. Et a la place de lancer ndc start, tapez named. ndc reload devient ainsi named.reload et ndc restart devient ainsi named.restart. Tous ces programmes se trouvent le plus souvent dans /usr/sbin 4. Comment mettre en place un serveur secondaire ? Si le serveur primaire a pour adresse 127.0.0.1, mettez une ligne comme celle-ci dans le fichier named.boot du serveur secondaire : ___________________________________________________________________ secondary linux.bogus 127.0.0.1 sz/linux.bogus ___________________________________________________________________ 5. Je veux faire tourner bind lorsque je suis deconnecte du reseau J'ai recu le mail suivant de Ian Clark , ou il explique comment il fait ca : Ici, je fais tourner named sur la machine qui fais du root.cache.real et qui contient les vrais noms des serveurs root, et l'autre qui s'appelle root.cache.fake qui contient ceci : -------------- ; root.cache.fake ; this file contains no information -------------- Quand je me deconnecte, je copie le fichier root.cache.fake vers root.cache et je relance named. Quand je me connecte, je copie root.cache.real et je relance named. Ces deux manoeuvres sont faites, respectivement, a partir de ip-down et ip-up. Lorsque je suis deconnecte, named rajoute ceci au fichier messages apres la premiere requete concernant un nom de domaine qu'il ne connait pas : Jan 28 20:10:11 hazchem named[10147]: No root nameserver for class IN Ce qui n'est pas tres genant. Ca marche tres bien dans mon cas. Je peux utiliser le serveur de noms pour les machines locales lorsque je suis deconnecte du Net en evitant les delais introduits par les timeout lies a la recherche des noms de domaine exterieurs. Et lorsque je suis connecte au Net, les requetes concernant les noms de domaines exterieurs marchent normalement. 6. Ou est-ce que le serveur de nom qui fait cache stocke son cache ? Puis-je controler la taille de ce cache ? Le cache est entierement stocke en memoire, il n'est _p_a_s ecrit sur le disque. Chaque fois que vous tuez named, le cache est perdu. Il n'y a _a_u_c_u_n moyen de controler le cache. Named gere le cache selon quelques regles simples, et c'est tout. Vous ne pouvez pas controler le cache ou sa taille en aucune maniere. Si vous voulez vraiment le faire, vous pouvez le faire en bricolant le code de named. Mais ce n'est pas recommande. 7. Est-ce que named sauvegarde le contenu du cache entre deux restarts ? Puis-je le forcer a le faire ? Non, named ne sauve _p_a_s la contenu du cache lorsqu'il meurt. Cela signifie que le cache est reconstruit a partir de zero chaque fois que vous tuez puis relancez named. Il n'y a _a_u_c_u_n moyen de forcer named a sauvegarder le contenu du cache dans un fichier. Si vous voulez vraiment le faire, vous pouvez le faire en bricolant le code de named. Mais ce n'est, encore une fois, pas recommande. 99.. CCoommmmeenntt ddeevveenniirr uunn aaddmmiinniissttrraatteeuurr DDNNSS ddee llaa pplluuss hhaauuttee vvoolleeee DDooccuummeennttaattiioonn eett oouuttiillss La Vraie Documentation existe. En ligne et imprimee. Il faut absolument la lire si vous voulez devenir un administrateur DNS du plus haut niveau. Pour ce qui est de la documentation imprimee, le livre standard est _D_N_S _a_n_d _B_I_N_D de C. Liu et P. Albitz chez O'Reilly & Associates, Sebastopol, CA, ISBN 0-937175-82-X. Je l'ai lu, c'est excellent. Il y a aussi un chapitre sur le DNS dans _T_C_P_/_I_P _N_e_t_w_o_r_k _A_d_m_i_n_i_s_t_r_a_t_i_o_n, de Craig Hunt chez O'Reilly..., ISBN 0-937175-82-X. Un autre passage oblige pour une Bonne administration de DNS (ou Bonne n'importe quoi, d'ailleurs) est _Z_e_n _a_n_d _t_h_e _A_r_t _o_f _M_o_t_o_r_c_y_c_l_e _M_a_i_n_t_e_n_a_n_c_e by Robert M. Prisig :-) Disponible sous la reference ISBN 0688052304. Online, vous trouverez des trucs sur , ; Une FAQ, un manuel de reference (BOG; Bind Operations Guide) aussi bien que des papiers, des descriptions de protocoles et des trucs sur le service DNS. Je n'ai pas lu la plupart de ces trucs-la, c'est pourquoi je ne suis pas un Grand administrateur de DNS. Arnt Gulbrandsen, a l'inverse, a lu BOG et n'en dit que du bien :-). Le newsgroup comp.protocols.tcp- ip.domains parle de DNS. En complement, il y a un certain nombre de RFC sur le DNS, les plus importantes sont certainement celles-ci : RRFFCC 22005522 A. Gulbrandsen, P. Vixie, _A _D_N_S _R_R _f_o_r _s_p_e_c_i_f_y_i_n_g _t_h_e _l_o_c_a_t_i_o_n _o_f _s_e_r_v_i_c_e_s _(_D_N_S _S_R_V_), October 1996 RRFFCC 11991188 Y. Rekhter, R. Moskowitz, D. Karrenberg, G. de Groot, E. Lear, _A_d_d_r_e_s_s _A_l_l_o_c_a_t_i_o_n _f_o_r _P_r_i_v_a_t_e _I_n_t_e_r_n_e_t_s, 02/29/1996. RRFFCC 11991122 D. Barr, _C_o_m_m_o_n _D_N_S _O_p_e_r_a_t_i_o_n_a_l _a_n_d _C_o_n_f_i_g_u_r_a_t_i_o_n _E_r_r_o_r_s, 02/28/1996. RRFFCC 11771133 A. Romao, _T_o_o_l_s _f_o_r _D_N_S _d_e_b_u_g_g_i_n_g, 11/03/1994. RRFFCC 11771122 C. Farrell, M. Schulze, S. Pleitner, D. Baldoni, _D_N_S _E_n_c_o_d_i_n_g _o_f _G_e_o_g_r_a_p_h_i_c_a_l _L_o_c_a_t_i_o_n, 11/01/1994. RRFFCC 11118833 R. Ullmann, P. Mockapetris, L. Mamakos, C. Everhart, _N_e_w _D_N_S _R_R _D_e_f_i_n_i_t_i_o_n_s, 10/08/1990. RRFFCC 11003355 P. Mockapetris, _D_o_m_a_i_n _n_a_m_e_s _- _i_m_p_l_e_m_e_n_t_a_t_i_o_n _a_n_d _s_p_e_c_i_f_i_c_a_t_i_o_n, 11/01/1987. RRFFCC 11003344 P. Mockapetris, _D_o_m_a_i_n _n_a_m_e_s _- _c_o_n_c_e_p_t_s _a_n_d _f_a_c_i_l_i_t_i_e_s, 11/01/1987. RRFFCC 11003333 M. Lottor, _D_o_m_a_i_n _a_d_m_i_n_i_s_t_r_a_t_o_r_s _o_p_e_r_a_t_i_o_n_s _g_u_i_d_e, 11/01/1987. RRFFCC 11003322 M. Stahl, _D_o_m_a_i_n _a_d_m_i_n_i_s_t_r_a_t_o_r_s _g_u_i_d_e, 11/01/1987. RRFFCC 997744 C. Partridge, _M_a_i_l _r_o_u_t_i_n_g _a_n_d _t_h_e _d_o_m_a_i_n _s_y_s_t_e_m, 01/01/1986.