Friday, November 28, 2014

FreeDNS Cron Update


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