Posting this, hoping it helps someone someday!
I wanted to be able to access a relative's network periodically to help with network maintenance. I had provided them an OpenWRT router all set up, ready to go - with a few additional mods. I set up a https://duckdns.org subdomain for free, and made a quick script to keep it updated. I also added my ssh key and disabled password access. Moments after they plugged it in, I could access it!
Here's the simple script I made:
Create /etc/config/duckdns.sh: (replace DUCKDNS info in the curl command)
#!/bin/sh
#let the system boot up before attempting to check the ip address...
sleep 30
#install curl dependency (in case of import after firmware update)
opkg update 2>/dev/null 1>&2
opkg install curl 2>/dev/null 1>&2
OLDIP=''
while :
do
#capture interface addresses
IP=$(ip addr | grep 'inet')
if [ "$IP" != "$OLDIP" ]; then
#change detected! Update duckdns.org
OLDIP="$IP"
curl "https://www.duckdns.org/update?domains=<DUCKDNS SUBDOMAIN>&token=<DUCKDNS TOKEN>&ip=" 2>/dev/null 1>&2
fi
#Repeat the check after 2 minutes
sleep 120
done
Then add this to /etc/rc.local:
#Script for updating duckdns.org subdomain
/etc/config/duckdns.sh &
This is dirt simple and has been working for months. I am ignoring the OK/KO return from curl, because frankly, if its not 'OK', I can't do anything remotely anyhow...
The beauty of this method is that it never has to reach out to the internet unless a change has occurred.