#!/bin/sh # save as /usr/local/bin/tdyndns set -u # debug? if [ $# -gt 0 ] ; then DOIT="echo I: " set -x else DOIT="" fi # functions die() { echo "E: $1" >&2 exit 1 } warn() { echo "W: $1" >&2 } # variables USERNAME=sue PASSWORD=hygCithOrs5 ZONE=dyn.example.com NS=ns.example.com WEB=dyndns.example.com HOSTNAME=$(hostname) FQDN=$HOSTNAME.$USERNAME.$ZONE URL="http://$WEB/nic/update?hostname=$FQDN&myip=" WGET="wget -q --tries=2 --timeout=5" if [ -z "$HOSTNAME" ] ; then die "No hostname found." fi # data NEWIPV4=$($WGET -O- http://ipv4.wtfismyip.com/text || $WGET -O- http://ipv4.icanhazip.com) NEWIPV6=$($WGET -O- http://ipv6.wtfismyip.com/text || $WGET -O- http://ipv6.icanhazip.com) if command -v dig >/dev/null ; then OLDIPV4=$(dig -t a +short $FQDN @$NS) OLDIPV6=$(dig -t aaaa +short $FQDN @$NS) fi OLDIPV4=${OLDIPV4:-""} OLDIPV6=${OLDIPV6:-""} # actions # old ipv4 gone if [ -n "$OLDIPV4" -a -z "$NEWIPV4" ] ; then $DOIT $WGET -O/dev/null --user=$USERNAME --password=$PASSWORD "${URL}${OLDIPV4}&offline=yes" $DOIT logger -t${0##*/} -perr -- "removing $FQDN / $OLDIPV4" fi # old ipv6 gone if [ -n "$OLDIPV6" -a -z "$NEWIPV6" ] ; then $DOIT $WGET -O/dev/null --user=$USERNAME --password=$PASSWORD "${URL}${OLDIPV6}&offline=yes" $DOIT logger -t${0##*/} -perr -- "removing $FQDN / $OLDIPV6" fi # new ipv4 if [ -n "$NEWIPV4" -a "$NEWIPV4" != "$OLDIPV4" ] ; then $DOIT $WGET -O/dev/null --user=$USERNAME --password=$PASSWORD "${URL}${NEWIPV4}" $DOIT logger -t${0##*/} -perr -- "updating $FQDN to $NEWIPV4" fi # newipv6 if [ -n "$NEWIPV6" -a "$NEWIPV6" != "$OLDIPV6" ] ; then $DOIT $WGET -O/dev/null --user=$USERNAME --password=$PASSWORD "${URL}${NEWIPV6}" $DOIT logger -t${0##*/} -perr -- "updating $FQDN to $NEWIPV6" fi