Dead Simple Dynamic DNS Updater
I’d been messing with ddclient, trying to get things to play nicely with DNS-O-Matic, Tunnelbroker and Hurricane Electric’s own dynamic DNS system. Problem was, although everything was configured correctly it still wouldn’t update my DNS! It worked when I told it to, but when the IP genuinely changed, it all went wrong.
It turns out that when my IP changed, ddclient was indeed trying to update things. However, it was trying to do it over the IPv6 tunnel which, due to the altered IP address, was now broken. And I could find no way in the config to specify that the tunnel should be updated first, over IPv4. Hmm.
So, I sacked off ddclient and went for the world’s simplest dynamic DNS client. A bash script and curl.
Most of the dynamic DNS services have a simple HTTP method for updating. Some have HTTPS, so you’re not waving your password around in clear text. Switching to an IPv4-only updating mechanism is as simple as this:
Loading ‘ddupd’ from GitHub...
Blam! The script runs through in order, updating the tunnel first. Curl is being told to run over IPv4 (the -4 switch) and not to worry about certificates (the -k switch). Oh, and not to go on about it (the -s switch). There’s a simple little variable length check, just to make sure we’re not being fed something totally bogus for the IP address, and we don’t attempt to update if the IP hasn’t changed. Except for one cheeky ‘heartbeat’ attempt at 5am.
Because I’m running this on Mac OS X Server, I use this launchd job in
Loading ‘com.ddupd.update.plist’ from GitHub...
It’s very straightforward; just runs every 5 minutes.
And that’s really all there is to it. It took me way longer to write the previous article than to write this script, so I wish I’d not bothered with ddclient from the off. Typically, since setting the script up I think my IP has changed… ooh, once, maybe?