Utiliser MySQL pour stocker les zones DNS avec MySQL BIND SDB
Bonjour,
Aujourd’hui, je vais vous présenter un module de BIND qui permet à celui-ci de récupérer vos zones DNS depuis une base de données MySQL.
J’ai longtemps utilisé la Soapi OVH pour ajouter des entrées à la demande (ajout de sous-domaines lors de la livraison de machines virtuelles) à mes zones.
Mais avec l’augmentation des demandes, la plupart de mes requêtes étaient refusées par l’API, et une gestion fine devenait complexe. C’est pourquoi j’ai choisi d’utiliser mes propres serveurs DNS avec un backend plus simple à gérer que des fichiers.
BIND dispose de 2 API qui permettent de modifier le backend de stockage des zones. Nous allons utiliser un module qui utilise Simple Database API (SDB). Le module à installer est MySQL BIND SDB Driver.
Le site explique relativement bien la procédure, mais je vais vous la réexpliquer pas à pas, avec les commandes complètes pour éviter d’avoir à chercher.
Compilation de BIND
|
|
Petit résumé des opérations effectuées:
- Installation des paquets nécessaires à la compilation
- Récupération des sources de mysql-bind
- Récupération des sources de bind via les dépots et installation des dépendances
- Modification des sources de bind pour intégrer mysql-bind
- Compilation
- Construction du package Debian
- Installation du package créé
Suite à ces étapes, vous avez la même configuration qu’une installation depuis les dépôts Debian, mais avec le support de MySQL.
C’est un peu plus compliqué qu’un simple make install
, mais ça apporte des fichiers de configuration par défaut, le fichier dans init.d, etc.
Configuration de named.conf.local
Vu qu’on a une configuration Debian classique, c’est dans le fichier /etc/bind/named.conf.local
qu’il faut ajouter notre zone.
|
|
Il faut remplacer dbname
par le nom de la base de données qui gère la configuration de bind, tablename
par la table qui contient votre zone, ainsi que hostname
, user
et password
avec les informations de connexions au serveur de bases de données.
Création de la base de données
On crée une table pour gérer la zone selon la structure suivante:
Exemple de base de données
Et voilà à quoi devrait ressembler votre base de données.
|
|
Conclusion
Vous pouvez maintenant stocker vos zone DNS directemment dans MySQL, et ne plus avoir besoin de modifier les fichiers de configuration.
En revanche, j’ai relevé deux inconvénients:
- Chaque requête DNS provoque un accès MySQL, sur un serveur à forte charge, cela peut-être problématique.
- Dans le cas d’une architecture master/slave, le master ne fait pas de notification aux slaves en cas de changement, il faut donc baisser le temps de validité de la zone au niveau du champ SOA (ne descendez pas en dessous de 20 minutes). Les slaves conserveront un cache pendant le temps de validité et iront recharger la configuration depuis le master lorsque le temps est écoulé.
Bonus
Et en bonus, une classe PHP qui vous permet de gérer vos zones, avec mise à jour du serial du champ SOA.
|
|