Szegény ember DynDns-e Godaddy-vel

É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 :)

If you enjoyed this post, please consider leaving a comment or subscribing to the RSS feed to have future articles delivered to your feed reader.
This entry was posted in Egyéb, Shell szkriptelés and tagged , , , . Bookmark the permalink. Post a comment or leave a trackback: Trackback URL.

2 Comments

  1. Posted 2014-04-21 at 07:57 | Permalink

    Köszi a tippet. Kérdezik a hozzáértők, hogy mekkora a TTL ideje ilyenkor?

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>