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.



DNS sous Linux


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



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.



Configuration de bind


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 :









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




TP : installation d’un serveur DNS sous Red Hat Linux 7.3




L’objectif est d’installer sur chaque machine un serveur de noms basique, et de vérifier son bon fonctionnement.


  1. Vérifiez que vous avez bien tous les fichiers requis, cités au début du cours.


  1. Activez le serveur DNS.


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


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


  1. 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 !

  1. Utilisez nslookup pour lancer des requètes sur les domaines mis en place par vos voisins. Essayez aussi quelques noms de l’internet…

  2. 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 ?



- 5 / 5 -