If you have a VPS at Linode, then you have free Dynamic DNS. You can use that from a regular Linux machine, or from a router that runs OpenWRT.
This article describes how to setup an OpenWRT router with Linode Dynamic DNS.
First, the script itself, which goes into the file: /etc/custom/linodedns.sh
#!/bin/ash
BASE=`basename $0 .sh`
DIR=`dirname $0`
OUTPUT1=/tmp/$BASE-1.out
OUTPUT2=/tmp/$BASE-2.out
# Read the configuration file
CONF=$DIR/$BASE.conf
if [ -r "$CONF" ]; then
. $CONF
else
logger -t $BASE "Could not read configuration file: $CONF"
exit 1
fi
# External Ethernet interface
IFACE=`uci get network.wan.ifname`
# Get the current external IP address
CURRIP=`ifconfig $IFACE | grep 'inet addr' | awk '/inet addr/ {print $2}' | awk -F: '{print $2}'`
# Get the currently configured IP address in Linode's DNS
curl -sk "https://api.linode.com/?api_key=$APIKEY&action=domain.resource.list&ResourceID=$RESOURCEID&DomainID=$DOMAINID" > $OUTPUT1
RC=$?
if [ "$RC" != 0 ];then
logger -t $BASE "curl list reported error: $RC"
exit 2
fi
# Parse the output for the IP address
DNSIP=`cat $OUTPUT1 | sed -e 's/^.*"TARGET":"//' -e 's/",.*$//'`
if [ "$DNSIP" = "$CURRIP" ]; then
logger -t $BASE "External IP address has not changed. No IP update necessary. IP address: $CURRIP"
exit 0
fi
curl -sk "https://api.linode.com/?api_key=$APIKEY&action=domain.resource.update&ResourceID=$RESOURCEID&DomainID=$DOMAINID&Target=$CUR
RIP" > $OUTPUT2
RC=$?
if [ "$RC" != 0 ];then
logger -t $BASE "Curl update reported error: $RC"
exit 2
fi
# Log the IP address change
logger -t $BASE "Updated IP address from $DNSIP to $CURRIP"
Then you have to create a configuration file, with the same name as the script, except that instead of .sh its suffix is .conf, for example: /etc/custom/linodedns.conf. You need to get the following values and place them in your configuration file.
APIKEY="your-api-key-goes-here" RESOURCEID="resource-id-goes-here" DOMAINID=domainid
Finally, have the script run automatically 3 times per hour, from cron. Use crontab -e, or "Scheduled Tasks" from LuCI, and add the following lines.
# Check external IP address, and update Linode's DNS if changed 5,25,45 * * * * /etc/custom/linodedns.sh
That is it. Now your public IP address will be updated no later 20 minutes if it changes!
Most Comments
Most commented on articles ...