Le service de résolution de noms d' hôtes DNS (Domain Name Services), permet d' adresser un hôte par un nom, plutôt que par une adresse IP. Quelle est la structure d' un nom d' hôte ?
www.google.fr machine.domaine
Le nom de domaine identifie une organisation dans l' internet, comme, par exemple, yahoo.com, wanadoo.fr, eu.org. Chaque organisation dispose d' un ou plusieurs réseaux. Ces réseaux sont composés de noeuds, ces noeuds (postes, serveurs, routeurs, imprimantes) pouvant être adressés.
Par exemple, la commande "ping www.yahoo.fr", permet d' adresser la machine qui porte le nom d' hôte"www", dans le domaine (organisation) "yahoo.fr".
Quelle différence entre la résolution de noms d' hôtes avec un serveur DNS et les fichiers "hosts" ? Avec les fichiers "hosts", chaque machine dispose de sa propre base de données de noms. Sur des réseaux importants, cette base de données dupliquée n' est pas simple à maintenir.
Avec un service de résolution de nom, la base de données est localisée sur un serveur. Un client qui désire adresser un hôte regarde dans son cache local, s' il en connaît l' adresse. S' il ne la connaît pas il va interroger le serveur de nom. Tous les grands réseaux sous TCP/IP, et Internet fonctionnent (schématiquement) sur ce principe.
Avec un serveur DNS, un administrateur n' plus qu 'une seule base de données à maintenir. Il suffit qu' il indique sur chaque hôte, quelle est l' adresse de ce serveur. Ici il y a 2 cas de figures possibles :
Normalement un service DNS nécessite au minimum deux serveurs afin d' assurer un minimum de redondance. Les bases de données des services sont synchronisées. La configuration d' un serveur de nom secondaire sera expliquée. Nous verrons également en TP le fonctionnement de la réplication des bases de données bases d' enregistrements de ressources.
Un "domaine" est un sous-arbre de l' espace de nommage. Par exemple ".com" est un domaine, il contient toute la partie hiérarchique inférieure de l' arbre sous jacente au noeud ".com".
Un domaine peut être organisé en sous domaines. ".google.com" est un sous domaine du domaine ".com". Un domaine peut être assimilé à une partie ou sous-partie de l' organisation de l' espace de nommage.
Une "zone" est une organisation logique des domaines. Le rôle d' une zone est principalement de simplifier l' administration des domaines. Le domaine ".com" peut être découpé en plusieurs zones, z1.com, z2.com...zn.com. L' administration des zones sera déléguée afin de simplifier la gestion globale du domaine.
La délégation consiste à déléguer l' administration d' une zone (ou une sous-zone) aux administrateurs de cette zone.
Attention à ces quelques remarques :
Le principe de la résolution de nom, consiste à affecter un nom d' hôte une adresse IP. On parle de résolution de nom directe. Le processus inverse doit pouvoir également être mis en oeuvre. On parle de résolution de nom inverse ou reverse. Le processus doit fournir, pour une adresse ip, le nom correspondant. Pour cela il y a une zone particulière, in-addr.arpa, qui permet la résolution inverse d' adresse IP.
Par exemple, pour le réseau 192.168.1.0, on créera une zone inverse dans le domaine in-addr.arpa. La zone de recherche inverse dans le domaine deviendra : 1.168.192.in-addr.arpa. Cette zone devra répondre pour toutes les adresses déclarées dans la tranche 192.168.1.0 à 192.168.1.254.
On inscrira dans cette zone tous les noeuds du réseau pour lesquels on désire que la résolution inverse fonctionne. Un serveur de nom peut, pratiquement, fonctionner sans la définition de cette zone tant que le réseau n' est pas relié à l' internet. Si cela était le cas, il faudrait déclarer cette zone, sans quoi, des services comme la messagerie électronique, ne pourrait fonctionner correctement, notamment à causes des règles anti-spam. (Voir www.nic.fr)
Sur linux nous allons utiliser deux types de fichiers :
Les enregistrements ont une structure et un rôle.
Les types d'enregistrements qui enrichissent une base de données DNS sont de plusieurs types, dont voici les principaux:
Ces enregistrements caractérisent des informations de type IN - INternet. Voir l' annexe pour avoir un fichier exemple.
Structure d' un enregistrement SOA : Chaque fichier commence par un enregistrement de type SOA.
stage.org. IN SOA ns1.stage.org. hostmaster.stage.org. 20001210011 ; numéro de série 10800 ; rafraîchissement 3600 ; nouvel essai 604800 ; Obsolète après une semaine 86400 ) ; TTL minimal de 1 jour
Enregistrement de type NS pour le domaine stage.org:
stage.org. IN NS ns1.stage.org. stage.org. IN NS ns2.stage.org.
Enregistrements de type A : Nous devons décrire la correspondance Nom / Adresse
ns1.stage.org. IN A 192.168.1.1 ns2.stage.org. IN A 192.168.1.2 localhost.stage.org. IN A 127.0.0.1
S' il y avait d' autres hôtes sur la zone, il faudrait les définir ici.
Enregistrements de type CNAME : Ce sont les alias (Canonical Name). Une requête du type http://www.stage.org sera adressée à ns1.stage.org, puisque www est un alias de ns1.
ns1.stage.org. IN CNAME www.stage.org. ns2.stage.org. IN CNAME ftp.stage.org.
Enregistrement de type PTR : Il serviront à la résolution de nom inverse.
1.1.168.192.in-addr.arpa. IN PTR ns1.stage.org. 2.1.168.192.in-addr.arpa. IN PTR ns2.stage.org.
La délégation consiste à donner l' administration d' une partie du domaine à une autre organisation. Il y a transfert de responsabilité pour l' administration d' une zone. Les serveurs de la zone auront autorité sur la zone et auront en charge la responsabilité de la résolution de nom sur la zone. Les serveurs ayant autorité sur le domaine auront des pointeurs vers les serveurs de noms ayant autorité sur chaque zone du domaine.
Le serveur maître (primaire) dispose d' un fichier d' information sur la zone. Le ou les serveurs esclaves (secondaires) obtiennent les informations à partir d' un serveur primaire ou d' un autre serveur esclave. Il y a transfert de zone. Les serveurs maîtres et esclaves ont autorité sur la zone.
L' organisation d' internet est assez hiérarchique. Chaque domaine dispose de son propre serveur de nom. Chaque zone de niveau supérieur (edu, org, fr...) dispose également de serveurs de nom de niveau supérieur. Le service DNS installe une liste de serveurs de noms de niveaux supérieurs. Cette liste permet à votre serveur de résoudre les noms qui sont extérieurs à votre zone. Le serveur enrichit son cache avec tous les noms résolus. Si votre réseau réseau n' est pas relié à internet, vous n' avez pas besoin d' activer cette liste.
Ce fichier est un peu particulier. Il est utilisé par le serveur de nom à l' initialisation de sa mémoire cache. Si vos serveurs sont raccordés à internet, vous pourrez utiliser une liste officielle des serveurs de la racine (ftp.rs.internic.net).
Pour mettre en place le service de résolution de nom sur un serveur Linux, on va procéder successivement aux opérations suivantes :
La résolution de nom est réalisée par les produits du package bind. La version actuelle est le package bind-9.x. qui remplace les versions antérieures 4.x. Dans cette version, de nombreuses modifications ont été apportées surtout au niveau de la sécurité, mais également en ce qui concerne le service DNS dynamique, c'est à dire acceptant les inscriptions des clients DHCP. La compatibilité ascendante est respectée. Nous resterons sur une configuration simple.
On va utiliser "bind 9". Il faudra donc installer les fichiers bind-9.x et bind-utils-9.x. Ce deuxième package donne quelques outils comme host, dig...
L' installation a copié les fichiers. Sur une configuration simple vous allez avoir 5 fichiers à créer ou à modifier sur le serveur primaire :
Le fichier racine pour la configuration du serveur de nom est le fichier "/etc/named.conf". Ce fichier est lu au démarrage du service et donne la liste des fichiers qui définissent la base de données pour la zone. La distribution donne un script perl qui permet de transcrire un fichier named.boot (bind version 4) au format named.conf (BIND version 9). Pour générer named.conf à partir de named.boot (si vous utilisiez une ancienne version de bind, par exemple), vous pouvez utiliser le script Perl named-bootconf qui est dans /usr/doc/bind-9
Voici un exemple de fichier commenté pour le domaine fictif stage.org, d'adresse 192.168.1.0.
# fichier named.conf pour le domaine stage.org # Indication du chemin où sont localisés les fichiers de la base de données options { directory "/var/named"; forwarders { # Indiquer un serveur dns de niveau supérieur 0.0.0.0; }; auth-nxdomain no; # RFC1035 }; # pour le fichier de cache du serveur de nom zone "." in { type hint; file "db.root"; }; # pour la recherche directe dans le domaine, on utilise le fichier stage.org zone "stage.org" in { type master; # nous sommes serveur primaire de ce domaine file "stage.hosts"; # les correspondances nom, adresse IP }; # pour la recherche de zone inverse (reverse) on utilise le fichier stage.rev zone "1.168.192.in-addr.arpa" in { type master; # serveur primaire de 1.168.192.in-addr.arpa file "stage.rev"; }; # pour la résolution de nom sur localhost zone "local" in { type master; # nous sommes serveur de 127.0.0.1 file "local.host"; # correspondances nom, adresse IP }; # rappel : la machine locale porte toujours l'adresse « localhost » 127.0.0.1 # résolution inverse sur cette zone # la description est dans local.host zone "0.0.127.in-addr.arpa" in { type master; # serveur primaire de 0.0.127.in-addr.arpa file "local.rev"; };
Notez bien que les noms appliqués aux fichiers de ressources ne sont en rien imposés. Il s' agit d' une pure convention. En effet un serveur de nom peut prendre en charge plusieurs domaines, cela permet de structurer l' organisation des fichiers de ressources.
Notez également l' option"type master". Il s' agit d' un serveur primaire. Nous verrons comment déclarer un serveur secondaire.
Le paramètre @, signifie qu' il s' agit du domaine "stage.org" (le nom tapé après le mot « zone » dans le fichier de configuration named.conf). Le paramètre "IN", signifie qu' il s' agit d' un enregistrement de type Internet. Notez la présence d' un point (.) après le nom des machines. Sans celui-ci, le nom serait « étendu ». Par exemple, ns1.stage.org (sans point) serait compris comme ns1.stage.org.stage.org (on rajoute le nom de domaine en l' absence du point terminal). Le point (.) terminal permet de signifier que le nom est pleinement qualifié.
NB : dans ces fichiers, les commentaires sont précédés
d' un point-virgule.
enregistrement de type SOA, on déclare tous les paramètres ainsi
que l' adresse du responsable administratif de la zone, ici : postmaster
$TTL 3h @ IN SOA ns1.stage.org. postmaster.stage.org. ( 16 ; 86400 ; 3600 ; 3600000 ; 604800 ;) ; enregistrement de type Name Server, on déclare le serveur de nom IN NS ns1.stage.org. ; on déclare les autres noeuds pour la résolution de nom ; Notez l' absence du point après les noms pour permettre ; l' extension du nom de domaine. ns1 IN A 192.168.1.1 ; client cli1 IN A 192.168.1.2 ; on déclare les alias CNAME : messagerie, news, www, ftp mail IN CNAME ns1 news IN CNAME ns1 www IN CNAME ns1 ftp IN CNAME ns1
Ici il s'agit de la résolution de nom inverse de la zone stage.org.
$TTL 3h @ IN SOA ns1.stage.org. postmaster.stage.org. ( 16 ; 86400 ; 3600 ; 3600000 ; 604800 ;) ; enregistrement de type Name Server IN NS ns1.stage.org. ; On déclare les noeuds dans le domaine 1.168.192.in-addr.arpa ; Ici, on ne peut pas se passer du nom complet (fini par un point). ; l' extension serait (exemple avec ns1) : 1.1.168.192.in-addr.arpa. 1 IN PTR ns1.stage.org. ; Client 2 IN PTR cli1.stage.org.
$TTL 3h @ IN SOA ns1.stage.org. postmaster.stage.org. ( 16 ; 86400 ; 3600 ; 3600000 ; 604800 ;) ; enregistrement de type Name Server IN NS ns1.stage.org. ; On déclare le noeud dans le domaine local localhost IN 127.0.0.1
$TTL 3h @ IN SOA ns1.stage.org. postmaster.stage.org. ( 16 ; 86400 ; 3600 ; 3600000 ; 604800 ;) ; enregistrement de type Name Server IN NS ns1.stage.org. ; On déclare les noeuds dans le domaine 0.0.127.in-addr.arpa ; Normalement, il n' en a qu' un : 127.0.0.1 = localhost. ; Noter le point terminal. 1 IN PTR localhost.
Démarrer ou arrêter le service le service
Le service (daemon) qui active la résolution de nom s' appelle"named",
prononcer "naime dé".
Si vous voulez l' arrêter ou le redémarrer dynamiquement vous
pouvez utiliser les commandes suivantes :
/etc/init.d/named stop
/etc/init.d/named start
Relancer le service serveur de cette façon peut parfois poser problème. En effet cette procédure régénère le cache du serveur. Le service prends également un nouveau "PID". Si vous voulez éviter cela, ce qui est généralement le cas, préférez la commande "kill -HUP 'PID de Named'". Vous trouverez le PID de named dans "/var/run".
Les fichiers de configuration sont créés. Il ne reste plus qu
'à tester. Il faut au préalable configurer le serveur pour qu'
il utilise lui même
le service DNS et redémarrer les services réseau. Relancez, ensuite
le service réseau. Utilisez les commandes suivantes :
/etc/init.d/network stop
/etc/init.d/network start
La description de la configuration de tous les clients possibles n' est pas détaillée. Vous trouverez ci-dessous des éléments pour un client windows 9x et pour un client Linux.
Configurer le client pour lui signifier quel est le serveur
de nom qu' il doit consulter. Pour cela il faut aller dans :
panneau de configuration - réseau - tcp/ip - Onglet "Configuration DNS".
Vous allez pouvoir définir le nom d' hôte de la machine locale dans
le réseau et
le nom de domaine auquel appartient l' hôte. Définissez ensuite
l' adresse IP du serveur de nom que vous voulez utiliser.
Vous pouvez utiliser linuxconf ou bien modifier (en tant que « root ») le fi chier de configuration du « resolver » (/etc/resolv.conf).
# Fichier /etc/resolv.conf search stage.org # Extension à rajouter à un nom d'hôte sans points nameserver 192.168.1.1 # Ip du DNS
Modification des fichiers named.conf et dhcpd.conf
# fichier named.conf pour le domaine stage.org # Indication du chemin où sont localisés les fichiers de la base de données options { directory "/var/named"; forwarders { # Indiquer un serveur dns de niveau supérieur 0.0.0.0; }; auth-nxdomain no; # conform to RFC1035 }; # pour le fichier de cache du serveur de nom zone "." in { type hint; file "db.root"; }; # pour la recherche directe dans le domaine, serveur primaire, on utilise le fichier stage.org zone "stage.org" in { type master; # nous sommes serveur primaire de ce domaine file "stage.hosts"; # zone stage.org allow-update { # Authorise la mise à jour depuis l'hôte local 127.0.0.1; }; }; # pour la recherche de zone inverse (reverse) on utilise le fichier stage.rev zone "1.168.192.in-addr.arpa" in { type master; # zone stage.org reverse file "stage.rev"; allow-update { # Authorise la mise à jour depuis l'hôte local 127.0.0.1; } }; # pour la résolution de nom sur localhost zone "local" in { type master; file "local.host"; }; zone "0.0.127.in-addr.arpa" in { type master; file "local.rev"; };
ddns-update-style interim; # Mode de mise à jour ddns-updates on; # Autorise les maj du dns ignore client-updates; # Refuse les maj client update-static-leases on; # Maj des enregistrements statiques ddns-domainname "dnc"; # Domaine default-lease-time 600; max-lease-time 7200; option domain-name-servers 192.168.1.10; option subnet-mask 255.255.255.0; option routers 192.168.1.1; log-facility local7; subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.200 192.168.1.210; allow unknown-clients; } zone stage. { primary 127.0.0.1; } zone 1.168.192.in-addr.arpa. { primary 127.0.0.1; }