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