--- /dev/null
+#!/bin/sh
+
+set -u
+
+# debug?
+
+if [ $# -gt 0 ] ; then
+ DOIT="echo "
+ set -x
+else
+ DOIT=""
+fi
+
+# functions
+
+die() {
+ echo "$1" >&2
+ exit 1
+}
+
+warn() {
+ echo "$1" >&2
+}
+
+# variables
+
+USERNAME=sue
+PASSWORD=hygCithOrs5
+HOSTNAME=$(hostname)
+ZONE=dyn.example.com
+FQDN=$HOSTNAME.$USERNAME.$ZONE
+NS=ns.example.com
+URL="http://dyndns.example.com/nic/update?hostname=$FQDN&myip="
+
+if [ -z "$HOSTNAME" ] ; then
+ die "No hostname found."
+fi
+
+# data
+
+# alternative: -4 icanhazip.com, -6 icanhazip.com or ipv{4,6}.icanhazip.com
+NEWIPV4=$(wget -q -O- http://ipv4.wtfismyip.com/text)
+NEWIPV6=$(wget -q -O- http://ipv6.wtfismyip.com/text)
+
+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 -q -O/dev/null --user=$USERNAME --password=$PASSWORD "${URL}${OLDIPV4}&offline=yes"
+ logger -t${0##*/} -perr -- "removing $FQDN / $OLDIPV4"
+fi
+
+# old ipv6 gone
+if [ -n "$OLDIPV6" -a -z "$NEWIPV6" ] ; then
+ $DOIT wget -q -O/dev/null --user=$USERNAME --password=$PASSWORD "${URL}${OLDIPV6}&offline=yes"
+ logger -t${0##*/} -perr -- "removing $FQDN / $OLDIPV6"
+fi
+
+# new ipv4
+if [ -n "$NEWIPV4" -a "$NEWIPV4" != "$OLDIPV4" ] ; then
+ $DOIT wget -q -O/dev/null --user=$USERNAME --password=$PASSWORD "${URL}${NEWIPV4}"
+ logger -t${0##*/} -perr -- "updating $FQDN to $NEWIPV4"
+fi
+
+# newipv6
+if [ -n "$NEWIPV6" -a "$NEWIPV6" != "$OLDIPV6" ] ; then
+ $DOIT wget -q -O/dev/null --user=$USERNAME --password=$PASSWORD "${URL}${NEWIPV6}"
+ logger -t${0##*/} -perr -- "updating $FQDN to $NEWIPV6"
+fi