A Dynamic DNS Bash Script for FreeDNS
First, make sure you have registered an account for FreeDNS, and set up a subdomain as an A record at http://freedns.afraid.org/subdomain/
Save the contents below as dns.sh
, making sure to change /path/to/log/dns.log , <YOUR_API_KEY> , <YOUR_SUBDOMAIN>. You can get both your API Key and the domain from http://freedns.afraid.org/api/ . The domain should be something like mycooldomain.ignorelist.com (or mycooldomain.chickenkiller.com or one of the other FreeDNS domains).
You can get the full update line (https address and the full wget call, seen in the if statement below) from your FreeDNS dashboard, under Main Menu -> Dynamic DNS -> quick cron example , toward the bottom of the page.
#!/bin/bash
LOG='/path/to/log/dns.log'
echo "-----------------------" >> $LOG
echo "Running dns.sh" >> $LOG
echo $(date) >> $LOG
# get the current ip...
CURRENT_IP=$(wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//')
echo "Current IP:"$CURRENT_IP >> $LOG
#FreeDNS updater script
UPDATE_URL="https://freedns.afraid.org/dynamic/update.php?<YOUR_API_KEY>"
SUBDOMAIN="<YOUR_SUBDOMAIN>"
PREVIOUS_IP=$(nslookup $SUBDOMAIN | tail -n2 | grep A | sed s/[^0-9.]//g)
echo "Previous IP:"$PREVIOUS_IP >> $LOG
if [ "$CURRENT_IP" != "$PREVIOUS_IP" ]
then
echo "Current and previous IP differ! Updating FreeDNS..." >> $LOG
wget -q -O /dev/null $UPDATE_URL
echo "DNS updated on:"$(date) >> $LOG
fi
echo "-----------------------" >> $LOG
Crontab
Now run sudo vim /etc/crontab , adding this line at the bottom,
replacing /path/to/script/dns.sh with the path you saved dns.sh to,
and replacing <USER> with your username
*/5 * * * * <USER> /path/to/script/dns.sh