Mettre à jour son enregistrement DNS sur OVH

Mettre à jour son enregistrement DNS sur OVH

Si vous avez acheté votre nom de domaine chez OVH pour vous auto-héberger et que votre opérateur préféré (ou pas!) ne vous a pas donné une IP fixe. Ce ticket vous intéresse!!!

Ayant récemment changé ma box pour la LiveBox Play de chez Sosh, je me suis rendu compte que je devais maintenant faire les frais d’une IP dynamique. Pas pratique pour de l’auto-hébergement!

Même si la box gère une liste assez restreinte de DynDNS sur le web, cela ne m’intéresse pas… Je possède mon nom de domaine chez OVH et la box ne me permet pas de mettre à jour de mon IP dans les enregistrements DNS comme à partir de l’interface de gestion de chez OVH.

En fouillant un peu sur le Net, j’espérai trouver une API pour gérer mes entrées DNS chez OVH. Et ce fut le cas!!! OVH propose une API SOAP qui permet de faire tout ce que propose le manager de l’interface web.

Je me suis donc penché sur l’écriture d’un script en Python pour mettre à jour mon adresse IP dans les tables DNS de chez OVH.


Le module SOAPpy

Pour pouvoir utiliser une API SOAP, il faut installer le paquet SOAPpy :

pip install SOAPpy

Script de mise à jour

C’est cadeau! Voici le script qui permet de mettre à jour son entrée DNS. Pensez à changer les valeurs de ‘user’, ‘user_passwd’ et ‘domain’ par les vôtres. Dans mon cas, domain=’heavyrage.ovh’.

#!/usr/bin/python

import pprint
from SOAPpy import WSDL
import urllib
import re
import os.path
import datetime
import time

def mylogfile(text):
       lfile='/var/log/updateDNS.log'
       now=datetime.datetime.now().time()
       tmp=now.strftime("%Y%m%d - %H:%M:%S - ")
       f=open(lfile,'a')
       f.write(tmp+text+"\n")
       f.close()
       print tmp+text

def initWSDL():
       soap = WSDL.Proxy('https://www.ovh.com/soapi/soapi-re-1.63.wsdl')
       return soap

def login(soap, user, passwd):

       #login
       session = soap.login(user, passwd, 'fr', 0)
       mylogfile("login successfull")
       return session

mylogfile("Starting script")
user='user'
user_passwd='password'
domain='mydomain'

sock = urllib.urlopen("http://monip.org/")
htmlSource = sock.read()
sock.close()

m = re.search('>IP : (.+?)<', htmlSource)
if m:
       found = m.group(1)
       msg="Current IP : "+found
       mylogfile(msg)

oldIpFile='/opt/updateDNS/oldIP.txt'
if os.path.isfile(oldIpFile):
       f=open(oldIpFile,'r')
       if f:
               oldIp=f.read()
       f.close()
else:
       mylogfile("No oldIP.txt file. Lookup for online entry.")

       soap=initWSDL()
       session=login(soap,user,user_passwd)
       #zoneEntryList
       result = soap.zoneEntryList(session, domain)
       mylogfile("zoneEntryList successfull")

       for i in xrange(len(result.item)):
               if result.item[i].fieldtype == 'A' and result.item[i].subdomain == '' :
                       oldIp = result.item[i].target
                       msg="Listed IP : "+oldIp
                       mylogfile(msg)


if found <> oldIp and found:
       mylogfile("Old IP : "+oldIp)
       try:
                 session
       except NameError:
               soap=initWSDL()
               session=login(soap,user,user_passwd)
       else:
               mylogfile("Modifying online entry...")
       # zoneEntryModify
       soap.zoneEntryModify(session, domain, '', 'A', oldIp, found)
       mylogfile("zoneEntryModify successfull")

       #logout
       soap.logout(session)
       mylogfile("logout successfull")

       mylogfile("Saving current IP.")
       f=open(oldIpFile,'w')
       f.write(found)
       f.close()
else :
       mylogfile("no need to update")
updateDNS.py

Petite explication

Le script ci-dessus permet de mettre à jour son adresse IP à condition que celle-ci change et seulement s’il est exécuté par l’utilisateur.

Il récupère votre adresse IP depuis monIP.org et vérifie si l’adresse trouvée est identique à celle déjà enregistrée dans un fichier oldIP.txt. Si les adresses sont identiques alors rien  ne se passe, sinon une connexion est initiée via l’API SOAP et une mise à jour de l’entrée de type A correspondant à votre nom de domaine est effectuée.

Pensez à automatiser…

Sous Linux, vous avez la possibilité de l’exécuter de manière automatique grâce à une crontab. Pensez-y…

L’objet de ce ticket n’étant pas de vous initier au crontab, je vous invite à consulter cette page qui recense plein de liens intéressants…

PS : ceux qui auront cliqué auront perçu mon ton ironique 😀 !

  • blié le octobre 27, 2015 - 5:17
  • r lourderadj
  • blié dans

No comments yet

isser un commentaire



Tweets
    Optimization WordPress Plugins & Solutions by W3 EDGE