Using Billion routers with ddclient
I have a website at home served from a Dlink NSLU2. This would be fine but we have ADSL with a non-static IP. To overcome this I am using ddclient to update a dyndns address. I have added a CNAME redirect from mich431.net to that dyndns.org address. The dyndns TTL is 1 minute, so there should rarely be a IP cache error; ddclient updates dyndns, if required, from an internal check every minute. So a new dynamic IP should propagate in ~3 minutes max. (first check fails because of no IP, second OK + TTL)
What I did.
Created a Dyndns.org account, got an Dyndns name and edited the mich431.net
CNAME and MX records to point at that name. Then installed ddclient using
apt-get install ddclient
and followed the install prompts.
ddclient worked straight out of the box except Billion routers are not
supported :( This meant I could use a web IP lookup (why use the traffic?) or
roll my own script to echo the external IP from the router status page. I
decided to roll my on script. I started by making a
/usr/local/sbin/ip
script with the following contents.
#!/bin/bash
# /usr/local/sbin/ip
USER='username here'
PASS='password here'
IP='ip address of router'
# Billion will allow you grab the status page, unless someone else is on the
# interface, when you get the error page which doesn't match the sed pattern.
X=$(wget -qO - http://$USER:$PASS@$IP/welcome.html | grep '<td>' | \
sed 's/\(<td>\)\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\)\( <\/td>\)/\2/' \
| grep -v '<td>')
# if we got the external ip X, then echo X else fail
# ddclient handles fail as a NOT FOUND error which is ok, because the ddclient
# daemon then logs this, sends emails and stops.
if [ -n "$X" ] ; then
wget -qO /dev/null http://$USER:$PASS@$IP/logout.html
echo "IP address $X"
else
exit 1
fi
exit 0
Then all I had to do was edit the /etc/ddclient.conf to call the script
# Custom cmd to update ddclient.
use=cmd, cmd=/usr/local/sbin/ip
then test with sudo ddclient -query -verbose
, some external
checks on proxyfy.com, gmail test emails etc. and it was done.
Michael 20100211, update 20100813