flipje

Dynamic dns update script

Jan 7th, 2012
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 3.87 KB | None | 0 0
  1. #!/bin/bash
  2. # +-----------------------------------------------------------------------------------------+
  3. # | Update dynamic dns zone                                                                 |
  4. # | Jan 2012 flip hess [email protected]                                                  |
  5. # +-----------------------------------------------------------------------------------------+
  6. # generate a key: dnssec-keygen -a hmac-md5 -b 128 -n USER dnsupdate
  7.  
  8. # Global variables:
  9.  
  10. PATH='/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin'
  11. SCRIPT_PATH="${0}"
  12. ARGS="${#}"
  13. ARG1="${1}"
  14. ARG2="${2}"
  15. ARG3="${3}"
  16.  
  17. DNSSERVERS="10.8.2.2 10.8.3.3 10.8.4.4"
  18. KEY="INSERTYOURKEY"
  19.  
  20. # Functions:
  21.  
  22.   # exit function
  23.   function die()
  24.   {
  25.     echo -e "Error in script: ${SCRIPT_PATH}:\n${1}"
  26.     exit 1
  27.   }
  28.  
  29.   # Shows usage function.
  30.   function fUsage()
  31.   {
  32.     echo -e "Usage: ${SCRIPT_PATH} [add|delete|usage] [hostname] [ipaddress]"
  33.     return 0
  34.   }
  35.  
  36.   # check for.......
  37.   function fCheck()
  38.   {
  39.     # user must be root:
  40.     [ $(whoami) = root ] || die "User must be root!"
  41.  
  42.     [ -x /usr/bin/nsupdate ] || die "This script depends on nsupdate! Install it by typing: \"sudo apt-get install dnsutils\""
  43.  
  44.     # check for arguments:
  45.     [ ${ARGS} = 3 ] || { fUsage ; exit 1; }
  46.    
  47.     # check for vars
  48.     { [ ${ARG1} != add ] || [ ${ARG1} != 'delete' ]; } || { fUsage ; exit 1; }
  49.     { [ -n ${ARG2} ] || [ -n ${ARG3} ]; } || { fUsage ; exit 1; }
  50.  
  51.     # set finishing dot
  52.     if ( echo "${ARG2}" |grep -qE '.+\.$' ) ; then
  53.       HOST="${ARG2}"
  54.     else
  55.       HOST="${ARG2}."
  56.     fi
  57.    
  58.     # check for valid ip
  59.     if ( echo ${ARG3} | grep -Eq '^[ 0-9 ]+\.[ 0-9 ]+\.[ 0-9 ]+\.[ 0-9 ]+$') ; then
  60.       IP="${ARG3}"
  61.     else
  62.       die "Please use a VALID IP address"
  63.     fi
  64.    
  65.     ZONE="$( echo ${HOST} | awk -F. '{ print $2"."$3"."$4" }' )"
  66.     ARPA="$( echo ${IP} | awk -F. '{ print $4"."$3"."$2"."$1".in-addr.arpa."}' )"
  67.     ARPAZONE="$( echo ${IP} | awk -F. '{ print $3"."$2"."$1".in-addr.arpa."}')"
  68.  
  69.     return 0
  70.   }
  71.  
  72.   # add forward
  73.   function fAddForward()
  74.   {
  75.     for SERVER in ${DNSSERVERS} ; do
  76.       echo -e "server ${SERVER}\nkey dnsupdate ${KEY}\nzone ${ZONE}\nupdate add ${HOST} 600 IN A ${IP}\nsend\n" | nsupdate
  77.       [ ${?} = 0 ] || { echo  "Failed to update Forward for ${HOST} on ${SERVER}"; continue; }
  78.     done
  79.  
  80.     return 0
  81.   }
  82.  
  83.   # add reverse
  84.   function fAddReverse()
  85.   {
  86.     for SERVER in ${DNSSERVERS} ; do
  87.       echo -e "server ${SERVER}\nkey dnsupdate ${KEY}\nzone ${ARPAZONE}\nupdate add ${ARPA} 600 IN PTR ${HOST}\nsend\n" | nsupdate
  88.       [ ${?} = 0 ] || {  echo  "Failed to update Reverse for ${HOST} on ${SERVER}"; continue; }
  89.     done
  90.  
  91.     return 0
  92.   }
  93.  
  94.   # delete forward
  95.   function fDelForward()
  96.   {
  97.     for SERVER in ${DNSSERVERS} ; do
  98.       echo -e "server ${SERVER}\nkey dnsupdate ${KEY}\nzone ${ZONE}\nupdate delete ${HOST} 600 IN A ${IP}\nsend\n" | nsupdate
  99.       [ ${?} = 0 ] || { echo  "Failed to update Forward for ${HOST} on ${SERVER}"; continue; }
  100.     done
  101.  
  102.     return 0
  103.   }
  104.  
  105.   # delete reverse
  106.   function fDelReverse()
  107.   {
  108.     for SERVER in ${DNSSERVERS} ; do
  109.       echo -e "server ${SERVER}\nkey dnsupdate ${KEY}\nzone ${ARPAZONE}\nupdate delete ${ARPA} IN PTR ${HOST}\nsend\n" | nsupdate
  110.       [ ${?} = 0 ] || { echo  "Failed to delete Reverse for ${HOST} on ${SERVER}"; continue; }
  111.     done
  112.  
  113.     return 0
  114.   }
  115.  
  116.   # The main function.
  117.   function fMain()
  118.   {
  119.     case "${ARG1}"
  120.     in
  121.       usage)
  122.         fUsage
  123.         exit 1
  124.         ;;
  125.       delete)
  126.         fDelForward && fDelReverse
  127.         ;;
  128.       add)
  129.         fAddForward && fAddReverse
  130.         ;;
  131.       *)
  132.         fUsage
  133.         exit 1
  134.         ;;
  135.     esac
  136.  
  137.     return 0
  138.   }
  139.  
  140.  # check environment:
  141.   fCheck
  142.  
  143.  # Start the program:
  144.   fMain "${@}"
  145.  
  146.  # Exit with previous return code:
  147.   exit "${?}"
Advertisement
Add Comment
Please, Sign In to add comment