Je suis Charlie

Autres trucs

Accueil

Seulement les RFC

Seulement les fiches de lecture

Ève

Interface de configuration du futur BIND 10

Première rédaction de cet article le 8 octobre 2009


Le développement de la prochaine version du serveur DNS BIND continue à suivre son petit bonhomme de chemin. Cette semaine, la discussion portait surtout sur l'interface de configuration, posant quelques problèmes intéressants, notamment pour les cas où BIND sert un très grand nombre de zones.

BIND est utilisé dans des cas très variés. Du serveur de noms de la racine, avec très peu de données mais énormément de trafic et un rôle critique, au serveur d'un fournisseur de services Internet, qui héberge 100 000 zones pour ses clients, en passant par le petit résolveur du petit réseau local de la petite entreprise. Il est difficile de concevoir une interface qui convient à tous les cas. Aujourd'hui, BIND version 9 se configure essentiellement via le fichier named.conf où on indique à la fois des informations de contrôle (comme recursion no; ou listen-on { 127.0.0.1; };) et des données comme la liste des zones servies. Dans la plupart des cas, ces données sont de taille raisonnable mais, pour un gros hébergeur DNS, il peut y avoir des centaines de milliers de zones servies (soit comme serveur maître, soit comme esclave), et la lecture du fichier de configuration, au démarrage comme au rechargement, prend un temps fou :

zone "example.net" IN {
	type master;
	file "pri/example.net.zone";
};
zone "example.org" IN {
	type master;
	file "pri/example.org.zone";
};
zone "example.com" IN {
	type master;
	file "pri/example.com.zone";
};
...

La configuration via un fichier, traditionnelle sur Unix, surtout pour un démon, a d'autres défauts. Tout changement doit se faire par la modification d'un fichier, puis un rechargement (opération, on l'a vu, parfois assez lente et pendant laquelle le serveur ne répond pas, ou plus lentement). Cela n'est pas pratique par rapport à une configuration interactive, comme celle des routeurs Cisco utilisant IOS.

La proposition des développeurs de BIND 10 était donc de remplacer le traditionnel named.conf par une telle interface interactive. L'administrateur système aurait alors tapé des requêtes de configuration, que BIND aurait sauvegardé sous un format non texte, par exemple une base de données SQLite.

Ce projet, présenté dans des réunions physiques en marge de la réunion RIPE à Lisbonne, a suscité, c'est le moins qu'on puisse dire, des réserves. Outre le fait qu'un tel projet heurtait des habitudes ancestrales, outre le fait qu'il mettait BIND à part de tous les autres démons Unix, ce mécanisme avait d'autres inconvénients comme de rendre impossible l'échange de fichiers de configuration (par exemple pour signaler une bogue ou un problème sur une liste de diffusion). Et les gérants de grands parcs de serveurs BIND craignaient la perspective de ne plus pouvoir générer un fichier de configuration avant de le pousser sur toutes les machines.

Des tas d'approches alternatives ont été discutées : par exemple s'inspirer de JunOS plutôt que de IOS, pour une interface interactive (avec navigation hiérarchique) ou bien permettre une exportation de la base de données sous forme texte pour les sauvegardes ou l'échange d'informations.

Mais l'idée qui est revenue le plus souvent était de regarder ce que font les autres démons Unix qui gèrent des milliers de domaines. En général, ils gardent le principe du fichier de configuration pour le contrôle et y renoncent pour les données.

Ainsi, Apache a plusieurs méthodes pour configurer divers domaines. La méthode de base est de les mettre dans les fichiers de configuration :


NameVirtualHost 198.51.100.44
<VirtualHost 198.51.100.44>
ServerName www.customer-1.com
DocumentRoot /www/hosts/www.customer-1.com/docs
</VirtualHost>

<VirtualHost 198.51.100.44>
ServerName www.customer-2.com
DocumentRoot /www/hosts/www.customer-2.com/docs
</VirtualHost>

# ...

<VirtualHost 198.51.100.44>
ServerName www.customer-N.com
DocumentRoot /www/hosts/www.customer-N.com/docs
</VirtualHost> 

Mais il en existe d'autres, très bien décrites dans la documentation. Avec le module Apache mod_vhost_alias, on utilise le système de fichiers comme base de données : la présence d'un répertoire indique la gestion d'un domaine de même nom, sans avoir besoin d'éditer un fichier ou de recharger Apache :

VirtualDocumentRoot /www/hosts/%0/docs

# Et il n'y a plus qu'à créer /www/hosts/www.customer-1.com,
# /www/hosts/www.customer-1.com, etc

Pour le serveur de courrier Postfix, il existe également plusieurs méthodes, décrites dans la documentation. Toutes reposent sur l'usage des maps, des tables qui associent une clé (typiquement une adresse de courrier) à une valeur, par exemple :

virtual_alias_domains = example.com ...
virtual_alias_maps = hash:/etc/postfix/virtual
...
# /etc/postfix/virtual
postmaster@example.com postmaster
info@example.com       joe
sales@example.com      jane

Ces tables peuvent être des fichiers texte, ou bien distribuées par des SGBD, LDAP, etc.

Bref, il en existe des méthodes pour configurer un serveur Internet.

Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)

Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)