Les serveurs de noms (DNS, Domain Name Serveur) ont deux buts principaux :
Les serveurs de noms sont reliés entre eux, et l'ensemble fonctionne selon un principe de délégation de sous-zones.
Exemple : pour trouver l'adresse IP de pc43.mondomaine.fr
,
fr
fr
donne
l'adresse du serveur qui s'occupe de mondomaine.fr
pc43.mondomaine.fr
En réalité, c'est un petit peu plus compliqué que cela :
On suppose qu'on a configuré un serveur de noms pour le domaine
stage
. L'adresse de ce serveur est 10.1.1.2
.
Dans /etc/resolv.conf
, on met par exemple :
search stage
nameserver 10.1.1.2
la directive ``search
'' indique des suffixes par défaut
ici pc110
sera synonyme de pc110.stage
,
Le logiciel named (Name Daemon) et/ou bind
(Berkeley Internet Name Daemon ?). Il est lancé par la commande
named
, et le fichier de configuration principal est
dans /etc/bind/named.conf
/etc/bind/named.conf
Ce fichier les zones gérées par le serveur, celles dont il est serveur secondaire, les serveurs racine, etc. Extrait :
options {
directory "/var/cache/bind";
};
// Les serveurs racine :
zone "." {
type hint;
file "/etc/bind/db.root";
};
// la zone localhost
zone "localhost" {
type master;
file "/etc/bind/db.local";
};
// pour les adresses 127.*.*.* et 0.*.*.*
zone "127.in-addr.arpa" {
type master;
file "/etc/bind/db.127";
};
zone "0.in-addr.arpa" {
type master;
file "/etc/bind/db.0";
};
zone "255.in-addr.arpa" {
type master;
file "/etc/bind/db.255";
};
// la zone stage, et les adresses 10.1.1.*
zone "stage" {
type master;
file "/etc/bind/db.stage";
};
zone "1.1.10.in-addr.arpa" {
type master;
file "/etc/bind/db.10.1.1";
};
/etc/bind/db.stage
;
; Fichier de données BIND pour zone stage
;
$TTL 604800
@ IN SOA dns.stage. root.dns.stage. (
10 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
IN NS dns.stage.
courrier IN A 10.1.1.3
IN MX 10 courrier.stage.
dns IN A 10.1.1.2
IN MX 10 courrier.stage.
pc101 IN A 10.1.1.101
IN MX 10 courrier.stage.
pc102 IN A 10.1.1.102
IN MX 10 courrier.stage.
L'entête contient diverses indications sur la durée de validité des informations, c'est à dire la durée de conservation dans les caches. C'est utile pour ne pas réinterroger trop fréquemment le même serveur. Le numéro de série est normalement changé chaque fois que le contenu est modifié : de cette façon on ne recharge pas le contenu d'une zone dont le numéro de saisie n'a pas bougé.
Les lignes ``IN A
'' (Internet Address) indiquent l'adresse
qui correspond à un nom, ``IN MX
'' (Internet Mail eXchanger)
donnent le nom du serveur de courrier associé.
On peut également introduire des surnoms, exemple:
mail IN CNAME courrier.stage.
Littéralement, cette déclaration fournit le vrai nom (canonical name)
correspondant à un surnom.
/etc/bind/db.10.1.1
Avant tout, explication des requêtes inverses : ce sont les interrogations du type: ``Quel est le nom de la machine numéro 11.122.33.44 ?''.
Pour une requête de ce type, l'adresse 11.22.33.44
est
d'abord retournée pour la tranformer en 44.33.22.11.in-addr.arpa
.
Le traitement se fait ensuite par délégation ; on cherche le serveur
qui s'occupe des numéros IP de la forme 11.*.*.*
(c'est-à-dire la
sous-zone 11.in-addr.arpa
), puis celui qui gère 11.22.*.*
22.11.in-addr.arpa
, etc.
Mais revenons à notre zone 10.1.1.*
. Le fichier de
cette zone contient :
;
; BIND reverse data file for 10.1.1
;
$TTL 604800
@ IN SOA dns.stage. root.dns.stage. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
IN NS dns.stage.
2 IN PTR dns.stage.
101 IN PTR pc101.stage.
102 IN PTR pc102.stage.
Voir par exemple le ``DNS-Howto'' pour plus d'explications.