next up previous contents
suivant: DNS et sécurité monter: Configurer un DNS pour précédent: Configurer un DNS pour   Table des matières

Fichiers à écrire

Il faut d'abord modifier deux fichiers pour indiquer quels serveurs de noms utiliser, et quels services de conversion de noms sont disponibles.

Le fichier /etc/resolv.conf détermine la façon dont le DNS doit chercher les informations :

#
# Fichier /etc/resolv.conf - Determine la facon dont le convertisseur
# utilise le DNS. Voir resolver(5).
#

#
# Liste des serveurs a contacter pour resoudre un nom. Il faut mieux
# mettre en premier le serveur de noms local, pour eviter de passer par
# internet pour une machine du reseau local. On peut mettre jusqu'a 3
# adresses.
#

nameserver 127.0.0.1

Le fichier /etc/host.conf indique quels services de conversion de noms sont disponibles, et dans quel ordre il faut les appliquer :

#
# Fichier /etc/host.conf - Indique quels services de conversion des
# noms sont disponibles, et dans quel ordre il faut les appliquer.
#
# Pour resoudre un nom en adresse IP, on peut passer soit par le
# DNS, soit par le fichier /etc/hosts. La ligne suivante indique dans
# quel ordre appliquer cette recherche : d'abord dans le fichier
# /etc/hosts, puis par le DNS en cas d'echec.
#
# Valeurs possibles : hosts, bind, nis.
#

order hosts, bind

Le premier fichier de configuration lu par named indique quels autres fichiers lire. Voici le fichier par défaut /etc/named.conf :

/*
 * Fichier /etc/named.conf - Premier fichier lu par named. Cf. named.conf(5)
 *
 * Specifie le(s) chemin(s) ou se trouvent les fichiers de zone DNS.
 *
 * Valeurs possibles : directory chemin
 */

options {
    directory "/var/named";

/*
 * Adresse des serveurs a contacter si le serveur de noms local est incapable
 * de resoudre le nom. Cette option peut remplacer la commande nameserver
 * du fichier /etc/resolv.conf.
 */

    forward only;
    forwarders {
        212.27.32.5;
        212.27.32.6;
    };

};

/*
 * Fichier de cache.
 */

zone "." {
    type hint;
    file "named.ca";
};

/*
 * Fichier utilise pour la resolution inverse. Les adresses IP commencant
 * par 127.0.0 peuvent etre resolues en nom d'hote dans le fichier specifie
 */

zone "0.0.127.in-addr.arpa" {
    type master;
    file "named.local";
};

/*
 * Fichier utilise pour la resolution des noms d'hote se terminant par
 * domaine1
 */

zone "domaine1" {
    type master;
    file "domaine1";
};

/*
 * Fichier utilise pour la resolution inverse. Les adresses IP commencant
 * par 192.168.1 peuvent etre resolues en nom d'hote dans le fichier
 * specifie
 */

zone "1.168.192.in-addr.arpa" {
    type master;
    file "domaine1.rev";
};

Le DNS va piocher les informations dans les fichiers named.ca pour la zone . et named.local pour la zone 0.0.127.in-addr.arpa. Ces fichiers sont situés dans le répertoire /var/named (comme indiqué par la ligne ).

La zone . correspond à la zone racine (la racine à tous les domaines de l'Internet, voir figure [*]).

Le fichier /var/named/named.ca contient donc l'adresse des DNS qui peuvent renseigner un utilisateur à partir de la racine de la hiérarchie.

La zone 0.0.127.in-addr.arpa permet d'effectuer la résolution inverse de toute les adresses commencant par 127.0.0, donc cette zone permet de résoudre l'adresse 127.0.0.1 en son nom.

On configure ici un serveur de noms maître comme l'indique la ligne . On verra à la section [*] comment configurer un serveur de noms esclave.

Pour une version de bind inférieure à 8, c'est le fichier /etc/named.boot qui est lu au démarrage de named :

;
; a caching only nameserver config
;
directory                              /var/named
cache           .                      named.ca
primary         0.0.127.in-addr.arpa   named.local

C'est à peu près les mêmes instructions que dans le fichier /etc/named.conf. Se référer à la DNS HOW-TO [1] pour la suite des opérations, ou installer named version supérieure à 8 (plus sécurisée). Pour savoir la version, taper  :

# named -v
named 8.2.2-P5 Mon Feb 28 10:17:53 EST 2000
        root@porky.devel.redhat.com:/usr/src/bs/BUILD/bind-8.2.2_P5/src/bin/named
#

Voici le fichier /var/named/named.local :

;
; Enregistrement de ressources. Syntaxe :
;
;     proprietaire ttl classe type donnees
;
; ou :
;
;     - proprietaire : nom de domaine ou nom d'hote relatif a
;     l'enregistrement. Nom de domaine de l'enregistrement de ressources
;     precedent par defaut ;
;
;     - ttl (time to live) : indique la duree de validite des informations,
;     en secondes, depuis leur recuperation depuis un serveur DNS. ttl
;     minimal du dernier debut d'autorisation par defaut ;
;
;    - classe : classe d'adresse du reseau. IN pour les resaux TCP/IP (ceux
;    qu'on utilise). Celle de l'enregistrement de ressources precedent par
;    defaut ;
;
;    - type : type d'enregistrement de ressources. Champ OBLIGATOIRE. Le
;    type sera explicite dans chaque exemple ;
;
;    - donnees : donnees associes au type d'enregistrement ;
;
; Cf. named(8).
;
; Debut d'autorisation (SOA=Start Of Authority). Cet enregistrement de
; ressources utilise l'adressage TCP/IP (IN). Le serveur de noms primaire
; a pour nom "machine1.domaine1.", la personne a contacter a pour
; adresse mel "root@machine1.domaine1".
;
;

@    IN    SOA    machine1.domaine1.    root.machine1.domaine1. (

;
; Les options qui suivent n'ont pas a etre modifiees dans le cas d'une
; configuration simple. Elles concernent le serveur de noms secondaire.
;

    1997022700 ; serial
    28800      ; refresh
    14400      ; retry
    3600000    ; expire
    86400      ; default_ttl
)

;
; "machine1.domaine1" est le serveur de noms pour le domaine.
;

@    IN    NS    machine1.domaine1.

;
; l'adresse domaine_local.1 (soit 192.168.1.1) sera accociee au nom
; "localhost".
;

1    IN    PTR    localhost.

Voici le fichier /var/named/domaine1 :

;
; Fichier /var/named/domaine1 - Contient les informations sur
; la zone domaine1 pour resoudre un nom d'hote en adresse IP.
;
; Ce fichier est appelle par le fichier /etc/named.conf. Le domaine
; actuel est celui specifie par la ligne appelant ce fichier :
;
;    zone "domaine1" {
;        type master;
;        file "domaine1";
;    };
;
; Le domaine local, represente par le caractere ``@'', est donc
; "domaine1".
;

@    IN    SOA    machine1.domaine1.    root.machine1.domaine1. (
    2000070306 ; serial
    3600       ; refresh
    900        ; retry
    1209600    ; expire
    43200      ; default_ttl
)

;
; Permet d'associer le domaine local (@) a l'adresse IP 192.168.1.1.
;

@    IN    A    192.168.1.1

;
; Ce qui suit est assez explicite...
;

@    TXT    "Serveur DNS local de domaine1"

;
; "machine1" et "machine1.domaine1" sont les serveurs de noms pour
; le domaine1.
;

@    IN     NS    machine1
@    IN     NS    machine1.domaine1.

;
; Echange de mel : tout mel doit etre envoye d'abord a machine1, puis a
; machine1.domaine1. Les nombres indiquent la priorite.
;

@    IN    MX    10    machine1
@    IN    MX    20    machine1.domaine1.

;
; Informations concernant chaque machine du reseau devant etre resolue
; par le serveur de noms local.
;
; Adresse de reference de machine1 : 192.168.1.1 (type A, unique pour une
; adresse). Diverses informations sur la machine peuvent etre specifiees
; par HINFO. Ici, c'est en commentaires car problème sécurité ;-)
;

machine1    IN    A        192.168.1.1
machine1.   IN    A        192.168.1.1
; machine1    IN    HINFO    "Intel P133+" "Linux 2.2.14-12"

;
; nougat, une autre machine.
;

nougat    IN    A        192.168.1.2
; nougat    IN    HINFO    "Non definit" "Non definit"

;
; localhost, pour l'interface de bouclage.
;

localhost   IN    A        127.0.0.1

;
; Quelque alias (CNAME) : un nom d'hote precise par un enregistrement de
; type A peut avoir un ou plusieurs alias. Dans l'exemple ci-dessous,
; www <-> machine1, ftp <-> machine1, mail <-> machine1, si bien que
; www.domaine1, ftp.domaine1 ou encore mail.domaine1
; designent la meme adresse IP, celle de l'enregistrement de type A de
; machine1. On peut ainsi faire une requête du style :
;
;     - lynx http://www.domaine1
;
;     - ftp ftp.domaine1
;
;     - fetchmail mail.domaine1
;

www     CNAME    machine1
ftp     CNAME    machine1
mail    CNAME    machine1

Enfin, voici le fichier /var/named/domaine1.rev :

;
; Fichier /var/named/domaine1.rev - Contient les informations sur
; la zone domaine1 pour resoudre une adresse IP en nom d'hote.
;
; Ce fichier est appelle par le fichier /etc/named.conf. Le domaine
; actuel est celui specifie par la ligne appelant ce fichier :
;
;    zone "1.168.192.in-addr.arpa" {
;        type master;
;        file "domaine1";
;    };
;
; Le domaine local, represente par le caractere ``@'', est donc
; "1.168.192.in-addr.arpa".
;

@    IN    SOA    machine1.domaine1.    root.machine1.domaine1. (
    2000070305 ; serial
    3600 ; refresh
    900 ; retry
    1209600 ; expire
    43200 ; default_ttl
)

;
; Serveur de noms pour le domaine.
;

    IN    NS    machine1.domaine1.

;
; Associe des adresses IP a des noms. Les adresses sont donnees par rapport
; au domaine local. Ainsi, 2 <-> 2.1.168.192.in-addr.arpa.
;

1    IN    PTR    machine1.domaine1.
2    IN    PTR    nougat.domaine1.

Noter qu'un nom d'hôte seul se termine par un point (``.'') si c'est un nom relatif au domaine courant (le domaine spécifié par la ligne dans le fichier /etc/named.conf). Ce point est donc extremement important ! Ce domaine courant est représenté par le caractère , et si il est homis (comme à la ligne indiquant le serveur de noms pour le domaine, par exemple), named considère qu'il s'agit du domaine courant.

Le fait de transmettre toute les requêtes qu'on ne peut résoudre au DNS du fournisseur d'accès permet de soulager les DNS de la racine. Ainsi, au lieu de surcharger les DNS connus par le monde entier, on surcharge les DNS connus par tous les clients du fournisseur d'accès.

Voilà, le serveur de noms servant de cache est configuré, il n'y a plus qu'à le relancer pour tester ! Pour cela, taper :

# ndc start
new pid is 3443
#

ou, si le DNS tourne déjà :

# ndc restart
new pid is 3446
#

Pour savoir si il y a des erreurs dans les fichiers de configuration, consulter le fichier /var/log/messages. Si tout s'est bien passé, on devrait avoir :

Sep 28 19:26:02 zecastor named[1513]: named shutting down
Sep 28 19:26:02 zecastor named[1513]: USAGE 970161962 970161765 CPU=0.01u/0s
CHILDCPU=0u/0s
Sep 28 19:26:02 zecastor named[1513]: NSTATS 970161962 970161765
Sep 28 19:26:02 zecastor named[1513]: XSTATS 970161962 970161765 RR=0 RNXD=0
RFwdR=0 RDupR=0 RFail=0 RFErr=0 RErr=0 RAXFR=0 RLame=0 ROpts=0 SSysQ=1 SAns=0
SFwdQ=0 SDupQ=36 SErr=0 RQ=0 RIQ=0 RFwdQ=0 RDupQ=0 RTCP=0 SFwdR=0 SFail=0
SFErr=0 SNaAns=0 SNXD=0
sep 28 19:26:03 zecastor named: named shutdown succeeded
Sep 28 19:26:03 zecastor named[1556]: starting.  named 8.2.2-P5 Mon Feb 28
10:17:53 EST 2000 ^Iroot@porky.devel.redhat.com:/usr/src/bs/BUILD/bind-8.2.2_
P5/src/bin/named
Sep 28 19:26:03 zecastor named[1556]: hint zone "" (IN) loaded (serial 0)
Sep 28 19:26:03 zecastor named[1556]: Zone "0.0.127.in-addr.arpa" (file
named.local): No default TTL set using SOA minimum instead
Sep 28 19:26:03 zecastor named[1556]: master zone "0.0.127.in-addr.arpa" (IN)
loaded (serial 1997022700)
Sep 28 19:26:03 zecastor named[1556]: listening on [127.0.0.1].53 (lo)
Sep 28 19:26:03 zecastor named[1556]: listening on [192.168.1.1].53 (eth0)
Sep 28 19:26:03 zecastor named[1556]: Forwarding source address is [0.0.0.0].
1033
Sep 28 19:26:03 zecastor named[1557]: group = 25
Sep 28 19:26:03 zecastor named[1557]: user = named
Sep 28 19:26:03 zecastor named[1557]: Ready to answer queries.
sep 28 19:26:03 zecastor named: named startup succeeded

Un message du type est normal, il signifie que aucune zone n'étant spécifiée, il utilise la zone par défaut. En revanche, un message du type :

Sep 28 19:27:49 zecastor named[1590]: Zone "0.0.127.in-addr.arpa" (file
named.local): no NS RRs found at zone top
Sep 28 19:27:49 zecastor named[1590]: master zone "0.0.127.in-addr.arpa"
(IN) rejected due to errors (serial 1997022700)

est plus grave. Il signifie qu'aucun serveur de noms n'est spécifié par l'option pour la zone 0.0.127.in-addr.arpa. En regardant de près le fichier de configuration de cette zone, on se rend compte qu'il manque un espace au début de la ligne suivante :

IN      NS      localhost.

En effet, ce n'est pas parce qu'on peut se passer de spécifier un domaine qu'il ne faut pas laisser d'espace ! En rajoutant un espace au début de la ligne, le problème est corrigé.

Un bon moyen de débugger les fichiers de configuration mal écrits est d'utiliser tail et grep :

# tail -50 /var/log/messages | grep error
Sep 28 19:27:49 zecastor named[1590]: master zone "0.0.127.in-addr.arpa"
(IN) rejected due to errors (serial 1997022700)
#

On voit tout de suite s'afficher les lignes contenant des erreurs. On peut aussi utiliser l'option -f de la commande tail pour avoir les dernières lignes du fichier, au fur et à mesure qu'elles arrivent.

Pour tester le nouveau serveur de noms installé, on peut utiliser le programme nslookup 2, par exemple :

# nslookup 127.0.0.1
Server:  localhost
Address:  127.0.0.1

Name:    localhost
Address:  127.0.0.1

#

Conclusion : on est capable de résoudre l'adresse 127.0.0.1, donc ça marche. Si on n'a qu'une seule machine à disposition, c'est terminé pour la partie DNS. Sinon, il va falloir rendre accessible aussi la résolution des noms et/ou adresses des autres machines.


next up previous contents
suivant: DNS et sécurité monter: Configurer un DNS pour précédent: Configurer un DNS pour   Table des matières
Mathieu DECORE <mdecore@linux-france.org>