Ce chapitre (Le système de Noms de Domaine (DNS)) est une contribution de Jason R. Fink
Le Système de Noms de Domaines sous NetBSD. Ce chapitre décrit la mise en place d'un domaine simple avec un Système de Noms de Domaine (DNS) sous NetBSD. Il ne donne pas de détails sur ce qu'est un DNS mais de courtes explications sont données. De plus amples renseignements peuvent être trouvés depuis le Répertoire de Ressources DNS (DNSRD) à la page http://www.dns.net/dnsrd/.
Les exemples présents font tous référence à l'utilisation du démon de noms internet de Berkeley (Berkeley Internet Naming Daemon ou BIND) version 9.0.0 disponible au Consortium de Logiciels Internet (Internet Software Consortium) http://www.isc.org et, bien entendu, dans la collection de paquetages de NetBSD. BIND 9.0.0 se trouve dans /usr/pkgsrc/net/bind-9.0.0/.
BIND 9 a été choisi par l'auteur car il s'agit de la plus récente diffusion de l'ISC.
Le lecteur doit déjà comprendre la répartition des adresses IP sur les hôtes et les spécifications de classes d'adresses IP.
Le Système de Noms de Domaines convertit des noms de machines en adresses IP. La correspondance se fait de nom en adresse et d'adresse en nom. La différence entre une conversion simple et une conversion par domaine introduit la notion de hiérarchie standardisée de noms. Elle fonctionne de droite à gauche, le plus haut niveau étant à droite. Prenons un exemple:
Premier niveau .org | Niveau intermédiaire .diverge.org ______________________|________________________ | | | Bas niveau strider.diverge.org samwise.diverge.org wormtongue.diverge.org
Le shéma semble simple mais il peut être divisé logiquement à n'importe quel endroit. Dans l'exemple ci-dessus, le domaine "diverge.org" se divise en trois noeuds mais nous aurions pu le diviser en sous domaines comme "strider.net1.diverge.org", "samwise.net2.diverge.org" et "wormtongue.net2.diverge.org". Dans ce cas, nous aurions eu un noeud pour le domaine "net1.diverge.org" et deux pour "net2.diverge.org".
Pour mettre en place notre DNS, nous continerons à utiliser les exemples ci-dessus. Avant de continuer, assurons-nous que:
La connexion à notre fournisseur d'accès fonctionne correctement.
IPNAT est actif et fonctionne.
Tous les ordinateurs utilisent le DNS du fournisseur d'accès.
Note : ce type de configuration est celui décrit au Chapitre 9.
Notre Serveur de Noms sera la machine "strider" qui fait aussi tourner IPNAT et les deux clients l'utilisent comme passerelle. Le type d'interface de " strider" n'est pas très important, disons qu'il utilise une ligne téléphonique à 56k.
Avant d'aller plus loin et avant d'effectuer les modifications pour utiliser le DNS, regardons le fichier " hosts" de strider.
Exemple 10-1. Le fichier /etc/hosts de strider
127.0.0.1 localhost 192.168.1.1 strider 192.168.1.2 samwise sam 192.168.1.3 wormtongue worm
Ce fichier n'est clairement qu'une ébauche de réseau mais il vaut la peine de constater que les règles que nous allons voir dans ce chapitre s'appliquent pareillement aux réseaux de grande dimension.
Le premier fichier à voir est /etc/named.conf. C'est celui qui sert à configurer bind. Le paramètrage du système, tel que nous le voulons, est assez simple. Voici à quoi il doit ressembler:
options { directory "/etc/named"; allow-transfer { 192.168.1.0/24; }; recursion yes; allow-query { 192.168.1.0/24; }; listen-on port 53 { 192.168.1.1; }; }; zone "localhost" { type master; notify no; file "zone.localhost"; }; zone "0.0.127.in-addr.arpa" in { type master; notify no; file "zone.127.0.0"; }; zone "diverge.org" { type master; notify no; file "zone.diverge.org"; }; zone "1.168.192.in-addr.arpa" { type master; notify no; file "zone.192.168.1"; }; zone "." in { type hint; file "zone.root"; };
A première vue, le contenu a l'air compliqué. En examinant de plus près, nous constatons qu'un certain nombre de lignes sont redondantes, il y aura finalement assez peu de concepts à expliquer.
Passons alors à la section consacrée à named.conf:
Cette section définit quelques paramètres globaux. Le plus important est le répertoire où se trouvent les tables du DNS. Pour ce système, elles seront placées dans /etc/named.
Voici le reste des paramètres:
pour que les DNS du fournisseur d'accès jouent le rôle de serveurs secondaires et qu'ils aient accès aux les fichiers de notre zone.
quels réseaux peuvent envoyer des demandes à ce serveur de noms.
le port sur lequel ce serveur named tournera.
Le reste du fichier named.conf consiste en une liste de " zones" . Chaque zone est associée à un fichier contenant des tables nécessaires à cette partie (ou " zone" ) du domaine. Il va de soi que la forme des différentes sections dédiées aux zones, dans named.conf, est constament la même. Nous allons donc nous intéresser à une seul d'entre elles:
dans tous les cas, hormis ".", le types est " master" .
est utilisé pour avertir lorsque les zones subissent des modifications. Dans ce type de mise en place, personne n'a besoin d'être prévenu.
le nom du fichier, dans le répertoire de named, où les renseignements sur cette zone peuvent être trouvés.
La plus grande partie des fichiers de zones est identique mais chacun possède ses propiétés uniques. Voici à quoi ressemble le fichier zone.localhost:
Exemple 10-2. zone.localhost
1|@ 1 IN SOA strider.diverge.org. root.diverge.org. ( 2| 1 ; Serial 3| 8H ; Refresh 4| 2H ; Retry 5| 1W ; Expire 6| 1D) ; Minimum TTL 7|; 8| IN NS strider.diverge.org. 9|; 10| IN A 127.0.0.1
Ligne par ligne:
Cette ligne est généralement la même pour toutes les zones à part la zone racine. Les parties intéressantes sont "strider.diverge.org" et "root.diverge.org". Evidemment, l'un est le nom du serveur et l'autre le nom du contact pour ce serveur. Dans la plupart des cas, root est ambiguë et il est préférable de mettre un compte de courriel (par exemple, le mien serait jrf.diverge.org.).
Cette ligne est un numéro de série. Généralement, les administrateurs indiquent la date à laquelle le serveur a été mis en place, sous la forme MMJJAAAA. Il doit être incrémenté à chaque fois qu'une modification est effectuée dans le fichier after l'installation. C'est pourquoi je préfère commencer à 1.
Le taux de raffraichissement du serveur. Ici, les informations sont remises à jour toutes les huit heures.
A quel intervelle de temps faut-il ré-essayer.
Expiration de la recherche.
La durée de vie minimum (TTL: Time To Live).
Une ligne blanche pour la lisibilité (un séparateur de sections, si vous voulez).
La ligne du serveur de noms. Comme nous pouvons le voir, il s'agit de strider.
Une ligne blanche de séparation.
L'enregistrement de l'hôte local, c'est à dire 127.0.0.1
ATTENTION |
Notez que "strider.diverge.org." possède un point final. Il est essentiel que cette curiosité et les autres soient respectées pour éviter tout problème. |
C'est le fichier de recherche inverse de l'hôte local. Il ressemble à:
1| @ 1 IN SOA strider.diverge.org. root.diverge.org. ( 2| 1 ; Serial 3| 8H ; Refresh 4| 2H ; Retry 5| 1W ; Expire 6| 1D) ; Minimum TTL 7| ; 8| IN NS strider.diverge.org. 9| ; 10| 1 IN PTR localhost.
Dans ce fichier, toutes les lignes sont les mêmes que celles du fichier de zones à part la ligne 10, l'enregistrement inverse. Il est défini dans un fichier séparé car il s'agit de l'hôte local qui possède une adresse totalement différente de celles des autres zones. Laissons cela pour le moment et finissons d'examiner les autres zones.
Ce fichier est peuplé par les enregistrements de tous les ordinateurs de notre réseau 192.168.1.0/24. Voici à quoi il ressemble:
1| @ 1 IN SOA strider.diverge.org. root.diverge.org. ( 2| 1 ; serial 3| 8H ; refresh 4| 2H ; retry 5| 1W ; expire 6| 1D ) ; minimum seconds 7| ; 8| IN NS strider.diverge.org. 9| IN MX 10 maila.diverge.org. ; primary mail server 10| IN MX 20 mailb.diverge.org. ; secondary mail server 11| ; 12| strider IN A 192.168.1.1 13| maila IN CNAME strider.diverge.org. 14| samwise IN A 192.168.1.2 15| www IN CNAME samwise.diverge.org. 16| mailb 17| worm IN A 192.168.1.3
Nous trouvons ici quelques nouveautés. Passons chaque ligne nouvelle en revue:
Cette ligne indique le gestionnaire de courrier électronique. Dans notre cas, il s'agit de strider mais, pour des raisons pratiques, nous voulons l'appeler " maila" . Comme nous le verrons plus loin, ce n'est pas un problème. Le numéro précédant "maila.diverge.org." indique la priorité. Plus il est petit plus la priorité est grande. Dans notre cas, si strider ne peut gérer le courriel, c'est mailb (en réalité samwise) qui s'en occupera.
CNAME veut dire "canonical name" et réprésente un alias. Nous avons ainsi créé les alias suivants:
maila.diverge.org pour strider.diverge.org mailb.diverge.org pour samwise.diverge.org www.diverge.org pour samwise.diverge.org
Le reste des enregistrements est simplement une correspondance entre une adresse IP et un nom complet.
Ce fichier de zone est le fichier inverse pour tous les enregistrements d'hôtes. Sa forme est similaire à celle de l'hôte local sauf, évidemment, en ce qui concerne l'adresse:
1|@ 1 IN SOA strider.diverge.org. root.diverge.org. ( 2| 1 ; serial 3| 8H ; refresh 4| 2H ; retry 5| 1W ; expire 6| 1D ) ; minimum seconds 7|; 8| IN NS strider.diverge.org. 9|; 10|1 IN PTR strider.diverge.org. 11|2 IN PTR samwise.diverge.org. 12|3 IN PTR worm.diverge.org.
Ce fichier contient la liste des serveurs racine auquels doit faire appel votre serveur lorsqu'il reçoit une demande concernant un autre domaine que le sien. En voici les première lignes:
$TTL 86400 . IN SOA A.ROOT-SERVERS.NET. hostmaster.INTERNIC.NET. ( 1999033000 ;serial 1800 ;refresh every 30 min 900 ;retry every 15 minutes 604800 ;expire after a week 86400 ;minimum of a day ) . 518400 IN NS A.ROOT-SERVERS.NET. A.ROOT-SERVERS.NET. 518400 A 198.41.0.4 . 518400 NS H.ROOT-SERVERS.NET. H.ROOT-SERVERS.NET. 518400 A 128.63.2.53 . 518400 NS B.ROOT-SERVERS.NET. B.ROOT-SERVERS.NET. 518400 A 128.9.0.107 . 518400 NS C.ROOT-SERVERS.NET. C.ROOT-SERVERS.NET. 518400 A 192.33.4.12 . 518400 NS D.ROOT-SERVERS.NET. D.ROOT-SERVERS.NET. 518400 A 128.8.10.90 . 518400 NS E.ROOT-SERVERS.NET. E.ROOT-SERVERS.NET. 518400 A 192.203.230.10 . 518400 NS I.ROOT-SERVERS.NET. I.ROOT-SERVERS.NET. 518400 A 192.36.148.17 . 518400 NS F.ROOT-SERVERS.NET. F.ROOT-SERVERS.NET. 518400 A 192.5.5.241 . 518400 NS G.ROOT-SERVERS.NET. G.ROOT-SERVERS.NET. 518400 A 192.112.36.4 . . .
Ce fichier peut être obtenu chez ISC, sur son site http://www.isc.org/et est habituellement fourni dans la distribution de BIND.
Dans cette section, nous allons voir comment mettre le DNS en route et paramètrer strider pour qu'il utilise ses propres services.
Tout d'abord, il nous faut lancer le démon name. Il existe plusieurs façons de le faire (dont la manière automatique au démarrage), mais, pour le moment, nous nous contenterons de faire simplement:
# /usr/sbin/named -u nobody -g nogroup
Pour quelque raison, vous pouvez vouloir le lancer sous un autre utilisateur, sachez tout de même que no* va très bien. Ensuite, nous allons faire pointer strider vers lui-même pour qu'il effectue les recherches. Deux étapes sont nécessaires: en premier, il faut décider l'ordre de recherche. Sur de petits réseaux comme le notre, il est très probable que chaque ordinateur possède sa propre liste des hôtes, l'ordre pourra donc être hôte puis DNS mais sur de grands réseaux, il est plus pratique d'utiliser le DNS. Le fichier dans lequel est défini cet ordre est /etc/nsswitch.conf (voir Exemple 9-2). En voici la partie intéressante:
. . . passwd: files nisplus nis shadow: files nisplus nis group: files nisplus nis hosts: dns files . . .
La ligne qui nous concerne est celle commençant par " hosts" . " Files" indique au système d'utiliser le fichier /etc/hosts pour la traduction adresse-nom. L'entrée la plus à gauche (ici dns) indique la première méthode à utiliser.
Le second fichier à utiliser est /etc/resolv.conf, le fichier de recherche dns. Son format s'explique par lui-même mais voyons tout de même de quoi il a l'air:
nameserver 192.168.1.1 search diverge.org domain diverge.org
La première ligne indique l'adresse du serveur de noms (assez facile). La ligne suivante demande de chercher dans ce domaine mais si une recherche n'aboutit pas, elle sera poursuivie dans la zone racine (celle indiquée par "." dans le fichier named.conf). La dernière ligne est notre domaine.
En théorie, nous voici prêts. Pour rapidement vérifier si notre DNS fonctionne, effectuons une recherche sur un hôte local puis sur une machine hors de notre domaine comme:
# host www.blah.net
Voici ce que nous obtenons après avoir lancé la commande host www.yahoo.com:
www.yahoo.com is a nickname for www.yahoo.akadns.net www.yahoo.akadns.net has address 216.32.74.50 www.yahoo.akadns.net has address 216.32.74.51 www.yahoo.akadns.net has address 216.32.74.52 www.yahoo.akadns.net has address 216.32.74.53 www.yahoo.akadns.net has address 216.32.74.55
La procédure pour paramètrer les clients est la même. Modifiez les fichiers /etc/nsswitch.conf et /etc/resolv.conf.