dyndns update script
Um mein NAS von überall zu erreichen benutze ich den kostenlosen Dienst von www.dyndns.org und normalerweise hat das Update der IP-Adresse immer mein Router übernommen. Allerdings habe ich ja seit einiger Zeit einen neuen Router im Einsatz und irgendwie haut mit dem das automatische Aktualisieren nicht mehr so ganz hin. Im Log stand heute übrigens das hier:
Sun Sep 19 21:15:27 2010 - WAN IP changed to 87.122.71.49, updating to dynamic DNS provider
Sun Sep 19 21:15:28 2010 - Successfully updated dynamic DNS entry for *******.dyndns.org good 127.0.0.1
Scheint also irgendwie nen Problem in der Firmware zu sein...
Aber auch mein NAS hat einen Client für dyndns.org mit an Bord. Also hab ich es ein paar Tage mit dem versucht. Der hat wohl aber keine "prüfe ob neue IP-Adresse" Funktion mit eingebaut. Denn recht schnell habe ich von dyndns eine Email bekommen, das die Update-Intervalle mit der selben IP sind und das der Account geblockt wurde. Also auch das wieder abgeschaltet.
Heute Also habe ich dann ein kleines Shellscript geschrieben, das via cronjob auf dem NAS aufgerufen wird. Mal sehen, wie das klappt.
Hier das Script:
#!/bin/sh
# config
dyndns_user=xxxxx
dyndns_pass=xxxxx
#notify_url=http://xxxxxxxx/mailme.php
dyndns_domain=dyndns.org
dyndns_account=$dyndns_user.$dyndns_domain
dyndns_url=http://$dyndns_user:$dyndns_pass@members.dyndns.org/nic/update?hostname=$dyndns_account
ipcheck_url=http://www.whatismyip.org/
last_ip_file=/tmp/$dyndns_account.last
this_ip_file=/tmp/$dyndns_account.now
status_file=/tmp/$dyndns_account.status
# check, if there is an old ip
# if yes, read it
if [ -f $last_ip_file ]; then
last_ip=`cat $last_ip_file`
else
last_ip="0.0.0.0"
fi
# get the current ip
wget -q -O $this_ip_file $ipcheck_url
# and read it
this_ip=`cat $this_ip_file`
if [ $this_ip = $last_ip ]; then
echo current ip is $this_ip, last ip was $last_ip - no update needed
# notify if $notify_url != empty
if [ ! -z "$notify_url" ]; then
wget -q -O /dev/null "$notify_url?ip=$this_ip&status=no-update"
fi
else
echo current ip is $this_ip, last ip was $last_ip - updating...
# update dyndns
wget -q -O $status_file $dyndns_url
status=`cat $status_file`
echo status: $status
# write current ip to file for next check
cp $this_ip_file $last_ip_file
# notify if $notify_url != empty
if [ ! -z "$notify_url" ]; then
wget -q -O /dev/null "$notify_url?ip=$this_ip&status=$status"
fi
fiDas ich beim starten des NAS's automatisch zu den cronjobs hinzufügen lasse:
echo "00 06 * * * /ffp/bin/dyndns_update.sh&">>/var/spool/cron/crontabs/rootZur schnellen Erklärung:
Das Script holt sich die aktuelle IP von www.whatismyip.org, prüft ob diese sich von der vorherigen unterscheidet und wenn das der Fall ist, gibt es ein Update bei dyndns. Eigentlich nichts besonders...
Ach ja, wer copy & paste nicht mag, der kann das Script hier herunterladen.
Update: War wohl doch ein Problem der Firmware. Nach einem erneutem flashen der Firmware brauchte ich mein Script nicht mehr. Doch auch wenn das Problem sich erledigt hat, bevor ich diesen Artikel veröffentlicht hatte, ist er vielleicht anderen hilfreich.
