Serveur DNS
Fonctions serveur : DNS
Vous savez, en ayant lu le cours sur TCP/IP, que le nom des machines ou des sites que nous adressons est transformé en numéro de machines par l'intermédiaire de table, nommé table D. N. S..
Il existe sur Internet des « Master DNS » qui contiennent les plans d'adressage majeurs des numéros des machines de l'Internet, mais chaque machine d'un fournisseur d'accès peut (ou doit) disposer d'une table D. N. S., réplication partielle de l'une des tables principales, qui contient en tous cas une correspondance entre les noms qu'il doit adresser et les numéros des machines correspondantes de son propre réseau.
Une machine Linux peut ainsi être configurée en serveur D. N. S..
Red Hat Linux contient quatre paquetages RPM liée à D. N. S. :
Bind, le démon named,
Bind-utils, les utilitaires associées
Bind-devel, les fichiers d'en-tête pour le développement d'applications D. N. S.
Caching nameserver, le fichier de configuration pour un serveur de nom qui fait uniquement au fils de cache.
L'installation d'un serveur de nom faisant office de cache fournit la configuration de serveur de noms la plus basique. Pour cette configuration, named met en cache une liste de serveur de noms racines. Lorsqu'il faut résoudre un nom de machine ou une adresse IP, named consulte un de ses serveurs de noms racines pour déterminer quels sont les serveurs qui font autorité pour le domaine, puis il interroge l'un d'entre eux pour obtenir l'association nom de machines -- numéros de machines, qui est alors mis en cache.
Named peut servir de serveur de noms maître, ce qui signifie qu'il a au moins un fichier de définition de zone normale ou inversée (on peut avoir plusieurs zones, bien sûr), named peut également servir de serveur de noms esclave, ce qui signifie qu'il peut fournir des réponses pour une zone, mais qu'il n'est pas serveur de noms maître (« start of authority »). Dans un cadre opérationnel, cela signifie que l'esclave doit charger son cache par un transfert de zone (un transfert par réseau des ressources du maître d’un domaine donné). C’est le serveur maître qui déterminera la liste des correspondances, et le serveur esclave n’en sera qu’une copie.
Si un serveur de noms maître possède des esclaves dans un domaine, il est essentiel que le « numéro de série du fichier de zone du domaine » soit augmenté chaque fois qu'une modification est apportée. En effet, les serveurs de noms esclaves font une mise à jour périodique (une vérification pour voir si le numéro de série a changé) et demandent un transfert s’il est différent du numéro de série de la base de données qu'ils ont en cache.
Chaque fois donc qu’une mise à jour de la table est faite sur le serveur maître, on incrémente cette référence qu’est le numéro de série de un, ce qui permettra aux esclaves de savoir qu’il faut mettre leur liste à jour.
En cas d'échec du transfert vers l’esclave, la mise à jour et renouvelée un peu plus tard. Si aucune réponse du serveur maître n’est reçue avant la fin d’un temps défini qu’on appelle la période d'expiration, l'esclave vide son cache, car il décidera qu’il ne contient plus de données valides.
Named est normalement lancé au démarrage du script d'initialisation /etc/rc.d/init.d/named.
Le fichier de configuration correspondant est appelé évidemment /etc/named.conf. Les fichiers de zone, qui fournissent des informations chargées par le démon lors de son démarrage (dans son cache), sont stockés dans /var/named.
Named peut fonctionner dans un environnement chrooté. Cela permet évidemment d'améliorer la sécurité, et peut-être fait en déplaçant named.conf, et en ajoutant « -t dir » à la commande démarrage dans /etc/rc.d/init.d/named.
Le fichier named.conf est composé de directives, et de blocs de code publiés en liaison avec ces directives.
Les blocs de code sont entre accolades, et se terminent par un point virgule. Les déclarations et définitions de variables à l’ intérieur des blocs doivent aussi se terminer par un point-virgule.
Parcourons ce fichier :
la directive controls contrôle les possibilités de connexion.
Les directives channel définissent le canal au travers duquel les informations de connexion peuvent être envoyées, comme un fichier ou la fonction syslog du système.
Les directives category définissent différentes sortes de messages qui peuvent être envoyés à un canal de connexion, comme les statistiques, les requêtes, la sécurité et ainsi de suite. La combinaison de directive channel et category permettent une configuration flexible et puissante.
Les directives options offrent des réglages de connexion globaux. Les entrées du bloc options comprennent directory, qui définit l'emplacement par défaut du fichier spécifié ailleurs dans named.
D'autres options contrôlent quelles sont les machines et réseaux autorisés à faire des requêtes, des transferts de zone est des mises à jour (allow queries, transfer, updates).
La directive forwarders définit les autres serveurs de noms auxquels on peut envoyer des requêtes.
La directive zone définit un domaine D. N. S. (une zone) pour laquelle le serveur de noms fournit des informations. La directive zone spécifie au minimum le nom de la zone et le niveau d'autorité des informations en utilisant la directive type.
Le type peut-être master, slave ou hint. Les zones mater et hint contiennent aussi une directive file qui spécifie le fichier des ressources pour définir la zone.
Pour un maître, il s'agit d'un fichier qui contient des ressources pour la zone.
Pour une zone hint, le fichier est une liste de ressources d'un serveur de noms racines que named doit mettre en cache et consulter lorsqu'il a besoin de définir un nom pour lequel il ne fait pas autorité.
Les définitions de zone esclaves doivent utiliser une directive masters pour identifier l'adresse IP des serveurs de noms depuis lesquelles on peut demander un transfert de zone. Une zone esclave peut aussi contenir une directive file, mais elle définit dans ce cas un fichier que named crée après avoir fait un transfert de zone depuis un maître.
En plus de ces directives, beaucoup d'autre directives utilisables dans la section des options globales le sont aussi à l'intérieur d'une directive zone.
Les fichiers de zone sont les bases de données utilisées par named pour définir les domaines. Ils sont composés de ressources et de valeurs assignées à des variables (une ressource est donc une adresse IP, un routeur de courrier, un serveur de noms, etc.)
Bien sûr, la façon dont ces données sont représentées dans le fichier de configuration est codifié, et demande de s'accoutumer au code employé. Une fois la difficulté d'adaptation au code dépassée, la configuration est transparente.
La première ressource est normalement un enregistrement SOA (Start Of Authority). Le caractère @ garde la valeur de la dernière zone à laquelle on a fait référence (généralement, c'est la zone définie en principal dans named.conf). Les entrées entre parenthèses peuvent être serial, refresh, retry, expire, et la durée de vie pour les réponses négatives.
Par exemple :
@ IN SOA mydomain.com root.ns mydomain.com (19912410 42300 3600 3600000 86400).
Une référence à un serveur de noms classiques pourrait être :
@ IN NS 192.168.0.254.
Il faut définir les routeurs de courrier par ordre de priorité (MX) dans le domaine, plus le nombre relatif à l'ordre de préférence étant bas, plus la préférence étant élevée.
Par exemple :
@ IN MX 10 mail.mydomain.com
L'adresse IP à laquelle un on fait référence est identifiée par un enregistrement A au format suivant :
mybox.mydomain.com IN A 192.168.0.17
Le nom associé à une adresse IP donnée (la résolution inversée) est identifié par un enregistrement pointeur (PTR). Par exemple :
17.0.168.192.inaddr.arpa. IN PTR mybox.mydomain.com.
Parfois, on a besoin d'un alias (appelé en bon français un nom canonique) pour un nom symbolique. On le donne à l'aide de la ressource CNAME :
www.mydomain.com IN CNAME mydomain.com
L’objectif est d’installer sur chaque machine un serveur de noms basique, et de vérifier son bon fonctionnement.
Vérifiez que vous avez bien tous les fichiers requis, cités au début du cours.
Activez le serveur DNS.
Récupérez le fichier de configuration d’exemple de la documentation (saurez-vous le trouver dans votre arborescence ?), et installez-le dans /etc en le renommant named.conf.
Le
fichier /etc/resolv.conf contient une référence au
serveur DNS qu’utilisera votre machine en cas de besoin. Modifiez
ce fichier de façon à ce que la référence
utilisée soit votre propre serveur DNS :
Nameserver
192.168.x.x (votre adresse IP)
Search domainXX.example.com (XX étant par exemple le dernier octet de votre adresse).
Testez
votre serveur :
Nslookup votremachine.domainXX.example.com.
Si
tout va bien, vous recevez votre adresse. SI tout va mal, regardez le
fichier /var/log/messages, qui contient notamment toutes les
informations transmises par le serveur DNS, y compris les erreurs !
Utilisez
nslookup pour lancer des requètes sur les domaines mis en
place par vos voisins. Essayez aussi quelques noms de l’internet…
Dans le fichier /etc/mail.local-host-names, ajoutez votre machine.domainXX.example.com, et demandez à un voisin d’envoyer un message à toto@domainXX.example.com. Cela fonctionne-t-il ?
-