Having run into problems with several dynamic DNS providers (bad clients, unreliable service, ...) my own dyndns had to be implemented. Unfortunatly the only server solution found was quite heavyweight. So instead of writing my own dyndns based client + this heavyweight beast I went for DNS NSupdates.
The config of my Nameserver was quickly adjusted and the first update with "nsupdate" followed at a whimp. Now I could write my own Nsupdates based client that has the features I want:
- event-driven updates. There's pppd's ip-up script that knows the IP. Why poll the interface config?
- cope with network issues. A single attempt might fail - retry until DNS returns the the new IP
- pick the latest IP. What happes when the ip-up gets called again (link dropped and re-established) before the last attempt succeeded?
- lean config. What else do you need beyond your hostname + a "password"
- easy to adopt. You insist on polling interface configs? Fine! Use cron and tell the client about your findings.
As a result there's the "nspamper" client daemon. Its configured with your dynamic hostname + your TSIG key. The "nspamper-change" scriptlet tells it about the IP it should put into DNS. While this "wanted" doesn't match what DNS returns "nspamper" keeps retrying to update.
For now the daemon sends the nsupdates to the master listed in the dynamic hostname's zone's SOA.
I'm planning to make it look for SRV records within the zone and update all listed nameservers individually. In addition there'll be a periodic job that "syncs" all NS databases.
In addition to this fully fleged client there's also a dyn2nsup cgi that offers a dyndns.org like API and "translates" this to nsupdates.
To simplify server management I wrote the "ddns" script
- first public release
0.0.6 2008-12-30 23:13
- doc updates (README, man-pages)
- added command-line options (incl. --help)
- made all filenames configurable (commandline + config) to allow multiple instances.
- moved fallback for stopped nspamper into nspamper-change
Download / Code:In case you're interested in this, you can find the source in the files folder or feel free to drop me a note.
Browse the git repository with the latest development changes on github.
Git clone url: