Mon CV

Gérer automatiquement ses DNS secondaires chez OVH

31 mai 2015

Héberger ses DNS secondaires sur le service d’OVH

Si vous administrez un serveur Unix, il y a des chances que vous ayez fait le choix d’héberger vous-même vos DNS. Pour ma part j’utilise Bind9 en environnement Debian. Le souci, c’est évidemment qu’en cas de soucis, si votre serveur est down, votre DNS aussi. Il est du coup très utile d’avoir un DNS secondaire fiable sur un autre réseau que le DNS primaire.

Si vous hébergez vos serveurs chez OVH, un service vous est proposé gratuitement sur le réseau d’OVH. L’adresse du serveur DNS secondaire est :

 

Automatiser l’enregistrement des domaines sur le service d’OVH

Une fois que vous une installation fonctionnelle, le souci, c’est qu’à chaque fois que vous ajouterez un domaine sur votre serveur, il faudra aller ajouter le DNS secondaire en passant par le Manager d’OVH. Tant qu’on en gère qu’un ou deux ça va … Mais pour une agence web ça peut vite être du temps d’administration.

J’ai du coup cherché une méthode alternative pour automatiser une partie de ce processus. OVH propose en effet une API qui permet, entre autres, d’interagir avec le Manager, il n’y a donc aucune raison de ne pas y arriver. L’idée centrale serait de mettre en place une tâche cron qui scanne la liste des domaines gérés par le serveur, par exemple en regardant dans /var/bind/pri et qui synchronise cela grâce à l’API d’OVH pour que les domaines enregistrés sur le service de DNS secondaire soit toujours à jour.

En cherchant un peu j’ai trouvé un script déjà préparé par quelqu’un qui avait la même problématique. C’est écrit en PHP (gloups !) et ça utilise l’ancienne API d’OVH (soApi) et c’est assez simple à mettre en place.

Pour installer lancez les commandes suivantes :

cd ~
git clone https://github.com/yvangodard/ovh-dnsupdater.git
cd ovh-dnsupdater
cp etc/ovh-dnsupdater /etc/ovh-dnsupdater
chmod 640 /etc/ovh-dnsupdater
cp ovh-dnsupdater /usr/sbin/ovh-dnsupdater
chmod 755 /usr/sbin/ovh-dnsupdater
mkdir /var/lib/ovh-dnsupdater
chmod 750 /var/lib/ovh-dnsupdater
cd ..
rm -R ovh-dnsupdater

L’outil sera donc installé à l’emplacement /usr/sbin/ovh-dnsupdater et le fichier de configuration sera /etc/ovh-dnsupdater.

 

Eviter l’usage du mot de passe du compte OVH

Par défaut l’ancienne API d’OVH (soApi) qui est utilisée dans ce script utilise pour l’authentification le mot de passe et le NIC-Handle de votre compte OVH.

Pour éviter de laisser en clair votre mot de passe dans un fichier sur votre serveur, il y a la possibilité de créer un mot de passe spécifique à soApi sur le Manager d’OVH. Pour le moment, je n’ai trouvé cette fonction que sur le Manager V3 dont l’accès est encore possible.

Il faut donc se connecter au Manager puis cliquer sur le lien “Pendant quelques semaines, vous pouvez encore administrer vos services via l’ancienne interface client.”

Dans cette interface, allez sur Administration > Mes paramètres > Mot de passe :

Mot de passe OVH

Il vous faudra ensuite cocher le “Mode expert” pour pouvoir définir un mot de passe spécifique à l’API, cela se passe dans l’onglet SOAP qui s’active en cochant le Mode expert :

Mode expert SOAPI Ovh

Vous pouvez ainsi choisir un mot de passe pour votre NIC-Handle OVH qui ne sera valide que depuis soApi.

Ensuite, il est possible de modifier les règles de sécurité, pour éviter que vous receviez par exemple un email à chaque fois que le script sera lancé et utilisera l’API. Pour cela, toujours dans le Manager V3, allez dans Administration > Paramètres > Restriction d’accès.

Vous pouvez sur cette page :

  1. soit autoriser tous les accès par défaut à Soap sans envoi d’email
  2. ou, plus sécurisé : garder comme règle par défaut “Autorisé + mail” et entrer en dessous, dans la liste des règles l’adresse IP du serveur qui lancera le script (pensez à ajouter “/32” à la fin de l’adresse IP) et cocher “Soap” pour autoriser les accès à soApi sans alerte uniquement depuis cette adresse. Si vous avez plusieurs serveurs, vous pouvez ajouter plusieurs IP. Evidemment, vous pouvez aussi en profiter pour entrer des réglages pour l’accès via l’interface Web du Manager.

Restrictions accès OVH

 

Paramétrer ovh-dnsupdater sur votre serveur

Il vous faut maintenant éditer le fichier /etc/ovh-dnsupdater sur votre serveur et changer les valeurs suivantes :

Dans la section [soapi]

  • nic doit contenir votre NIC-Handle OVH
  • password doit contenir le mot de passe que vous avez créé pour l’accès SOAP (voir plus haut). Si vous n’avez pas activé de mot de passe spécifique à soApi, entrez ici le mot de passe de votre compte OVH

Dans la section [server]

  • hostname doit contenir le nom votre serveur tel qu’il a été attribué par OVH
  • ip doit évidemment contenir l’IP de votre serveur

Dans la section [backup_dns]

  • hostname doit contenir l’adresse du serveur de backup DNS d’OVH (qui varie selon le type de serveur)
  • ip doit contenir l’IP correspondante à ce serveur DNS secondaire

Dans la section [paths], vous devez renseigner les chemins spécifiques du service Bind (cela peut varier selon votre paramétrage). Dans mon cas, ce sera

  • zones = /var/bind/pri
  • data = /var/lib/ovh-dnsupdater
  • zone_suffix = .hosts

 

Comprendre l’usage l’outil ovh-dnsupdater

Le script s’utilise avec la syntaxe suivante : ./ovh-dnsupdater [options]

Où les paramètres sont :

  • --conf-file=<file> : charge un fichier de configuration <file> spécifique à la place de /etc/ovh-dnsupdater
  • --dry-run : permet de lancer le script sans appliquer les modifications. Cela permet des tests.
  • -h, --help : affiche l’aide.
  • --hard : force la récupération de la liste des domaines déjà enregistrés sur le service de DNS secondaire en utilisant l’API et les enregistre en cache sur le serveur.

Ovh-dnsupdater fonctionne en surveillant le répertoire de la Zone Bind sur votre serveur et compare avec ce qui est enregistré chez OVH. A chaque fois qu’il est lancé cet outil va donc :

  1. Récupérer la liste des domaines enregistrés chez OVH sur le service de DNS secondaire
  2. Récupérer la liste des domaines configurés localement (sur Bind9)
  3. Calculer la différence entre ces listes
  4. Ajouter ou supprimer chez OVH sur le service de DNS secondaire les domaines afin que les deux listes soient synchronisées.

La seule chose à bien comprendre est l’usage de l’option --hard. Quand elle est utilisée, le script va d’abord télécharger la liste des domaines déjà enregistrés sur le service de DNS secondaire en utilisant l’API et les stocker dans un cache local, avant de poursuivre. Sans l’usage de cette option, le script comparera les domaines enregistrés localement avec la version en cache.

Pour rester léger, l’idée sera donc d’alterner des appels via cron sans l’usage de l’option --hard (toutes les 5 ou 10 minutes) et de manière moins régulière.

Nous allons donc ajouter ces lignes dans la table Cron (en utilisant la commande crontab -e) :

# lancement de ovh-dnsupdater
*/5 *   *   *   *  root /usr/sbin/ovh-dnsupdater # lancement toutes les 5 minutes
7   2   *   *   *  root /usr/sbin/ovh-dnsupdater --hard # lancement 1 fois par jour

 

Tester l’outil ovh-dnsupdater

Evidemment, avant de considérer que tout est OK, il vaut mieux faire un petit test. Pour cela, lancez :

/usr/sbin/ovh-dnsupdater --hard --dry-run

puis allez regarder le résultat dans le journal :

tail -1000 /var/log/syslog | grep ovh-dnsupdater

… vous devriez y trouver une trace des modifications à appliquer.

Si tout est OK, lancez en “vrai” la commande :

/usr/sbin/ovh-dnsupdater --hard

… et vérifiez sur la Manager OVH que les modifications ont été correctement appliquées.

 

Les tutoriels d’OVH et la documentation

J’en profite aussi pour vous signaler quelques tutoriels simples mis en place par OVH :

Et la documentation complète du script : https://github.com/yvangodard/ovh-dnsupdater

Posted in Unix et LinuxTags: