Ok, dann klapp ich doch mal meine Script-Sammlung auf, ich benutze sowas schon seit einiger Zeit auf meinem Home-Server.
Code:
#!/bin/bash
# Default-Variablen setzen
TESTDNSSERVER='8.8.8.8'
SYSLOGTAG="DYNDNS"
DynURL='false'
SyncURL='false'
if [ -t 0 ]; then
# Aufruf vom Terminal
if [ $# -lt 1 ]; then
/bin/echo "usage: $0 DynURL [SyncURL]"
exit 2
fi
DynURL=$1
if [ $# -eq 2 ]; then
SyncURL=$2
fi
else
# Aufruf aus Cron
if [ $# -lt 1 ]; then
/usr/bin/logger -s -t "$SYSLOGTAG" -- "Wrong usage: $[*]"
/bin/echo "usage: $0 ProfilFile[s]"
exit 2
fi
if [ $# -eq 1 ]; then
if [ -e $1 ]; then
. "$1"
else
/usr/bin/logger -s -t "$SYSLOGTAG" -- "File ${1} does not exist"
exit 3
fi
fi
fi
if [ "${DynURL}" == 'false' ]; then
exit 1
fi
# IPs auslesen
CURRENTIP=`/usr/bin/w3m myip.is | /bin/grep -o -m1 -e'[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' 2> /dev/null`
#CURRENTIP=`wget -q -O- ipecho.net/plain`
DYNIP=`/usr/bin/nslookup $DynURL $TESTDNSSERVER | /bin/grep -A 1 'Name:' | /bin/grep -o -m1 -e'[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'`
#DYNIP=`host $DynURL $TESTDNSSERVER | awk '/has address/ {print $4}'`
/bin/echo "Your IP: ${CURRENTIP}"
/bin/echo "$DynURL IP: ${DYNIP}"
# IPs vergleichen
if [ "${CURRENTIP}" == "${DYNIP}" ]; then
/bin/echo "IPs are the same"
exit 0
fi
# Fehlermeldung ausgeben
if [ -t 0 ]; then
/bin/echo "IPs are NOT the same"
if [ "${SyncURL}" == 'false' ]; then
exit 1
fi
else
/usr/bin/logger -s -t "$SYSLOGTAG" -- "IPs for ${DynURL} are NOT the same: ${CURRENTIP} ${DYNIP}"
/usr/bin/logger -s -t "$SYSLOGTAG" -- "Trying to correct"
fi
# IP updaten
/bin/echo "Trying to correct"
/usr/bin/w3m "$SyncURL" 2> /dev/null
exit 1
Die Angabe des DNS-Servers ist bei mir nötig, weil ich LAN-Intern die Domain mit einem eigenen DNS auf die LAN-IP auflösen lasse.
Das Script unterscheidet ob es per Cron oder aus einer Shell heraus aufgerufen wurde. So kann man das gleiche Script für einen kurzen Test-Aufruf benutzen ./dynipcheck.sh my.dyndns.address.tld sagt einem dann auf der Shell ganz schnell ob die IPs passen. Oder man übergibt dem Script eine Config-Datei in folgendem Format:
Code:
DynURL='my.dyndns.address.tld'
SyncURL='http://freedns.afraid.org/dynamic/update.php?blablabla'
Das Script lasse ich seit, öhh, wie lange eigentlich? Mindestens schon ein Jahr, vermutlich länger, per Cron alle 10 Minuten laufen. Funktioniert bisher sehr zuverlässig. Lediglich ipecho.net ist manchmal nicht zu erreichen, weswegen ich das Monster von myip.is eingebaut habe. Aber Foobars Idee zu prüfen ob die Anfrage überhaupt geklappt hat, werde ich glaub ich auch noch übernehmen
Der Cron-Aufruf sieht bei mir dann so aus:
Code:
*/10 * * * * dyndnssync /usr/local/bin/dynipcheck.sh "/usr/local/etc/dynipcheck/my.dyndns.address.tld.conf" 2> /dev/null 1> /dev/null