After I did a sysupgrade recently, I couldn't get ddns scripts to update the new IP at my ddns provider (dnsexit). I tried a bunch of different things to get it to work but it simply would not update. Instead it would show a previous IP from a few days previous, and sometimes a 139.99.x.x IP which is nowhere near my actual IP.
What actually finally did work was running a curl command from the router while ssh'd in, one that includes my subdomain name and an api key. I found that one-liner on my ddns provider's site, something like
curl https://api.dnsexit.com/dns/ud/?apikey=ll;longalphanumericsequence -d host=myhost.subdomain.net
Kinda made me think that, rather than using OpenWRT's canned solution for ddns updating, maybe I should craft a script from that command and run it via cron. But before going to that extent, I need to try and figure out why this update routine has stopped working on my router (rpi4 B) after sysupgrade whereas it had been working as expected since I set this device up about 4 years ago.
Despite getting the current IP updated with the curl command a few days ago I continue to see errors related to ddns updates in logs, as follows:
user.warn ddns-scripts[30947]: myddns_ipv4: Updating IP at DDNS provider failed - starting retry 4/0
Today I once again had to run the curl command to get the current IP as the router had once again reverted to the 139.99.x.x IP.
Any help troubleshooting the issue(s) here will be appreciated. Thanks
Show the recent DDNS client log.
Here's some obfuscated output that I hope will suffice for diagnosis:
161122 info : Rerun IP check at 2025-03-30 16:11
161122 : Detect current IP on 'network'
161122 : Current IP '1.2.3.4' detected on network 'WAN'
161122 : Waiting 3600 seconds (Check Interval)
171122 : Detect registered/public IP
171122 : #> /usr/bin/nslookup gajs-f0el.linkpc.net >/var/run/ddns/myddns_ipv4.dat 2>/var/run/ddns/myddns_ipv4.err
171122 : Registered IP '139.99.66.103' detected
171122 WARN : Updating IP at DDNS provider failed - starting retry 1/0
171122 : Detect current IP on 'network'
171122 : Current IP '1.2.3.4' detected on network 'WAN'
171122 : Update needed - L: '1.2.3.4' <> R: '139.99.66.103'
171122 : #> /bin/uclient-fetch -q -O /var/run/ddns/myddns_ipv4.dat -Y off 'http://update.dnsexit.com/RemoteUpdate.sv?login=myuser&password=mypwd&host=myhost.subdomain.net&myip=1.2.3.4' 2>/var/run/ddns/myddns_ipv4.err
171122 : DDNS Provider answered:
HTTP/1.1 200 OK
4=IP not changed. To save our system resources, please don't post updates unless the IP got changed.
171122 info : Update successful - IP '1.2.3.4' send
171122 info : Forced update successful - IP: '1.2.3.4' send
171122 : Waiting 3600 seconds (Check Interval)
181122 : Detect registered/public IP
181122 : #> /usr/bin/nslookup myhost.subdomain.net >/var/run/ddns/myddns_ipv4.dat 2>/var/run/ddns/myddns_ipv4.err
181124 : Registered IP '139.99.66.103' detected
181124 WARN : Updating IP at DDNS provider failed - starting retry 2/0
Consider using custom configuration instead of selecting dnsexit.com
from the drop-down.
Use the following Update URL: http://api.dnsexit.com/dns/ud/?apikey=[PASSWORD]&host=[DOMAIN]&ip=[IP]
- copy/paste it without changes.
While configuring from Luci, put your API KEY into password field and your FQDN into domain field. Put whatever you want into username field.
Install curl
and hostip
(or drill
or another similar tool) and configure certificate path as /etc/ssl/certs/ca-certificates.crt
, tick "Use HTTP Secure".
If the problem persists, show more lines of your log, see this example.
Leave the 1st octet of your IP address as it is and hide the rest if you wish.