Chapitre 10. Le système de Noms de Domaine (DNS)

Table des matières
10.1. Notes et pré-requis
10.2. Qu'est-ce qu'un DNS ?
10.3. Les fichiers du DNS
10.4. Utilisation du DNS

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/.

10.1. Notes et pré-requis

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.

10.2. Qu'est-ce qu'un DNS ?

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".

10.3. Les fichiers du DNS

Pour mettre en place notre DNS, nous continerons à utiliser les exemples ci-dessus. Avant de continuer, assurons-nous que:

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.

10.3.1. /etc/named.conf

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:

10.3.1.1. options

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:

allow-transfer

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.

allow-query

quels réseaux peuvent envoyer des demandes à ce serveur de noms.

listen-on port

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:

10.3.1.2. La zone "diverge.org"

type

dans tous les cas, hormis ".", le types est " master" .

notify

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.

file

le nom du fichier, dans le répertoire de named, où les renseignements sur cette zone peuvent être trouvés.

10.3.2. /etc/named/zone.localhost

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:

Ligne 1

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.).

Ligne 2

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.

Ligne 3

Le taux de raffraichissement du serveur. Ici, les informations sont remises à jour toutes les huit heures.

Ligne 4

A quel intervelle de temps faut-il ré-essayer.

Ligne 5

Expiration de la recherche.

Ligne 6

La durée de vie minimum (TTL: Time To Live).

Ligne 7

Une ligne blanche pour la lisibilité (un séparateur de sections, si vous voulez).

Ligne 8

La ligne du serveur de noms. Comme nous pouvons le voir, il s'agit de strider.

Ligne 9

Une ligne blanche de séparation.

Ligne 10

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.

10.3.3. /etc/named/zone.127.0.0

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.

10.3.4. /etc/named/diverge.org

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:

Ligne 9 et 10

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.

Ligne 13

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.

10.3.5. /etc/named/zone.192.168.1

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.      

10.3.6. /etc/named/zone.root

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.

10.4. Utilisation du DNS

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.