Dans cet article, nous abordons le principe de fonctionnement du système de noms de domaines. Les exemples s'appuient sur la version 8 de BIND, l'implémentation de Berkeley.
Nous aborderons aussi l'installation d'un serveur de cache, la configuration des fichier etc ...
DNS : Principe et mise en oeuvre
Dans cet article, nous abordons le principe de fonctionnement du système de noms de domaines. Les exemples s'appuient sur la version 8
de BIND, l'implémentation de Berkeley.
Définition
Le DNS ou Domain Name System gère la traduction : noms de machines connectées à l'Internet adresses IP. Il établit par exemple
l'association www.linuxmag-france.org 212.198.253.142, facilitant la navigation sur le site web de votre revue.
Bref historique
A l'origine, le NIC (Network Information Center) administrait une simple table de correspondance nommée HOSTS.TXT. Les administrateurs
réseaux communiquaient les modifications locales par courrier électronique et récupéraient régulièrement une copie à jour du fichier
par FTP. Cette méthode présentait deux inconvénients majeurs. D'une part, la charge imposée au serveur FTP et plus généralement
à l'ensemble du réseau augmentait exponentiellement avec le nombre de machines interconnectées. D'autre part, rien ne garantissait
la cohérence de données dupliquées en de multiples points du réseau.
Configuration standard
Si votre installation compte un nombre limité de postes, vous déclarez probablement leurs noms dans le fichier /etc/hosts.
Sur Robby, notre portable :
# Interface loopback
127.0.0.1 localhost
# Réseau local (privé)
192.168.0.1 bellerophon bellerophon.altair.net
192.168.0.2 robby robby.altair.net
...
Le portable appartient au réseau privé altair.net d'adresse 192.168.0.0. L'interface loopback d'adresse 127.0.0.1 simule une liaison
en boucle sur chaque hôte. Elle autorise le test et l'exploitation autonome des protocoles de classe IP. Les serveurs de noms
d'un fournisseur d'accès Internet relaient les demandes de traduction ne pouvant être résolues à partir des données du fichier hosts.
Leurs adresses sont déclarées dans le fichier /etc/resolv.conf :
# Serveurs de noms Wanadoo
nameserver 193.252.19.3
nameserver 193.252.19.4
Fonctionnement du DNS
Domaines
Les domaines sont des regroupements logiques de machines. Ils composent un arbre.
Fraction de l'espace des domaines
Sous la racine notée ".", nous trouvons les domaines de premier niveau (Top Level Domains) étiquetés com, edu, gov, int, mil, net
et des codes d'états ou de pays normalisés sur 2 lettres. Des sous-domaines sont ensuite rattachés aux feuilles de l'arbre.
Deux noeuds issus d'un même père ne peuvent porter la même étiquette. Le nom complet d'un domaine (Fully Qualified Domain Name)
est la concaténation des étiquettes rencontrées sur le plus court chemin menant du noeud considéré à la racine. Par exemple,
linuxmag-france.org est un domaine dérivant de org. Finalement, les machines sont nomées relativement au domaine auxquelles
elles appartiennent. Ainsi, www.linuxmag-france.org désigne le serveur hébergeant le site web du magazine.
Zones
Un domaine X englobe l'arbre dont la racine porte cette étiquette. Un domaine X peut être découpé en zones.
Découpage d'un domaine en zones
Chaque zone constitue un espace connexe.
Un système réparti
Les serveurs de noms forment une base de données distribuée. Ils disposent d'enregistrements de ressources (Ressource Records) précisant
les correspondances noms adresses des machines rattachées aux zones qu'ils servent et d'autres pointant vers les zones
qu'ils n'administrent pas directement.
Recherche de noms
Dans le pire des cas, une requête de recherche de nom (name lookup) est adressée à un serveur situé à la racine puis propagée en cascade
vers un serveur de premier niveau, de deuxième niveau ... jusqu'à atteindre un serveur stockant dans ses tables la ou les correspondances
recherchées. Ce principe de délégation règle les problèmes exposés en début d'article. La charge est répartie sur de multiples serveurs.
Chaque serveur a autorité sur un nombre limité d'informations, ce qui en améliore la cohérence.
Recherche inverse
La recherche inverse (reverse lookup) remonte d'une adresse IP au ou aux noms de la machine associée. Cette procédure est utile
pour restreindre l'accès à des services Internet. Par exemple, certains sites FTP interdisent le chargement du logiciel
de cryptographie PGP depuis des domaines rattachés à des pays interdisant l'importation de ce type de technologie. La recherche inverse
reprend les mécanismes employés lors de recherches directes. On adjoint à une adresse a.b.c.d un suffixe in-addr.arpa sous cette forme :
d.c.b.a.in-addr.arpa. Par exemple, 212.198.253.142 devient 142.253.198.212.in-addr.arpa. On procède ensuite à une résolution classique.
Modes itératif, récursif
Il existe deux modes d'interrogation des serveurs. En mode récursif, le serveur interrogé prend en charge les appels (récursifs
ou itératifs) à d'autres serveurs nécessaires pour résoudre la recherche. En mode itératif, il fournit l'information la plus détaillée
dont il dispose, le programme client prenant en charge l'appel à d'autres serveurs. Un serveur de noms peut refuser d'honorer les requêtes
récursives. C'est le cas des serveurs de premier niveau très sollicités.
Cache
Les enregistrements consultés sont stockés dans un cache volatile afin d'améliorer les temps de réponse. Les recherches en profondeur
depuis la racine sont généralement évitées.
Resolver
Resolver qualifie une collection de routines d'interrogation de la librairie C faisant l'interface entre programmes clients,
tables d'hôtes et serveurs de noms. Le fichier /etc/hosts.conf définit des règles d'arbitrage entre ces sources. Typiquement :
# Ordre des recherches
order hosts, bind
Dans ce cas, l'information est d'abord recherchée dans le fichier hosts puis en adressant des requêtes aux serveurs de noms de domaine.
Nous reviendrons un peu plus loin sur la signification de l'acronyme BIND.
Utilitaire NSLOOKUP
Nous supposerons que vous disposez d'un accès Internet convenablement configuré. Les exemples ont été testés sous Red Hat 6.0,
Mandrake 6.1 et Open Server 2.3.
Installation
L'utilitaire nslookup est un outil d'interrogation des serveurs de noms. Sous Red Hat, il est inclus dans le paquetage standard
bind-utils situé dans le répertoire RedHat/RPMS. Installez-le, en adaptant le nom en fonction de votre distribution. Dans notre cas :
su root
rpm -ivh bind-utils-8.2-6.i386.rpm
Un exemple d'interrogation
Nous allons rechercher l'adresse IP du serveur web du magazine. Nous obtenons d'un serveur de noms mis à disposition par un fournisseur
d'accès Internet la liste des serveurs à la racine puis cheminons de serveur en serveur jusqu'a obtention de la réponse :
nslookup
Default Server: ns3.wanadoo.fr
Address: 193.252.19.3
> set querytype=NS
...
> .
Non-authoritative answer:
(root) nameserver = A.ROOT-SERVERS.NET.
(root) nameserver = D.ROOT-SERVERS.NET.
...
Authoritative answers can be found from:
A.ROOT-SERVERS.NET internet address = 198.41.0.4
D.ROOT-SERVERS.NET internet address = 128.8.10.90
...
> server a.root-servers.net
Default server: A.ROOT-SERVERS.NET
Address: 198.41.0.4
> org
Server: A.ROOT-SERVERS.NET
Address: 198.41.0.4
org nameserver = A.ROOT-SERVERS.NET
org nameserver = A.ROOT-SERVERS.NET
...
> linuxmag-france.org
Server: A.ROOT-SERVERS.NET
Address: 198.41.0.4
Non-authoritative answer:
linuxmag-france.org nameserver = NS1.GRANITECANYON.COM
linuxmag-france.org nameserver = NS2.GRANITECANYON.COM
Authoritative answers can be found from:
NS1.GRANITECANYON.COM internet address = 205.166.226.38
NS2.GRANITECANYON.COM internet address = 216.17.165.20
> server ns1.granitecanyon.com
Default server: NS1.GRANITECANYON.COM
Address: 205.166.226.38
> set querytype=A
> www.linuxmag-france.org
Server: NS1.GRANITECANYON.COM
Address: 205.166.226.38
Name: www.linuxmag-france.org
Address: 212.198.253.142
Autorité
Les réponses se distinguent par leur source. Un serveur maître fait autorité sur les données d'un nombre limité de zones
(authoritative answers). Un serveur secondaire offre une copie de sécurité des données d'un serveur maître. Chaque serveur
cache des données obtenues d'autres serveurs (non authoritatives answers).
Installer un serveur de noms cache
Dans cette deuxième section, nous présentons l'installation d'un serveur de noms simple faisant cache mais ne gérant pas de domaine
spécifique.
Installation du paquetage BIND
Nous utiliserons une version 8.x du paquetage BIND (Berkeley Internet Name Daemon), lui-même disponible sous la forme d'un paquetage
standard :
rpm -ivh bind-8.2-6.i386.rpm
Notez que la syntaxe des fichiers de configuration diffère de celle des versions 4.x. Les utilisateurs maîtrisant BIND
et souhaitant juste faire une mise à niveau peuvent utiliser le filtre named-boot-conf.pl inclus dans le paquetage.
Le script d'installation a ajouté une entrée dans l'arborescence /etc/rc.d (Red Hat) de sorte que le démon named soit invoqué
à chaque démarrage.
Fichier named.conf
Le fichier /etc/named.conf indique la localisation des fichiers associés aux zones sur lesquelles nous fournissons de l'information.
Dans notre cas :
/* Localisation des fichiers de zones */
options {
directory "/var/named";
};
/* Zone cache */
zone "." in {
type hint;
file "cache";
};
/* Zone inverse localhost */
zone "0.0.127.in-addr.arpa" in {
type master;
file "127.0.0";
};
Créez si nécessaire le répertoire /var/named. Détaillons la configuration. Comme vous le constatez, les informations sont présentées
à la C.
Options
Les chemins des autres fichiers de configuration sont définis relativement au répertoire /var/named.
Zone "."
La zone "." correspond à la racine de l'espace des domaines. Le fichier cache contiendra une liste initiale de serveurs ayant autorité
sur les domaines de premier niveau (edu, com ...). La liste exacte sera obtenue d'un des serveurs valides lors du lancement du démon.
Un domaine noté x. est pleinement qualifié. Dans un contexte définissant un domaine par défaut y, x qualifie le domaine x.y.
Zone 0.0.127.in-addr.arpa
La zone 0.0.127.in-addr.arpa associe nom de la machine locale et adresse de l'interface loopback. L'information est ici stockée
dans le fichier 127.0.0.
Fichier cache
L'utilitaire BIND dig va nous permettre de récupérer une copie à jour de ce fichier d'initialisation du cache :
su root
dig @rs.internic.net . ns > /var/named/cache
Nous obtenons :
;; ANSWER SECTION:
. 5d18h2m25s IN NS G.ROOT-SERVERS.NET.
. 5d18h2m25s IN NS F.ROOT-SERVERS.NET.
...
;; ADDITIONAL SECTION:
G.ROOT-SERVERS.NET. 5w6d16h IN A 192.112.36.4
F.ROOT-SERVERS.NET. 5w6d16h IN A 192.5.5.241
...
Le DNS compte actuellement 13 serveurs à la racine. Vous devrez en charger une copie à jour régulièrement. Cependant, tout fonctionnera
correctement avec un fichier relativement ancien. En effet, lors de l'initialisation, une copie à jour est obtenue dynamiquement
d'un des serveurs de premier niveau valides. Le mot-clef "hint" identifie cet enregistrement spécial.
Fichier 127.0.0
Créez un fichier /var/named/127.0.0 de ce type :
; Infos recherche inverse machine locale
0.0.127.in-addr.arpa. IN SOA localhost. root@localhost. (
1; Numéro de série
3600; Rafraîchissement (1h)
600; Nouvelle tentative (10 mn)
604800; Expiration (7j)
86400 ); Durée de vie (1j)
IN NS localhost.
1 IN PTR localhost.
Ressources
IN identifie les enregistrements de type Internet. SOA est l'acronyme de Start Of Authority. Ici, nous précisons que la machine locale
dispose des informations les plus fiables sur le domaine 0.0.127.in-addr.arpa. root@localhost est l'adresse de courrier électronique
du responsable technique à contacter en cas de dysfonctionnement. Les durées en secondes servent à la synchronisation des serveurs
esclaves et à définir la durée de vie (Time To Live) des données dans le cache des clients. Une valeur faible favorise une propagation
rapide des modifications, ce au prix d'une charge système importante. A l'inverse, une valeur élevée implique une propagation plus lente.
Pratiquement, copiez les valeurs indiquées et tout se déroulera correctement. NS indique les serveurs de noms de cette zone
et l'enregistrement PTR, la correspondance machine 1 du réseau 127.0.0 localhost.
Notez bien qu'ici la notation comporte un "." terminal.
Tests
Rebootez la machine pour initialiser le service :
shutdown -r now
Ou lancez le directement :
ndc sta
new pid is 938
Le fichier /var/log/messages (Red Hat, localisation par défaut) donne le résultat de l'opération :
...
named[937]: starting. named 8.2 Tue May 11 03:26:21 GMT 1999
Jan 27 12:33:51 robby named[937]: cache zone "" (IN) loaded (serial 0)
Jan 27 12:33:51 robby named[937]: master zone "0.0.127.in-addr.arpa" (IN) loaded (serial 1)
Jan 27 12:33:51 robby named[937]: listening on [127.0.0.1].53 (lo)
Jan 27 12:33:51 robby named[937]: Forwarding source address is [0.0.0.0].1025
Jan 27 12:33:51 robby named[937]: Ready to answer queries.
Le fichier de trace confirme que le démon a chargé correctement les deux zones et écoute les requêtes sur le port 53.
Lançons l'utilitaire nslookup pour tester les tables :
nslookup - localhost
Default Server: localhost
Adress: 127.0.0.1
> set type=ANY
> 0.0.127.in-addr.arpa.
1.0.0.127.in-addr.arpa name = localhost
...
Modification du resolv.conf
Sauvegardez le fichier resolv.conf original :
mv /etc/resolv.conf /etc/resolv.conf.sav
resolv.conf devient sur une machine isolée :
# NS local
search wanadoo.fr
nameserver 127.0.0.1
Ici, la recherche se fera par défaut sur le domaine wanadoo.fr.
Cas d'une liaison point à point
Dans le cas d'une liaison intermittente de type dialup, la configuration est un peu plus complexe. Le serveur est lancé à l'initialisation,
ce qui n'est à priori pas un problème. Cependant, hors connexion, les résolutions impliquant des appels à des serveurs extérieurs
ne peuvent aboutir, entraînant des temps de dépassement importants. Une solution adaptée du Howto consiste à travailler avec une liste
de serveurs racine vide hors connexion. Copiez le fichier named.conf :
cp /etc/named.conf /etc/named.conf.up
Modifiez l'original en supprimant la section ".". Reste à automatiser la permutation des deux configuration. Lorsqu'une liaison ppp
est établie, le script /etc/ppp/ip-up.local est exécuté s'il existe. Créez-le sur ce modèle :
#!/bin/bash
# Relancer named en mode connecté
killall -9 named
named -c /etc/named.conf.up
Sur un principe identique, créez un fichier /etc/ppp/ip-down.local :
#!/bin/bash
# Relancer named en mode connecté
killall -9 named
named
Vérifiez les droits d'exécution de ces deux fichiers. Laissez de préférence votre machine en marche en permanence. les données du cache
sont en effet perdues à chaque extinction.
Gérer un petit domaine
Architecture
Nous allons enrichir notre exemple précédent en gérant le petit domaine privé de classe C altair.net. Les machines suivantes
sont disponibles :
Nom Adresse Fonction
Bellerophon 192.168.0.1 Serveur DNS, courrier
Robby 192.168.0.2 Portable
Krell 192.168.0.3 Serveur FTP
...
Notre domaine n'est pas rattaché à l'espace général des noms de domaines. Dans le cas contraire, nous aurions du le déplacer
et obtenir son rattachement à un domaine de niveau supérieur. Nous introduisons deux zones supplémentaires :
zone "altair.net" in {
type master;
file "altair.net";
};
zone "0.168.192.in-addr.arpa" in {
type master;
file "192.168.0";
};
Zone altair.net
Cette zone décrit les correspondances noms --> adresses :
altair.net. IN SOA bellerophon.altair.net.
root.altair.net. (
1; Numéro de série
3600; Rafraîchissement (1h)
600; Nouvelle tentative (10 mn)
604800; Expiration (7j)
86400 ); Durée de vie (1j)
IN NS bellerophon.altair.net.
bellerophon IN A 192.168.0.1
robby IN A 192.168.0.2
krell IN A 192.168.0.3
localhost IN A 127.0.0.1
La ressource A précise une adresse.
Zone 0.168.192.in-addr.arpa
Cette zone décrit les correspondances adresses --> noms :
0.168.192.in-addr.arpa. IN SOA bellerophon.altair.net.
root.altair.net.
1 ; Numéro de série
3600 ; Rafraîchissement (1h)
600 ; Nouvelle tentative (10 mn)
604800 ; Expiration (7j)
86400 ) ; Durée de vie (1j)
IN NS bellerophon.altair.net.
1 IN PTR bellerophon.altair.net.
2 IN PTR robby.altair.net.
3 IN PTR krell.altair.net.
Ajout d'alias
Les alias facilitent l'affectation de plusieurs noms à une même machine. Supposons que bellerophon héberge un serveur de courrier,
krell des serveurs FTP et de nouvelles. Nous pourrions définir les alias suivants dans la zone altair.net :
; Alias
mail CNAME bellerophon
ftp CNAME krell
news CNAME krell
Lors d'une résolution portant sur un alias, le terme droit est substitué au terme gauche et une nouvelle résolution relancée.
Passerelle de courrier
Les informations du DNS ne se limitent pas à la traduction. La ressource MX (Mail eXchange) indique le nom et la priorité
du serveur de courrier d'une zone. Supposons que bellerophon soit notre passerelle :
Passerelle courrier
altair.net. IN MX 10 bellerophon
Ainsi, les courriers de type sx@altair.net seront relayés correctement.
Activation du serveur de noms
L'entrée nameserver du fichier /etc/resolv.conf devient :
nameserver 192.168.0.1
Approfondir
Le DNS est en constante évolution. Voici une liste de lectures en ligne intéressantes :
DNS Howto
BIND FAQs
RFC 819, 920,
974, 1032,
1033, 1034,
1035, 1591
|