UN SERVEUR DE NOMS DE DOMAINES AVEC BIND 9
faire tourner bind
Named, comme tout daemon Linux, se doit d'être lancé au démarrage du serveur grâce à l'habituel init.d,
et commence par lire son fichier de configuration, /etc/named.conf. Celui-ci est généré lors de l'installation ou
du premier démarrage de Bind, avec des modalités variant selon les distributions. Pour la Mandrake 8.1, il s'agit
d'un script Perl exécuté à l'installation ; pour la RedHat 7.2, il faut utiliser l'interface graphique
bindconf. Voici à quoi ce fichier peut ressembler :
// generated by named-bootconf.pl
// secret must be the same as in /etc/rndc.conf
key "key" {
algorithm hmac-md5;
secret
"c3Ryb25nIGVub3VnaCBmb3IgYSBtYW4gYnV0IG1hZGUgZm9yIGEgd29tYW4K";
};
controls {
inet 127.0.0.1 allow { any; } keys { "key"; };
};
options {
pid-file "/var/run/named/named.pid";
directory "/var/named";
/*
* If there is a firewall between you and nameservers you want
* to talk to, you might need to uncomment the query-source
* directive below. Previous versions of BIND always asked
* questions using port 53, but BIND 8.1 uses an unprivileged
* port by default.
*/
// query-source address * port 53;
// les adresses des serveurs du FAI, pour les requetes externes
forward first;
forwarders {212.27.32.5; 212.27.32.6;};
};
//
// a caching only nameserver config
//
zone "." {
type hint;
file "named.ca";
};
zone "0.0.127.in-addr.arpa" {
type master;
file "named.local";
};
//un fichier pour l'hote local
zone "localhost" {
type master;
file "localhost";
};
//DNS maître sur mondomicile.local
zone "mondomicile.local" {
type master;
file "mondomicile.dns";
forwarders{};
};
//resolution inverse de mondomicile.local
zone "200.168.192.in-addr.arpa" {
type master;
file "mondomicile.inv";
forwarders{};
};
Ça a l'air plutôt ardu ; essayons de décrypter un peu :
D'abord, les règles de syntaxe, qui paraissent d'ailleurs relativement évidentes si l'on étudie attentivement le
fichier :
- Les lignes débutant par // sont des commentaires ; les /* et */ du C, le # du bash sont également acceptés. Le
; en début de ligne est interdit.
- Les autres lignes sont des règles de configuration, lesquelles se terminent toujours par un ;. Si une règle
est imbriquée dans une autre, elle doit aussi se terminer par un ; et on doit alors utiliser les {}.
- Ces règles comportent deux, et souvent trois parties :
- D'abord, un mot-clé comme key, zone, acl ou include
- Ensuite, si besoin est, le nom de la règle.
- Et enfin, le contenu de celle-ci. Bien évidemment, le contenu change selon la catégorie.
Voyons d'ailleurs les principaux types de régles :
- logging et options ne peuvent apparaître qu'une fois dans le fichier. logging permet de
préciser une quantité quasi astronomique de paramètres pour les logs du daemon, et options un nombre encore plus
impressionant d'options. La liste complète figure dans la page man named.conf.
Ici, on a ajouté deux lignes
pour permettre la résolution des noms qui n'appartiennent pas au domaine que gère notre DNS, c'est à dire, pour faire
court, la navigation sur Internet :
- le mot clé forwarders est suivi de la liste des adresses des serveurs de référence, ici ceux du
fournisseur d'accès.
- forward first ordonne à named d'aller interroger d'abord ces serveurs-là, avant d'aller ennuyer les serveurs
racine dont les adresses sont contenues dans le fichier named.ca
- et pour éviter de faire appel à ces serveurs externes pour résoudre des noms de notre réseau local, par exemple à la
suite d'une erreur dans la saisie d'une adresse, on ajoute dans chaque zone une liste vide de serveurs de
référence, avec forwarders{};
- Le fichier présenté plus haut, fichier installé par Bind et à peine
modifié, ne comporte que deux options : le répertoire où l'on trouvera l'identifiant de bind, et celui où seront
conservés les fichiers de données propres à chaque zone, ici, et en général, /var/named.
- key et
controls déterminent des paramètres de sécurité nécessaires à l'administration du serveur au moyen de
l'utilitaire ad hoc, rndc, lequel dispose, avec rndc.conf, de son propre fichier de configuration.
key définit une clé secrète à l'aide de deux arguments, algorithm, pour l'instant seulement hmac-md5, et
secret ; cette clé sera comparée à celle qui figure dans le fichier rndc.conf et, étant secrète, il vaut
mieux qu'elle ne soit pas accessible à tous. controls restreint l'accès physique à l'administration du
serveur : ici, seul l'accès TCP/IP, alias inet à l'hôte local est autorisé, du moment qu'il possède la
clé. Jusqu'à présent, le serveur tourne et peut être administré, mais il ne sert à rien : l'information
utile se trouve dans les définitions de zone. Le contenu de chaque zone sera détaillé dans un fichier
propre, ici placé dans le répertoire /var/named. named.conf ne contient que des paramètres généraux, à savoir :
- Le type de zone, master pour celles qui sont placées sous l'autorité du serveur, slave
pour celles dont il garde juste une copie, qui sera mise à jour en fonction des paramètres enregistrés dans le fichier
de zone. Rien n'empêche un même serveur d'être maître sur une ou plusieurs zones, et esclave sur d'autres. hint
est un type particulier de zone, celui des serveurs root, placés donc au sommet de l'arborescence du DNS. Leur
nom est un simple ".", leur présence dans le fichier named.conf rigoureusement indispensable.
- Le nom de la
zone, entre " ", suit immédiatement le mot-clé zone. On constate qu'il n'est pas nécessairement identique au nom
du fichier qui lui est associé, lequel est définit par le terme file. Par contre, le nom de la zone doit être
identique à celui du domaine concerné.
- Dans les zones master et slave, quelques options sont
disponibles, que l'on retrouva dans le paramètre options.
gérer un serveur secondaire
Et si l'on est suffisamment riche pour entretenir un second serveur, rien de plus simple que de le transformer en
esclave. Voici à quoi ressemblera named.conf, cette fois-ci sur une RedHat 7.2 :
## named.conf - configuration for bind
#
# Generated automatically by bindconf, alchemist et al.
controls {
inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};
include "/etc/rndc.key";
options {
directory "/var/named/";
};
zone "mondomicile.local" {
type slave;
file "mondomicile.slv";
masters {
192.168.200.20;
};
};
zone "200.168.192.in-addr.arpa" {
type slave;
file "200.168.192.in-addr.arpa.slv";
masters {
192.168.200.20;
};
};
Il nous suffit donc de :
- attribuer le type slave aux zones déjà définies dans le serveur maître.
- donner l'adresse IP du serveur maître sur la ligne masters, en respectant les ; et autres {} voulus par la
syntaxe.
- prévoir par commodité un nom différent pour le fichier de zone conservé dans le même répertoire /var/named du
serveur esclave.
Et c'est tout : au démarrage, le serveur secondaire interrogera le serveur primaire, récupèrera les fichiers
spécifiés dans named.conf et les écrira dans son répertoire /var/named. On peut vérifier tout ça grâce aux messages du
serveur primaire :
Jan 10 16:38:23 superathlon named[1317]: client 192.168.200.21#32770: transfer of 'mondomicile./IN': AXFR started
Jan 10 16:38:23 superathlon named[1317]: client 192.168.200.21#32770: transfer of '200.168.192.in-addr.arpa/IN':
AXFR started
Un dernier contrôle dans /var/named : les fichiers .slv sont bien là.
contrôler le daemon
Le serveur peut donc être contrôlé avec un utilitaire en ligne de commande, rndc. Celui-ci supporte notamment
les commandes suivantes :
rndc, qui remplace l'ancien ndc, est une des nouveautés de la version 9 de Bind : en cours de
développement, la liste de ses commandes change avec chaque nouvelle version du daemon.
Le fichier de configuration de rndc, /etc/rndc.conf, doit obligatoirement contenir la même clé secrète que
named.conf, faute de quoi l'accès au serveur sera impossible.
Enfin, deux autres commandes accomplissent des tâches subalternes : named-checkconf vérifie la syntaxe du
fichier named.conf, et named-checkzone avec comme option le nom de la zone et le chemin du fichier de zone,
valide la syntaxe de ce dernier : named-checkzone mondomicile.local /var/named/ mondomicile.dns fournit un
résultat de ce type :
dns_rdata_fromtext: /var/named/mondomicile.dns:8: near '@': extra input text
zone mondomicile.local/IN: loading master file /var/named/mondomicile.dns: extra input text
Ah finalement, tout ne va pas si bien. Ça n'a pas l'air trop grave, le serveur marche quand même. Reste à le
nourrir de quelques noms et adresses.
|