76 lines
2.4 KiB
ReStructuredText
76 lines
2.4 KiB
ReStructuredText
DNS dynamique avec l'api d'online.net et de python
|
|
##################################################
|
|
|
|
:date: 2021-10-27 21:00
|
|
:modified: 2021-10-27 21:00
|
|
:tags: DNS, API, python
|
|
:category: network
|
|
:slug: dyndns_online
|
|
:authors: Milka64
|
|
:summary: Comment faire du DNS dynamique avec online.net et python
|
|
:status: draft
|
|
|
|
|
|
Cette année j'ai été obligé de changer de FAI, je suis passé chez Orange et j'ai (re)découvert les joies d'une ip dynamique...
|
|
|
|
Étant auto-hebergé, il m'a fallu trouvé une solution.
|
|
|
|
Solutions
|
|
---------
|
|
|
|
J'ai bien commencé à chercher des solution de dynDNS mais je me suis vite rendu compte que ça ne me convenait pas (panne à répétition, temps de MAJ, etc ...).
|
|
|
|
Ensuite, je me suis dit que j'allais me monter un bind auto-hebergé mais par manque de temps, j'ai mis cette solution de coté.
|
|
|
|
Et par le plus grand des hasard en mettant à jour une entrée DNS, je me suis rendu compte qu'Online avait une API pour gérer ses services.
|
|
|
|
Dyndns.py
|
|
---------
|
|
|
|
J'ai donc écrit `ce petit script <https://gitlab.com/Milka64/dyndns_online.net>`_ (qui est utilisable par tous) dont je vais détailler les differentes parties.
|
|
|
|
fonction args
|
|
~~~~~~~~~~~~~
|
|
|
|
Parse les argument du scripts
|
|
|
|
.. code-block::python
|
|
|
|
def get_args():
|
|
"""
|
|
parse agrs
|
|
"""
|
|
parser = argparse.ArgumentParser(description="Update dns zone with online.net API")
|
|
group = parser.add_mutually_exclusive_group()
|
|
group.add_argument("-v", "--verbose", action="store_true")
|
|
group.add_argument("-q", "--quiet", action="store_true")
|
|
parser.add_argument("-c", "--clean", help="clean old unused zones", action="store_true")
|
|
parser.add_argument("-t", "--token", help="token's API (https://console.online.net/fr/api/access)")
|
|
parser.add_argument("-u", "--url", help="url to get public ip, default=http://ifconfig.me", default="http://ifconfig.me")
|
|
parser.add_argument("-r", "--records", help="records to update, comma separated list")
|
|
parser.add_argument("domain", help="domain to update")
|
|
return parser.parse_args()
|
|
|
|
|
|
fonction clear
|
|
~~~~~~~~~~~~~~
|
|
|
|
Éfface les version innutilisé
|
|
|
|
fonction update
|
|
~~~~~~~~~~~~~~~
|
|
|
|
Crée une nouvelle zone, la peuple (avec les entrées de la version active) et l'active.
|
|
|
|
main
|
|
~~~~
|
|
|
|
Appelé lors de l'éxecution du scipt
|
|
|
|
BONUS : acme.sh + api online
|
|
----------------------------
|
|
|
|
En me documentant sur l'api d'online, je me suis rendu compte qu'acme.sh permet d'utiliser l'api d'Online.
|
|
|
|
|