This site uses cookies! Learn More

Ce site utilise des cookies !

En continuant à utiliser ce site, vous vous engagez à nous permettre de stocker des cookies sur votre ordinateur.

catimimi

Comment Configurer Gandi Avec Une Ip Dynamique.

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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 ... ^_^

Partager ce message


Lien à poster
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).

Partager ce message


Lien à poster
Partager sur d’autres sites

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 ?

 

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est parce que ton fichier n'est pas encodé comme il faut, en particulier les sauts de lignes, tu utilises le format Windows (^M ou CR LF) alors que tu devrais utiliser le format Linux (LF).

Partager ce message


Lien à poster
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)

 

 

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant