Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # +-----------------------------------------------------------------------------------------+
- # | Update dynamic dns zone |
- # | Jan 2012 flip hess [email protected] |
- # +-----------------------------------------------------------------------------------------+
- # generate a key: dnssec-keygen -a hmac-md5 -b 128 -n USER dnsupdate
- # Global variables:
- PATH='/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin'
- SCRIPT_PATH="${0}"
- ARGS="${#}"
- ARG1="${1}"
- ARG2="${2}"
- ARG3="${3}"
- DNSSERVERS="10.8.2.2 10.8.3.3 10.8.4.4"
- KEY="INSERTYOURKEY"
- # Functions:
- # exit function
- function die()
- {
- echo -e "Error in script: ${SCRIPT_PATH}:\n${1}"
- exit 1
- }
- # Shows usage function.
- function fUsage()
- {
- echo -e "Usage: ${SCRIPT_PATH} [add|delete|usage] [hostname] [ipaddress]"
- return 0
- }
- # check for.......
- function fCheck()
- {
- # user must be root:
- [ $(whoami) = root ] || die "User must be root!"
- [ -x /usr/bin/nsupdate ] || die "This script depends on nsupdate! Install it by typing: \"sudo apt-get install dnsutils\""
- # check for arguments:
- [ ${ARGS} = 3 ] || { fUsage ; exit 1; }
- # check for vars
- { [ ${ARG1} != add ] || [ ${ARG1} != 'delete' ]; } || { fUsage ; exit 1; }
- { [ -n ${ARG2} ] || [ -n ${ARG3} ]; } || { fUsage ; exit 1; }
- # set finishing dot
- if ( echo "${ARG2}" |grep -qE '.+\.$' ) ; then
- HOST="${ARG2}"
- else
- HOST="${ARG2}."
- fi
- # check for valid ip
- if ( echo ${ARG3} | grep -Eq '^[ 0-9 ]+\.[ 0-9 ]+\.[ 0-9 ]+\.[ 0-9 ]+$') ; then
- IP="${ARG3}"
- else
- die "Please use a VALID IP address"
- fi
- ZONE="$( echo ${HOST} | awk -F. '{ print $2"."$3"."$4" }' )"
- ARPA="$( echo ${IP} | awk -F. '{ print $4"."$3"."$2"."$1".in-addr.arpa."}' )"
- ARPAZONE="$( echo ${IP} | awk -F. '{ print $3"."$2"."$1".in-addr.arpa."}')"
- return 0
- }
- # add forward
- function fAddForward()
- {
- for SERVER in ${DNSSERVERS} ; do
- echo -e "server ${SERVER}\nkey dnsupdate ${KEY}\nzone ${ZONE}\nupdate add ${HOST} 600 IN A ${IP}\nsend\n" | nsupdate
- [ ${?} = 0 ] || { echo "Failed to update Forward for ${HOST} on ${SERVER}"; continue; }
- done
- return 0
- }
- # add reverse
- function fAddReverse()
- {
- for SERVER in ${DNSSERVERS} ; do
- echo -e "server ${SERVER}\nkey dnsupdate ${KEY}\nzone ${ARPAZONE}\nupdate add ${ARPA} 600 IN PTR ${HOST}\nsend\n" | nsupdate
- [ ${?} = 0 ] || { echo "Failed to update Reverse for ${HOST} on ${SERVER}"; continue; }
- done
- return 0
- }
- # delete forward
- function fDelForward()
- {
- for SERVER in ${DNSSERVERS} ; do
- echo -e "server ${SERVER}\nkey dnsupdate ${KEY}\nzone ${ZONE}\nupdate delete ${HOST} 600 IN A ${IP}\nsend\n" | nsupdate
- [ ${?} = 0 ] || { echo "Failed to update Forward for ${HOST} on ${SERVER}"; continue; }
- done
- return 0
- }
- # delete reverse
- function fDelReverse()
- {
- for SERVER in ${DNSSERVERS} ; do
- echo -e "server ${SERVER}\nkey dnsupdate ${KEY}\nzone ${ARPAZONE}\nupdate delete ${ARPA} IN PTR ${HOST}\nsend\n" | nsupdate
- [ ${?} = 0 ] || { echo "Failed to delete Reverse for ${HOST} on ${SERVER}"; continue; }
- done
- return 0
- }
- # The main function.
- function fMain()
- {
- case "${ARG1}"
- in
- usage)
- fUsage
- exit 1
- ;;
- delete)
- fDelForward && fDelReverse
- ;;
- add)
- fAddForward && fAddReverse
- ;;
- *)
- fUsage
- exit 1
- ;;
- esac
- return 0
- }
- # check environment:
- fCheck
- # Start the program:
- fMain "${@}"
- # Exit with previous return code:
- exit "${?}"
Advertisement
Add Comment
Please, Sign In to add comment