Comment mettre en place votre propre domaine
Avant d'entrer vraiment dans le vif du sujet, il va falloir
que je vous fasse un brin de théorie 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. Arrêtez le
survol quand vous en arrivez au point où j'explique ce qu'il faut mettre
dans le fichier named.boot
.
Le service DNS est un système organisé de manière hiérarchique. Le sommet
est désigné 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 à un serveur de noms de
.
(il possède déjà les adresses des serveurs de .
, c'est ce à quoi sert le
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 situé à la racine (root).
> server c.root-servers.net.
Default Server: c.root-servers.net
Address: 192.33.4.12
Positionnons le type de requête (Query Type) à NS (Name Server records).
> set q=ns
Posons la question à 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 à la différence 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 écran.
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 requête. Nous avons réussi à 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 commençant à partir de .
, nous avons successivement trouvé les
serveurs de noms des différents niveaux du nom de domaine. Si vous aviez
utilisé votre propre serveur DNS à la place de tous ces autres serveurs,
votre named aurait, bien sûr, caché 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
hiérarchie des noms de domaine comme un domaine "normal". in-addr.arpa
nous sert à obtenir le nom d'hôte connaissant l'adresse IP d'une machine.
Une chose très importante ici est de bien remarquer que les adresses
IP sont notées en sens inverse à l'intérieur du domaine in-addr.arpa. Si
vous avez l'adresse d'une machine : 192.128.52.43, named procède 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
liée à 43.52.128.192.in-addr.arpa.
Malin, n'est-ce-pas ? (dites "oui"). En fait, la résolution de noms inverse est assez difficile à admettre les deux premières années.
Pour dire vrai, je viens de vous mentir. Le service DNS ne marche pas vraiment comme je vous l'ai exposé. Mais ça en est suffisamment proche.
Notre propre domaine
Maintenant, nous en sommes à définir notre propre domaine bien à nous. Nous allons créer le domaine linux.bogus et y déclarer quelques machines. C'est un nom de domaine totalement factice, afin d'être sûr de ne déranger personne dans le Vaste Monde.
En fait, nous avons déjà commencé à créer 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 `.
' à la fin des noms de domaine de ce
fichier. La première ligne désigne le fichier pz/127.0.0
comme
étant celui qui définit le domaine 0.0.127.in-addr.arpa
. Nous avons
déjà configuré ce fichier, il se présente 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 `.
' à 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 définissant une zone par une directive $ORIGIN
, mais en
fait c'est superflu. L'origine (l'emplacement dans la hiérarchie du service
DNS) d'un fichier de zone est indiquée 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'abbréviation de `Start Of Authority' (Origine d'Autorité). Le `@' est une notation spéciale qui désigne l'origine. Et comme la colonne `domain' de ce fichier donne 0.0.127.in-addr.arpa, la première 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-à-dire 1.0.0.127.IN-ADDR.ARPA, c'est-à-dire 127.0.0.1) est appelé localhost.
Le champ SOA est le préambule de tous les fichiers de zone, et il doit y en avoir exactement un dans chaque fichier de zone, et ce doit être le tout premier champ du fichier.
Ce champ SOA décrit la zone, son origine (une machine appelée
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 à voir avec le cache et les serveurs DNS secondaires.
Pour les champs restants, refresh, retry, expire et minimum, utilisez les
valeurs données dans ce HOWTO et tout se passera certainement très 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-à-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 résultat 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 à obtenir localhost
à partir de
127.0.0.1.
Maintenant, pour le sujet qui nous préoccupe, le domaine linux.bogus
,
insérez une nouvelle ligne primary dans named.boot
:
primary linux.bogus pz/linux.bogus
Notez qu'encore une fois il n'y a pas de `.
' à la fin des noms de
domaine dans le fichier named.boot
.
Dans le fichier de zone linux.bogus, nous allons mettre quelques données 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 à noter à propos du champ SOA. ns.linux.bogus doit absolument être une vraie machine possédant un champ A. Il n'est pas légal d'avoir un champ CNAME pour la machine mentionnée dans le champ SOA. Il n'est pas nécessaire que son nom soit `ns', ce peut être tout autre nom valide. La deuxième chose à noter c'est que hostmaster.linux.bogus doit se lire comme hostmaster@linux.bogus. Ce doit être un alias de mail, ou une véritable boîte aux lettres électronique, et la personne qui maintient le DNS doit la lire régulièrement. Tous les mails concernant l'administration du domaine seront envoyés à cette adresse. Il n'est pas obligatoire que le nom soit `hostmaster', ce peut être toute autre adresse mail légale, 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 systèmes de gestion du courrier électronique
à quelle machine envoyer le mail adressé à someone@linux.bogus
, dans
notre cas à mail.linux.bogus
ou mail.friend.bogus
.
Le nombre devant chaque machine est sa priorité vis-à-vis du champ MX, le RR
avec le numéro le plus faible (10) correspond à la machine vers laquelle le
courrier doit être adressé en priorité.
En cas d'échec, le courrier peut être adressé à la machine qui a le numéro
de priorité immédiatement supérieur, c'est-à-dire mail.friend.bogus
qui a une priorité de 20 dans notre cas.
Relançez named en tapant ndc restart
. Examinons le résultat 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 entièrement fausse. Il devrait y avoir
linux.bogus preference = 10, mail exchanger = mail.linux.bogus
J'ai fait cette erreur délibérement, c'était 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 ajoutée 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 préfère la deuxième forme parce qu'il y a moins à taper. Dans un fichier de zone, le nom de domaine doit soit être écrit et terminé par un point, ou ne pas être inclus du tout. Dans ce dernier cas, le nom de domaine par défaut est l'origine.
Il faut que j'insiste sur le point suivant : dans le fichier named.boot, il
ne doit pas y avoir de points après 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 causé de graves prises de tête aux gens.
Cela étant dit, voici le nouveau fichier de zone, avec quelques informations supplémentaires :
; ; 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 préfererez certainement changer les trois premiers champs A de place afin qu'ils se trouvent à côté de leurs autres champs, au lieu d'être en tête 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 à prendre que d'encadrer chaque partie de guillemets. La première partie est la descrition matérielle ou le type de processeur de la machine tandis que la deuxième partie décrit le logiciel utilisé ou le système 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 tête. CNAME (Canonical NAME) est un champ qui permet de donner à 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 jamais mentionner un CNAME, ils ne doivent mentionner que des noms de machine possédant 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'hôte légal
pour une adresse de courrier électronique. : webmaster@www.linux.bogus
est une adresse de mail illégale avec la configuration ci-dessus.
Vous pouvez être sûrs qu'il y a un certain nombre d'administrateurs
système dans le
Vaste Monde qui sont très à cheval sur cette règle, même si elle
marche pour vous.
Une façon de contourner le problème est d'utiliser des champs A (et
peut-être d'autres, comme un champ MX par exemple) à la place :
www A 127.0.0.2
Paul Vixie, le gourou dont nous avons déjà parlé, recommande de ne jamais utiliser de CNAME. Envisagez donc très sérieusement de ne pas en utiliser.
Chargez la nouvelle base de données en lançant ndc reload
, ce qui
forcera named à 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 affichés.
[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
... en d'autres termes, le vrai nom de www.linux.bogus
est 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 possède l'adresse 127.0.0.2. Ca a l'air bon aussi.
On se relaxe
Bien sûr, ce domaine est très factice, tout comme le sont ses adresses. Ce peut-être, malheureusement, un peu déroutant pour vous. Un vrai exemple tiré d'un vrai domaine vous attend au chapitre suivant.
Chapitre suivant, Chapitre Précédent
Table des matières de ce chapitre, Table des matières générale
Début du document, Début de ce chapitre