Aller au contenu

Comment Configurer Gandi Avec Une Ip Dynamique.


catimimi

Messages recommandés

Bonjour,

Le petit script python "updatedns.py" ci dessous permet d'actualiser l'adresse IP de votre domaine géré par Gandi sans avoir recours à dyndns ou autre serveur.

#!/usr/local/bin/python
# -*- coding: UTF-8 -*-
import xmlrpclib, urllib2, time, re, sys

import logging
logging.basicConfig(filename='/usr/local/bin/updatedns.log',level=logging.INFO)

# API de Production
api = xmlrpclib.ServerProxy('https://rpc.gandi.net/xmlrpc/')

#########################

# URL de la page retournant l'ip publique
url_page = 'http://ifconfig.me/ip'

# Renseignez ici votre clef API générée depuis l'interface Gandi:
apikey = 'xxxxxxxxxxxxxxxxxxxxxx'

# Domaine concerné (à modifier)
mydomain = 'xxxxxxxxxxxxxxxxxxxx'

# Enregistrement
myrecord = {'name': '@', 'type': 'A'}

# TTL
myttl = 300

# id de la zone concernée (à  récupérer depuis l'interface Gandi) 
zone_id = xxxxxx

# date et heure du changement d'IP
asctime = time.asctime( time.localtime() )

####################################

# Récupération de l'ancienne ip
oldip = api.domain.zone.record.list(apikey, zone_id, 0, myrecord)[0].get('value')

try:
    # Récupération de l'ip actuelle
    f = urllib2.urlopen(url_page, None, 10)
    data = f.read()
    f.close() 
    pattern = re.compile('d+.d+.d+.d+')
    result = pattern.search(data, 0)
    if result == None:
        print("Pas d'ip dans cette page.")
        sys.exit() 
    else:
        currentip = result.group(0)

    # Comparaison et mise à jour si besoin
    if oldip != currentip:
        # On cree une nouvelle version de la zone
        version = api.domain.zone.version.new(apikey, zone_id)
        # Mise a jour (suppression puis création de l'enregistrement)
        api.domain.zone.record.delete(apikey, zone_id, version, myrecord)
        myrecord['value'] = currentip
        myrecord['ttl'] = myttl
        api.domain.zone.record.add(apikey, zone_id, version, myrecord)
        # On valide les modifications sur la zone
        api.domain.zone.version.set(apikey, zone_id, version)
        api.domain.zone.set(apikey, mydomain, zone_id)
        logging.info("Modification de l'enregistrement effectuée le : %s" % asctime)
        logging.info("avec l'adresse IP : %s" % currentip)
except urllib2.HTTPError, xmlrpclib.ProtocolError:
    logging.info("Site indisponible.")
finally:
    sys.exit()

Il suffit d'installer le paquet python de synology, de renseigner les trois champs : apikey, zone_id et mydomain.

Les deux premières valeurs sont à récupérer sur votre compte Gandi.

Il faut pour ceci activer les API Gandi pour votre compte.

J'automatise ce script par une tâche cron.

Cordialement.

Michel.

PS : Ce script est une adaptation d'un script trouvé sur internet.

Lien vers le commentaire
Partager sur d’autres sites

  • 1 mois après...

Bonjour,

Je suis très intérréssé par votre script mais tout d'abord je vous explique ma situation.

Je possède un syno 410j auquel j'avais accés depuis l'extérieur sans problème tant que j'était chez bouygues (bbox), j'ai changé cette semaine d'opérateur je suis maintenant chez orange (livebox open) le paramétrage pour avoir à nouveau accés à mon syno de l'extérieur nécéssite avec cette opérateur d'avoir recours à dyndns mais possédant aussi un nom de domaine chez Gandi qui pointe vers mon syno je me dis qu'au lieu de ça je pourrai très utiliser votre script (si j'ai bien tout compris...)

1) J'acccéde à l'interface utilisateur de mon syno en local via son adresse ip mais où trouve-t-on le paquet python à installer?

2) Sur mon compte Gandi où puis-je trouver ces valeurs : apikey, zone_id ? de même pour activer les API comment fait-on?

3)"J'automatise ce script par une tâche cron" la, je nage complétement :) cette tâche est-elle réalisable si je suis sous mac osX sinon existe-t-il une équivalence ou solution alternative?

Une fois ces 3 étapes réalisé connaissez vous les étapes à suivre sur l'interface de la livebox pour que la connexion à mon syno depuis l'exterieur refonctionne à nouveau?

Merci pour ces précisions que vous pourriez m'apporter.

Modifié par krick
Lien vers le commentaire
Partager sur d’autres sites

  • 7 mois après...

Merci pour le script qui fonctionne bien sur mon pc machine

Par contre je souhaite que celui-ci tourne 1 fois par jour directement sur mon synology DS211.

J'ai bien installé le package Python mais apres je ne vois pas du tout

  • comment scheduler mon script:
  • ou le mettre sur le syno (dans quel dossier)

Quelqu'un peut-il m'aider ?

Merci

Asimov 67

NB J'ai fait ce post ici car je n'ai pas trouvé mieux comme catégorie ... ^_^

Lien vers le commentaire
Partager sur d’autres sites

comment scheduler mon script:

Avec le planificateur de tâche intégré au DSM (Panneau de configuration > Planificateur de tâches).

ou le mettre sur le syno (dans quel dossier)

Peu importe, du moment que ce n'est pas un dossier dont le contenu est écrasé par les mises à jour de DSM (/var/services/homes/admin/ par exemple).

Lien vers le commentaire
Partager sur d’autres sites

  • 2 ans après...

Hello, J'ai mis en place ce script mais j'ai cette erreur à l'execution:

sh: /var/services/homes/pews/updatedns.py: /usr/local/bin/python^M: bad interpreter: No such file or directory

Quelqu'un peut m'aider ?

 

Lien vers le commentaire
Partager sur d’autres sites

De plus les paramètres sont inversés.

On indique le path de python puis le fichier script à exécuter.

La commande est donc : /usr/local/bin/python  /var/services/homes/pews/updatedns.py

Une remarque complémentaire:

Ce script crée une nouvelle version de zone à chaque changement d'IP.

Le n° de version risque donc de vite monter (je ne sais pas s'il y a une limite)

 

 

Lien vers le commentaire
Partager sur d’autres sites

il y a 1 minute, PPJP a dit :

De plus les paramètres sont inversés.

Ils ne sont pas inversés, c'est le retour d'erreur qui l'affiche comme ça

Il y a 3 heures, pews a dit :

sh: /var/services/homes/pews/updatedns.py: /usr/local/bin/python^M: bad interpreter: No such file or directory

  • shell du lancement
  • script lancé
  • ligne en erreur
  • message d'erreur
Lien vers le commentaire
Partager sur d’autres sites

Désolé de l'erreur d'interprétation.

Mais la commande reste correcte.

J’hésite généralement de poster des réponses de peur de commettre des erreurs de ce genre.

Je vais continuer à hésiter, cela vaudra mieux!

Tu as déjà assez de taf à répondre aux multiples posts, pour ne pas t'imposer de venir corriger mes erreurs

Modifié par PPJP
orthographe
Lien vers le commentaire
Partager sur d’autres sites

Outre l'encodage du fichier, le chemin de l'interpréteur n'est pas bon :

Il y a 11 heures, pews a dit :

sh: /var/services/homes/pews/updatedns.py: /usr/local/bin/python^M: bad interpreter: No such file or directory

Il me semble que /usr/local/bin/python était le chemin utilisé par DSM 5 et versions antérieures. Depuis DSM 6 c'est /bin/python :

root@DiskStation:~# which python
/bin/python

----------------------------------------------------------------

J'ai quand même vérifié les chemins. Donc /bin/python exécutera le script en version 2.7 :

root@DiskStation:~# ll /bin/python*
lrwxrwxrwx 1 root root    7 Jul 15 22:13 /bin/python -> python2
lrwxrwxrwx 1 root root    9 Jul 15 22:13 /bin/python2 -> python2.7
-rwxr-xr-x 1 root root 5556 Jul 13 00:19 /bin/python2.7

Pour les versions ultérieures, il faut utiliser /usr/local/bin/python{version} :

root@DiskStation:~# which python3
/usr/local/bin/python3

root@DiskStation:~# ll /usr/local/bin/python*
lrwxrwxrwx 1 root root 45 Jul 15 22:18 /usr/local/bin/python3 -> /volume1/@appstore/py3k/usr/local/bin/python3
lrwxrwxrwx 1 root root 47 Jul 15 22:18 /usr/local/bin/python3.5 -> /volume1/@appstore/py3k/usr/local/bin/python3.5
lrwxrwxrwx 1 root root 48 Jul 15 22:18 /usr/local/bin/python3.5m -> /volume1/@appstore/py3k/usr/local/bin/python3.5m

root@DiskStation:~# ll /volume1/@appstore/py3k/usr/local/bin/python*
lrwxrwxrwx 1 root root    9 Dec  8  2016 /volume1/@appstore/py3k/usr/local/bin/python3 -> python3.5
-rwxr-xr-x 2 root root 5588 Dec  8  2016 /volume1/@appstore/py3k/usr/local/bin/python3.5
-rwxr-xr-x 2 root root 5588 Dec  8  2016 /volume1/@appstore/py3k/usr/local/bin/python3.5m

Le m de python3.5m indique que l'exécutable a été compilé avec pymalloc.

Modifié par PiwiLAbruti
Complément d'information
Lien vers le commentaire
Partager sur d’autres sites

  • 8 mois après...

Bonjour,

Quelqu'un à t-il testé avec l'API v5 de Gandi ?

Suite à un changement d'ip intempestif de ma livebox j'ai voulu installer ce script, cependant il me semble qu'il n'est plus utilisable avec la v5 : en particulier lorsque j'ai voulu récupéré la zone id qui n'est plus exposé sur le site web de la v5.

Lien vers le commentaire
Partager sur d’autres sites

Pour ceux que ça intéresse j'ai bricolé un script python qui utilise l'API v5 de Gandi. Ce qu'il fait :

1- détermine la zone id a partir du domaine et de l'api key.

2- fait un snapshot de la zone.

3- modifie le @ de type A avec la nouvelle ip.

Source : https://github.com/hot22shot/updategandidns

Soyez indulgent, je n'ai jamais fait de python. N'hésitez pas à me faire part de vos remarques !

Lien vers le commentaire
Partager sur d’autres sites

  • 1 mois après...
Le 08/04/2018 à 12:56, hot22shot a dit :

Pour ceux que ça intéresse j'ai bricolé un script python qui utilise l'API v5 de Gandi. Ce qu'il fait :

1- détermine la zone id a partir du domaine et de l'api key.

2- fait un snapshot de la zone.

3- modifie le @ de type A avec la nouvelle ip.

Source : https://github.com/hot22shot/updategandidns

Soyez indulgent, je n'ai jamais fait de python. N'hésitez pas à me faire part de vos remarques !

je regarde le sujet et toute la documentation gandi fait reference a la v4 (et, sauf erreur de ma part c'est sur l interface v4 que l'api est activable). Depuis Avril ton script 'v5' fonctionne t il bien ?  Merci !

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.