Like most home internet users, I have a dynamic IP address and I use Dyndns to map it to a static host name so that I can remotely access my router (and computers behind it) without having to know its current IP address.
My router is a LinkSys WRT54G, which is running the OpenWrt custom firmware. OpenWrt comes with a package called ez-ipupdate, which can be configured to automatically update your Dyndns host record whenever the router’s address changes. For detailed instructions, see the DDNSHowTo page in the OpenWrt wiki.
The instructions in OpenWrt’s wiki are pretty good but they don’t deal with the situation where the time between address changes is greater than 30 days.
This is a problem if you are using Dyndns’s free Dynamic DNS service. The Dynamic DNS service FAQ states the you must periodically “touch” the host record, even if the address hasn’t changed, or your host record will be deleted. Here is the policy as at the time of writing this blog post:
A Dynamic DNS hostname only needs to be updated when your IP address has changed. Any updates more frequently than this – from the same IP address – will be considered abusive by the update system and may result in your hostname becoming blocked. Any script which runs periodically should check to make sure that the IP has actually changed before making an update, or the host will become blocked. An exception to this is for users with mostly static IP addresses; you may update 24-35 days after your previous update with the same IP address to “touch” the record and prevent it from expiring. Users will receive an e-mail notification if a host has been unchanged for 30 days, hosts are deleted after 35 days without being updated unless you’ve purchased upgrade credit(s).
Here is an example of the e-mail notification (i.e. “nag” email) that you get when you haven’t touched the host record in 30 days:
A hostname you have registered with Dynamic Network Services at DynDNS, SomeDynamicHostName.dyndns.org, with current IP address 192.168.1.1, will expire in the next 5 days. This expiration is due to an automatic timeout; your host has not been updated for 30 days, and hosts are removed after not being updated for 35 days. This is our policy to prevent a stagnant DNS system.
Users with static IP addresses can use the Static DNS system, which does not have this timeout.You can “touch” your hostname and prevent it from being deleted simply by performing a manual, or forced, update. The system will not consider this
single update abusive. If you wish to allow your hostname to expire,
simply do nothing. You will receive a notification when this occurs.You can also purchase an account upgrade credit at https://www.dyndns.com/+upgrades/add.html – users with any credits on their account are exempt from this expiration policy.
https://www.dyndns.com/+dyndns/SomeDynamicHostName.dyndns.org is a direct URL to a page where you can manually update your hostname. Simply submit the form (by clicking the “Modify Host” button), and your hostname will not expire unless it is left without updates for another 35 days.
Please DO NOT contact the support department and ask to have your host updated. Following the instructions above is the ONLY way to keep your host from being removed by our automated system.
If you do not use your account any longer, please delete it using the tools at . We regret seeing you go.
Replies to this e-mail address will be discarded. Please contact the support department at support@dyndns.com if you have questions, queries, or comments.
Sincerely,
The DynDNS Team
To prevent the deletion of my host record, I created a cron job that touches the host record on the first day of each month. To create a cron job in OpenWrt, you must put a job definition in the file /etc/crontabs/root. Here is my job definition (must be all on one line):
1 0 1 * * rm -f /tmp/ez-ipupdate.cache
; /usr/sbin/ez-ipupdate -c /etc/ez-ipupdate.conf
> /tmp/ez-ipupdate-cron.log 2>&1
Note that without the first command, rm -f /tmp/ez-ipupdate.cache, ez-ipupdate will not touch the record at dyndns.org and will instead show the message “no update needed at this time”. So, the first command it critical to force a “touch” of the record. Without the first command, the log file /tmp/ez-ipupdate-cron.log would show the following, which is NOT what we want:
ez-ipupdate Version 3.0.11b8
Copyright (C) 1998-2001 Angus Mackay
no update needed at this time
With the first command, you should see this in the log file, which IS what we want:
ez-ipupdate Version 3.0.11b8
Copyright (C) 1998-2001 Angus Mackay
connected to members.dyndns.org (63.208.196.95) on port 80
members.dyndns.org says that your IP address has not changed since the last update
Even though it says “your IP address has not changed” it has still “touched” the record, which is what we want.
If this tip helped you, please leave me a comment!
Update: Here is a better solution.




its work fine only if you update cron with:
1 0 1 * * rm -f /tmp/ez-ipupdate.cache
; /usr/sbin/ez-ipupdate -c /etc/ez-ipupdate.conf -i [your wan interface] > /tmp/ez-ipupdate-cron.log 2>&1
Hey I just started running into this same issue after switching from a custom DynDNS script that went haywire and started getting me banned. So your solution really helped! I customized it so I call my init.d script instead of the binary directly so I can keep all options in one place. Thanks!
By using this as-is – simply scheduled to run on the first day of every month – you may still get banned for "abusive updates". Assume that your IP was just updated on the 25th of a month. This solution will cause another update to be forced on the 1st with the same IP address, which does not match the required minimum of 25 days.