Problems with dynamic IP update on ddns-scripts package with OpenDNS or DNS-O-Matic

Ok, so I have considered that this would be good to share here, I have finally managed to get the service to work correctly.
The problem lies in how the service is implemented by Cisco OpenDNS as well as in the case of DNS-O-Matic (both are part of Cisco Umbrella), the issue is that they have used exactly same credentials of the account for also the dynamic IP update service.
So they use as username the same email address with which we registered to use the service and likewise the same password, with which an @ character is necessarily incorporated in the url address and given how ddns-scripts behaves, it causes an error.

How the URL would look like:

wget -q "http://myregistered@email.com:MyPassword@updates.opendns.com/nic/update?hostname=MyNetworkName&myip=MyIP"

Then you notice the problem, first the username and second the password if you used an @, :, ^, &, `, ~, and % characters, so please AVOID USING THIS CHARACTERS ON THE PASSWORD FOR THESE KIND OF SERVICES!

What's trying to do ddns-scripts is, replacing to @ character on the username for a %40 as url link would do, like this:

wget -q "http://myregistered%40email.com:MyPassword@updates.opendns.com/nic/update?hostname=MyNetworkName&myip=MyIP"

This causes "badauth", since the server is taking the address literally.
The right command would be:

wget -q --user=myregistered@email.com --password=MyPassword "http://updates.opendns.com/nic/update?hostname=MyNetworkName&myip=MyIP"

On cURL these also happens but you may not notice it since OpenWrt doesn't has these package installed by default and ddns-scripts will not use cURL even if the package is available, you have to edit the /etc/config/ddns file and add the line "option use_curl" and set it to "1", so then you got these:
What's trying to do:

curl "http://myregistered%40email.com:MyPassword@updates.opendns.com/nic/update?hostname=MyNetworkName&myip=MyIP"

The right command would be:

curl --user myregistered@email.com:MyPassword "http://updates.opendns.com/nic/update?hostname=MyNetworkName&myip=MyIP"

In the case of DNS-O-Matic, the ddns-scripts package seems to work but only if you enable encryption support since their service only responds on https, so either you have to install the curl package (that will make OpenWrt to support https) or install the required packages independently, they would be libmbedtls12 and libustream-mbedtls (enabling again OpenWrt to understand https but with less resource consumption).

By the way, the reaction to this commands will depend on the wget version and cURL version that you're OpenWrt is using, I haven't identified yet the version but some of them they may support the ddns-scripts commands way.

1 Like