Évekig a DynDns ingyenes szolgáltatását használtam arra, hogy az otthoni gépem bárhonnan elérhessem valami fix domain név alatt. A DynDns azonban először csak rettentő idegesítővé tette az ingyenes felhasználóknak a szolgáltatást (havonta meg kellett erősíteni, hogy a fiókot használod még), majd most végül teljesen meg is szüntette. Márpedig a fizetős account áráért már egy rendes domaint vehetek, végződéstől függően akár évekre is. Hát, köszi nem. Van még egy másik jól használható dinamikus DNS szolgáltatás, ami ingyenes, a no-ip.org, de nagyon bénák az ingyenesen használható domain-jeik, ha nem muszáj, nem akartam használni. Ekkor futottam bele egy jópofa, költséghatékony megoldásba. Nekem a weblapjaim domainjei már pár éve a Godaddy kezelésében vannak, így nagyon megörültem, mikor belebotlottam abba a megoldásba, amit most veletek is megosztanék.
Van egy python program, amivel át lehet írni a Godaddy-n a domain-ek DNS Zone File-ját. Ami azért jó, mert így csak felvettem egy aldomaint pl. a Raspberry-mnek Godaddy-n az egyik domainem alá, és cron-nal beütemeztem egy szkriptet, ami óránként frissíti a hozzá tartozó IP-t, ha az változott. A dolog így néz ki:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #!/usr/bin/env python import logging import pif import pygodaddy logging.basicConfig(filename='/var/log/godaddy.log', format='%(asctime)s %(message)s', level=logging.INFO) GODADDY_USERNAME="user" GODADDY_PASSWORD="jelszo" client = pygodaddy.GoDaddyClient() client.login(GODADDY_USERNAME, GODADDY_PASSWORD) for domain in ["domainem.com"]: dns_records = client.find_dns_records(domain) public_ip = pif.get_public_ip() logging.debug("Domain '{0}' DNS records: {1}".format(domain, dns_records)) if public_ip != dns_records[2].value: client.update_dns_record("aldomain.domainem.com", public_ip) logging.info("Domain '{0}' public IP set from '{1}' to '{2}'".format(domain, dns_records[2].value, public_ip)) |
Mi történik? Tegyük fel, hogy az aldomain.domainem.com IP-jét akarom frissíteni, ez a Godaddy DNS Zone File “A” részében a 3. sor. A program beolvassa a dns_records változóba az “A” bejegyzéseket, 0-val kezdve ugyebár az indexelést. Lekéri a publikus IP-nket. Loggol, majd ha a DSN Zone File 3. sorának IP-je (vagyis a dns_domains[2] értéke) nem egyezik az aktuális publikus IP-nkkel, akkor az új IP-vel felülírja az aldomain.domainem.com IP-jét. Kicsit nyakatekert, de műxik szépen.
Van hozzá egy bash szkript is, amivel meg lehet hívni egy kis elszeparált virtuális python környezetben futtatva:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #!/bin/bash WANIP=`dig +short myip.opendns.com @resolver1.opendns.com` touch /tmp/godaddy_lastip if [[ "$(cat /tmp/godaddy_lastip)" = "$WANIP" ]]; then exit 0; fi OLD_PWD=$PWD ROOT_DIR=$(dirname $0) cd $ROOT_DIR if [ ! -d .venv27 ] ; then curl -O https://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.9.tar.gz tar xvfz virtualenv-1.9.tar.gz python virtualenv-1.9/virtualenv.py .venv27 fi source .venv27/bin/activate pip install -q --upgrade pif pygodaddy ./godaddy.py && echo $WANIP > /tmp/godaddy_lastip deactivate cd $OLD_PWD |
Köszönet az eredeti szkriptért Sascha-nak. Én már kicsit átmókoltam mindkettőt 🙂
2 Comments