Initial commit.
This commit is contained in:
11
dhclient-dnsupdate.sh
Executable file
11
dhclient-dnsupdate.sh
Executable file
@@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
dnsupdate_config() {
|
||||||
|
/usr/bin/dnsupdate "${interface}" "${new_ip_address}"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
dnsupdate_restore() {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
427
dnsupdate
Executable file
427
dnsupdate
Executable file
@@ -0,0 +1,427 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Dynamic DNS update script using ISC nsupdate
|
||||||
|
# Copyright (c) 2015 Zoran Pericic (zpericic@netst.org) all rights reserved.
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License, version 2,
|
||||||
|
# as published by the Free Software Foundation.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# There is three type of options:
|
||||||
|
# DDNS_*
|
||||||
|
# - Global default if in /etc/sysconfig/network
|
||||||
|
# - First hostname options if in ifcfg- of conection.
|
||||||
|
# - Default for other hostnames.
|
||||||
|
# DDNS*_ (eg. DDNS0_HOSTNAME) - Where * is number starting from 0
|
||||||
|
# - Options for updating specific hostname.
|
||||||
|
# - DDNS*_HOSTNAME must be set to activate update.
|
||||||
|
# DDNS_PTR* -
|
||||||
|
# - Options for updating PTR record.
|
||||||
|
# - Have all options except ZONE and REPLACE as DDNS*
|
||||||
|
#
|
||||||
|
# Valid variables are:
|
||||||
|
# DDNS=yes|no
|
||||||
|
# Run Dynamic DNS update (default:yes if not public address).
|
||||||
|
# DDNS_HOSTNAME
|
||||||
|
# Hostname to update. Defaults to DHCP_HOSTNAME, HOSTNAME and hostname.
|
||||||
|
# DDNS*_HOSTNAME
|
||||||
|
# Hostname to update.
|
||||||
|
# DDNS*_ZONE
|
||||||
|
# Zone to update (default: from hostname).
|
||||||
|
# DDNS*_TTL
|
||||||
|
# Record TTL (default:300).
|
||||||
|
# DDNS*_REPLACE
|
||||||
|
# Delete old records (default: yes).
|
||||||
|
# DDNS*_SERVER
|
||||||
|
# Server to send updates (default: hostname zone SOA).
|
||||||
|
# DDNS*_TCP
|
||||||
|
# Use TCP protocol for update (default: no, except for PTR).
|
||||||
|
# DDNS*_GSS_TSIG=yes|no
|
||||||
|
# "no" to disable GSS-TSIG. Default authentification type if not tcp and other
|
||||||
|
# authentification is set and kinit runned succesfully. If not nsupdate is
|
||||||
|
# called without authentification.
|
||||||
|
# DDNS*_GSS_KEYTAB="filename"
|
||||||
|
# Kerberos keytab filename with credential
|
||||||
|
# DDNS*_GSS_PRINCIPAL="principal"
|
||||||
|
# GSS Principal (eg. 'host/example.com')
|
||||||
|
# DDNS*_TSIG_FILE=filename
|
||||||
|
# Filename of key file which containing a named.conf-format key statement
|
||||||
|
# DDNS*_TSIG_KEY_TYPE
|
||||||
|
# Name of the key algorithm (default: hmac-md5)
|
||||||
|
# DDNS*_TSIG_KEY_NAME
|
||||||
|
# Key name
|
||||||
|
# DDNS*_TSIG_KEY_SECRET
|
||||||
|
# Base64 encoded shared secret
|
||||||
|
#
|
||||||
|
# There is four way to authentificate:
|
||||||
|
# 1. GSS-TSIG authentification (default)
|
||||||
|
# Set DDNS*_GSS_TSIG=yes or don't set any authenctification.
|
||||||
|
# 2. TSIG authentification using file
|
||||||
|
# Set DDNS*_TSIG_FILE to key file.
|
||||||
|
# 3. TSIG authentification with key
|
||||||
|
# Set DDNS*_TSIG_KEY_NAME and DDNS*_TSIG_KEY_SECRET and optionaly
|
||||||
|
# DDNS*_TSIG_KEY_TYPE.
|
||||||
|
# 4. No authentifiaction
|
||||||
|
# Used if DDNS*_GSS_TSIG=no or DDNS*_GSS_TSIG not set and keytab
|
||||||
|
# not found.
|
||||||
|
#
|
||||||
|
# Update PTR
|
||||||
|
#
|
||||||
|
# DDNS_PTR=yes|no
|
||||||
|
# "no" to disable update of PTR record (default: yes).
|
||||||
|
# DDNS_PTR_HOSTNAME
|
||||||
|
# Hostname to use for PTR record. Defaults to DDNS_HOSTNAME.
|
||||||
|
# DDNS_PTR_ZONE
|
||||||
|
# Not used. Constructed from IP adress.
|
||||||
|
# DDNS_PTR_REPLACE
|
||||||
|
# Not used. Always yes.
|
||||||
|
#
|
||||||
|
# DDNS_PTR_TTL
|
||||||
|
# DDNS_PTR_SERVER
|
||||||
|
# DDNS_PTR_GSS_TSIG
|
||||||
|
# DDNS_PTR_TSIG_FILE
|
||||||
|
# DDNS_PTR_TSIG_KEY_TYPE
|
||||||
|
# DDNS_PTR_TSIG_KEY_NAME
|
||||||
|
# DDNS_PTR_TSIG_KEY_SECRET
|
||||||
|
# Same as DDNS*.
|
||||||
|
#
|
||||||
|
|
||||||
|
[ ! -x /usr/bin/nsupdate ] && exit 0;
|
||||||
|
|
||||||
|
# Debugging is disabled by default
|
||||||
|
DDNS_DEBUG=${DDNS_DEBUG:=no}
|
||||||
|
|
||||||
|
function run_nsupdate() {
|
||||||
|
local rr_name=${1}
|
||||||
|
local ttl=${2}
|
||||||
|
local type=${3}
|
||||||
|
local rr_data=${4}
|
||||||
|
local replace=${5}
|
||||||
|
local server=${6}
|
||||||
|
local tcp=${7}
|
||||||
|
local zone=${8}
|
||||||
|
local gss_tsig=${9}
|
||||||
|
local gss_keytab=${10}
|
||||||
|
local gss_principal=${11}
|
||||||
|
local tsig_file=${12}
|
||||||
|
local tsig_key_type=${13}
|
||||||
|
local tsig_key_name=${14}
|
||||||
|
local tsig_key_secret=${15}
|
||||||
|
local cmd_server
|
||||||
|
local cmd_zone
|
||||||
|
local cmd_key
|
||||||
|
local cmd_replace
|
||||||
|
local cmd_params
|
||||||
|
local cc_file
|
||||||
|
|
||||||
|
[ -z "${rr_name}" ] && return 1
|
||||||
|
[ -z "${ttl}" ] && return 1
|
||||||
|
[ -z "${type}" ] && return 1
|
||||||
|
[ -z "${rr_data}" ] && return 1
|
||||||
|
|
||||||
|
[ -n "${server}" ] && cmd_server="server ${server}"
|
||||||
|
[ -n "${zone}" ] && cmd_zone="zone ${zone}"
|
||||||
|
[ "x${tcp}x" == "xyesx" ] && cmd_params="-v"
|
||||||
|
|
||||||
|
if [ "x${DDNS_DEBUG}x" != "xnox" ]; then
|
||||||
|
# cmd_params='-d'
|
||||||
|
echo "dnsupdate: updating: $rr_name $ttl IN $type $rr_data"
|
||||||
|
echo -e \
|
||||||
|
"Params: \n" \
|
||||||
|
" RR Name: \"${rr_name}\"\n" \
|
||||||
|
" TTL: \"${ttl}\"\n" \
|
||||||
|
" Type: \"${type}\"\n" \
|
||||||
|
" RR Data: \"${rr_data}\"\n" \
|
||||||
|
" Replace: \"${replace}\"\n" \
|
||||||
|
" Server: \"${server}\"\n" \
|
||||||
|
" TCP: \"${tcp}\"\n" \
|
||||||
|
" Zone: \"${zone}\"\n" \
|
||||||
|
" GSS-TSIG: \"${gss_tsig}\"\n" \
|
||||||
|
" GSS Keytab: \"${gss_keytab}\"\n" \
|
||||||
|
" GSS Principal: \"${gss_principal}\"\n" \
|
||||||
|
" TSIG File: \"${tsig_file}\"\n" \
|
||||||
|
" TSIG Key type: \"${tsig_key_type}\"\n" \
|
||||||
|
" TSIG Key name: \"${tsig_key_name}\"\n" \
|
||||||
|
" TSIG Key secret: \"${tsig_key_secret}\"\n"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "${tsig_file}" ]; then
|
||||||
|
[ -f "${tsig_file}" ] && logger -p daemon.info "TSIG keyfile not exists." && return 1;
|
||||||
|
cmd_params="${cmd_params} -k ${tsig_file}"
|
||||||
|
elif [ -n "${tsig_key_name}" ] && [ -n "${tsig_key_secret}" ]; then
|
||||||
|
if [ -n "${tsig_key_type}" ]; then
|
||||||
|
cmd_key="${tsig_key_type}:"
|
||||||
|
fi
|
||||||
|
cmd_key="key ${cmd_key}${tsig_key_name} ${tsig_key_secret}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
#
|
||||||
|
# Init kerberos credential cache if needed.
|
||||||
|
#
|
||||||
|
if [ "x${tsig_gss}x" == "xyesx" ] || [ "x${tcp}x" != "xyesx" ] && [ "x${tsig_gss}x" != "xnox" ] && [ -z "${tsig_file}" ] && [ -z "${cmd_key}" ]; then
|
||||||
|
cc_file=`mktemp`
|
||||||
|
if [ -n "${tsig_gss_keytab}" ] && [ -f "${tsig_gss_keytab}" ] && [ -n "${tsig_gss_principal}" ]; then
|
||||||
|
kinit -k ${tsig_gss_keytab} -c ${cc_file} ${tsig_gss_principal}
|
||||||
|
[ $? -ne 0 ] | logger -p daemon.info "dnsupdate: kinit (1) failed" | return 1
|
||||||
|
cmd_params="${cmd_params} -g"
|
||||||
|
elif [ -n "${tsig_gss_principal}" ]; then
|
||||||
|
kinit -k -c ${cc_file} ${tsig_gss_principal}
|
||||||
|
[ $? -ne 0 ] && logger -p daemon.info "dnsupdate: kinit (2) failed" | return 1
|
||||||
|
cmd_params="${cmd_params} -g"
|
||||||
|
else
|
||||||
|
kinit -k -c ${cc_file}
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
cmd_params="${cmd_params} -g"
|
||||||
|
else
|
||||||
|
[ "x${tsig_gss}x" == "xyesx" ] && logger -p daemon.info "dnsupdate: kinit (3) failed: ${cc_file}" | return 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Should we replace record
|
||||||
|
if [ "x${replace}x" != "xnox" ]; then
|
||||||
|
cmd_replace=$(cat <<EOF
|
||||||
|
${cmd_zone}
|
||||||
|
${cmd_key}
|
||||||
|
prereq yxrrset ${rr_name} IN ${type}
|
||||||
|
update delete ${rr_name} IN ${type}
|
||||||
|
send
|
||||||
|
EOF
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Runing nsupdate
|
||||||
|
KRB5CCNAME="FILE:${cc_file}" /usr/bin/nsupdate ${cmd_params} >/dev/null 2>&1 <<EOF
|
||||||
|
${cmd_server}
|
||||||
|
${cmd_replace}
|
||||||
|
${cmd_zone}
|
||||||
|
${cmd_key}
|
||||||
|
update add ${rr_name} ${ttl} IN ${type} ${rr_data}
|
||||||
|
send
|
||||||
|
EOF
|
||||||
|
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
logger -p daemon.info "dnsupdate: updating: $rr_name $ttl IN $type $rr_data: Successfully"
|
||||||
|
echo "dnsupdate: updating: $rr_name $ttl IN $type $rr_data: Successfully"
|
||||||
|
else
|
||||||
|
logger -p daemon.info "dnsupdate: updating: $rr_name $ttl IN $type $rr_data: Failed"
|
||||||
|
echo "dnsupdate: updating: $rr_name $ttl IN $type $rr_data: Failed"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Destroy kerberos credential cache
|
||||||
|
[ -f "${cc_file}" ] && kdestroy -c ${cc_file}
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
function check_ip() {
|
||||||
|
local ips=`nslookup $1 | awk '/^Address: / { print \$2 }'`
|
||||||
|
local count=`echo $ips | wc -l`
|
||||||
|
|
||||||
|
if [ "$3" == "yes" ]; then
|
||||||
|
[ "$count" -gt "1" ] && return 1
|
||||||
|
[ "$ips" == "$2" ] && return 1 || return 0
|
||||||
|
else
|
||||||
|
[[ $ips =~ $2 ]] && return 1 || return 0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function parse_ddns_config() {
|
||||||
|
local rr_name
|
||||||
|
local ttl
|
||||||
|
local type
|
||||||
|
local rr_data
|
||||||
|
local replace
|
||||||
|
local server
|
||||||
|
local tcp
|
||||||
|
local zone
|
||||||
|
local gss_tsig
|
||||||
|
local gss_keytab
|
||||||
|
local gss_principal
|
||||||
|
local tsig_file
|
||||||
|
local tsig_key_type
|
||||||
|
local tsig_key_name
|
||||||
|
local tsig_key_secret
|
||||||
|
local hostnum=0
|
||||||
|
local default_hostname=${DHCP_HOSTNAME-${HOSTNAME-$(hostname)}}
|
||||||
|
local ip_address=${1}
|
||||||
|
local public_ip=no
|
||||||
|
|
||||||
|
[[ ! $ip_address =~ ^192\.168|10\.|172\.1[6789]\.|172\.2[0-9]\.|172\.3[01]\. ]] && public_ip=yes
|
||||||
|
|
||||||
|
[ $public_ip == "yes" ] && [ "${DDNS}" != "yes" ] && return 0
|
||||||
|
|
||||||
|
#
|
||||||
|
# Update $DDNS_HOSTNAME
|
||||||
|
#
|
||||||
|
if [ -n "${DDNS_HOSTNAME}" ] || [ -z "${DDNS0_HOSTNAME}" ] && [ -n "${DDNS_HOSTNAME-${default_hostname}}" ]; then
|
||||||
|
rr_name=${DDNS_HOSTNAME:-${default_hostname}}
|
||||||
|
ttl=${DDNS_TTL:-300}
|
||||||
|
type=${DDNS_TYPE:-A}
|
||||||
|
rr_data=$ip_address
|
||||||
|
replace=${DDNS_REPLACE:-yes}
|
||||||
|
server=${DDNS_SERVER}
|
||||||
|
tcp=${DDNS_TCP:-no}
|
||||||
|
zone=${DDNS_ZONE}
|
||||||
|
gss_tsig=${DDNS_GSS_TSIG}
|
||||||
|
gss_keytab=${DDNS_GSS_KEYTAB}
|
||||||
|
gss_principal=${DDNS_GSS_PRINCIPAL}
|
||||||
|
tsig_file=${DDNS_TSIG_FILE}
|
||||||
|
tsig_key_type=${DDNS_TSIG_KEY_TYPE}
|
||||||
|
tsig_key_name=${DDNS_TSIG_KEY_NAME}
|
||||||
|
tsig_key_secret=${DDNS_TSIG_KEY_SECRET}
|
||||||
|
|
||||||
|
echo replace $DDNS_REPLACE
|
||||||
|
if check_ip "$rr_name" "$rr_data" "$replace"; then
|
||||||
|
run_nsupdate "${rr_name}" "${ttl}" "${type}" "${rr_data}" "${replace}" "${server}" "${tcp}" "${zone}" "${gss_tsig}" "${gss_keytab}" "${gss_principal}" "${tsig_file}" "${tsig_key_type}" "${tsig_key_name}" "${tsig_key_secret}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
#
|
||||||
|
# Update DDNS*_HOSTNAME
|
||||||
|
#
|
||||||
|
while [ -n "$(eval echo \$$(echo DDNS${hostnum}_HOSTNAME))" ]; do
|
||||||
|
rr_name=$(eval echo "\${DDNS${hostnum}_HOSTNAME}")
|
||||||
|
ttl=$(eval echo "\${DDNS${hostnum}_TTL-\${DDNS_TTL:-300}}")
|
||||||
|
type=$(eval echo "\${DDNS${hostnum}_TYPE-\${DDNS_TYPE:-A}}")
|
||||||
|
rr_data=$ip_address
|
||||||
|
replace=$(eval echo "\${DDNS${hostnum}_REPLACE-\${DDNS_REPLACE:-yes}}")
|
||||||
|
server=$(eval echo "\${DDNS${hostnum}_SERVER-\${DDNS_SERVER}}")
|
||||||
|
tcp=$(eval echo "\${DDNS${hostnum}_TCP-\${DDNS_TCP:-no}}")
|
||||||
|
zone=$(eval echo "\${DDNS${hostnum}_ZONE-\${DDNS_ZONE}}")
|
||||||
|
gss_tsig=$(eval echo "\${DDNS${hostnum}_GSS_TSIG-\${DDNS_GSS_TSIG}}")
|
||||||
|
gss_keytab=$(eval echo "\${DDNS${hostnum}_GSS_KEYTAB-\${DDNS_GSS_KEYTAB}}")
|
||||||
|
gss_principal=$(eval echo "\${DDNS${hostnum}_GSS_PRINCIPAL-\${DDNS_GSS_PRINCIPAL}}")
|
||||||
|
tsig_file=$(eval echo "\${DDNS${hostnum}_TSIG_FILE-\${DDNS_TSIG_FILE}}")
|
||||||
|
tsig_key_type=$(eval echo "\${DDNS${hostnum}_TSIG_KEY_TYPE-\${DDNS_TSIG_KEY_TYPE}}")
|
||||||
|
tsig_key_name=$(eval echo "\${DDNS${hostnum}_TSIG_KEY_NAME-\${DDNS_TSIG_KEY_NAME}}")
|
||||||
|
tsig_key_secret=$(eval echo "\${DDNS${hostnum}_TSIG_KEY_SECRET-\${DDNS_TSIG_KEY_SECRET}}")
|
||||||
|
|
||||||
|
if check_ip "$rr_name" "$rr_data" "$replace"; then
|
||||||
|
run_nsupdate "${rr_name}" "${ttl}" "${type}" "${rr_data}" "${replace}" "${server}" "${tcp}" "${zone}" "${gss_tsig}" "${gss_keytab}" "${gss_principal}" "${tsig_file}" "${tsig_key_type}" "${tsig_key_name}" "${tsig_key_secret}"
|
||||||
|
fi
|
||||||
|
(( hostnum++ ))
|
||||||
|
done
|
||||||
|
|
||||||
|
#
|
||||||
|
# Update PTR record
|
||||||
|
#
|
||||||
|
if [ "x${DDNS_PTR}x" != "xnox" ]; then
|
||||||
|
|
||||||
|
# Do not update public IP if not forced with DDNS_PTR=yes
|
||||||
|
[ "x${public_ip}x" == "xyesx" ] && [ -z "${DDNS_PTR+x}" ] && return 0
|
||||||
|
|
||||||
|
# Get hostname for PTR update
|
||||||
|
rr_data=${DDNS_PTR_HOSTNAME-${DDNS_HOSTNAME-${DDNS0_HOSTNAME-${default_hostname}}}}
|
||||||
|
if [ -n "${rr_data}" ]; then
|
||||||
|
# Get reverse zone from IP address
|
||||||
|
local ADDR
|
||||||
|
IFS='.' read -ra ADDR <<< "$ip_address"
|
||||||
|
rr_name="${ADDR[3]}.${ADDR[2]}.${ADDR[1]}.${ADDR[0]}.in-addr.arpa"
|
||||||
|
type="PTR"
|
||||||
|
server=${DDNS_PTR_SERVER-${DDNS_SERVER}}
|
||||||
|
tcp=${DDNS_PTR_TCP-${DDNS_TCP:-yes}}
|
||||||
|
replace="yes"
|
||||||
|
ttl=${DDNS_PTR_TTL-${DDNS_TTL:=300}}
|
||||||
|
zone="${ADDR[2]}.${ADDR[1]}.${ADDR[0]}.in-addr.arpa"
|
||||||
|
gss_tsig=${DDNS_PTR_GSS_TSIG-${DDNS_GSS_TSIG}}
|
||||||
|
gss_keytab=${DDNS_PTR_GSS_KEYTAB-${DDNS_GSS_KEYTAB}}
|
||||||
|
gss_principal=${DDNS_PTR_GSS_PRINCIPAL-${DDNS_GSS_PRINCIPAL}}
|
||||||
|
tsig_file=${DDNS_PTR_TSIG_FILE-${DDNS_TSIG_FILE}}
|
||||||
|
tsig_key_type=${DDNS_PTR_TSIG_KEY_TYPE-${DDNS_TSIG_KEY_TYPE}}
|
||||||
|
tsig_key_name=${DDNS_PTR_TSIG_KEY_NAME-${DDNS_TSIG_KEY_NAME}}
|
||||||
|
tsig_key_secret=${DDNS_PTR_TSIG_KEY_SECRET-${DDNS_TSIG_KEY_SECRET}}
|
||||||
|
|
||||||
|
run_nsupdate "${rr_name}" "${ttl}" "${type}" "${rr_data}" "${replace}" "${server}" "${tcp}" "${zone}" "${gss_tsig}" "${gss_keytab}" "${gss_principal}" "${tsig_file}" "${tsig_key_type}" "${tsig_key_name}" "${tsig_key_secret}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_all_ifaces() {
|
||||||
|
echo `ip addr show | sed -nr 's/([0-9]*: )(.*): .*/\2/p'`
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_iface_ip() {
|
||||||
|
echo `ip addr show dev ${1} 2>/dev/null | sed -nr 's/.*inet ([^ \/]+).*/\1/p'`
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
function update_iface() {
|
||||||
|
local ip_address
|
||||||
|
|
||||||
|
[ "x${1}x" == "xlox" ] && return 0
|
||||||
|
|
||||||
|
# Unset all DDNS variables except DDNS_DEBUG
|
||||||
|
local DEBUG=${DDNS_DEBUG}
|
||||||
|
unset `compgen -v | grep "^DDNS.*"`
|
||||||
|
DDNS_DEBUG=$DEBUG
|
||||||
|
|
||||||
|
# Get address if not supplied
|
||||||
|
if [ $# -eq 1 ]; then
|
||||||
|
# Get interface address
|
||||||
|
ip_address=$(get_iface_ip "${1}")
|
||||||
|
else
|
||||||
|
ip_address=${2}
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Skip if no address found
|
||||||
|
if [ "x${ip_address}x" == "xx" ]; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
[ -f /etc/sysconfig/network ] && . /etc/sysconfig/network
|
||||||
|
[ -f /etc/sysconfig/networking/network ] && . /etc/sysconfig/networking/network
|
||||||
|
|
||||||
|
# Load interface config
|
||||||
|
cd /etc/sysconfig/network-scripts
|
||||||
|
CONFIG="${1}"
|
||||||
|
need_config ${CONFIG}
|
||||||
|
source_config >/dev/null 2>&1
|
||||||
|
|
||||||
|
if [ "x${DDNS}x" == "xnox" ] ; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
parse_ddns_config "${ip_address}"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Show usage if neeaded
|
||||||
|
for var in "$@"
|
||||||
|
do
|
||||||
|
if [ "$var" == "--help" ]; then
|
||||||
|
cat <<EOF
|
||||||
|
Usage:
|
||||||
|
dnsupdate [[interface] [ip]]
|
||||||
|
|
||||||
|
--help - Show usage
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
. /etc/sysconfig/network-scripts/network-functions
|
||||||
|
. /etc/rc.d/init.d/functions
|
||||||
|
|
||||||
|
|
||||||
|
if [[ $# -eq 1 ]] || [[ $# -eq 2 ]]; then
|
||||||
|
update_iface "${1}" "${2}"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# No parametars - try update all interfaces
|
||||||
|
if [[ $# -eq 0 ]]; then
|
||||||
|
for iface in $(get_all_ifaces)
|
||||||
|
do
|
||||||
|
update_iface "${iface}"
|
||||||
|
done
|
||||||
|
fi
|
||||||
2
dnsupdate.cron
Normal file
2
dnsupdate.cron
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# Run dnsupdate every 2 minutes
|
||||||
|
*/2 * * * * root /usr/bin/dnsupdate > /dev/null 2>&1 || :
|
||||||
63
dnsupdate.spec
Normal file
63
dnsupdate.spec
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
Summary: Dynamic DNS for ppp and dhclient
|
||||||
|
Name: dnsupdate
|
||||||
|
Version: 0.5.2
|
||||||
|
Release: 1%{?dist}
|
||||||
|
License: GPLv2+
|
||||||
|
Group: System Environment/Daemons
|
||||||
|
URL: http://netst.org/pub/fedora/st/
|
||||||
|
BuildArch: noarch
|
||||||
|
|
||||||
|
Requires: initscripts
|
||||||
|
Requires: ppp
|
||||||
|
Requires: bind-utils
|
||||||
|
|
||||||
|
Source0: dnsupdate
|
||||||
|
Source1: dhclient-dnsupdate.sh
|
||||||
|
Source2: ppp-dnsupdate.sh
|
||||||
|
Source3: dnsupdate.cron
|
||||||
|
|
||||||
|
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||||
|
|
||||||
|
%description
|
||||||
|
Dynamic DNS for ppp and dhclient.
|
||||||
|
|
||||||
|
%install
|
||||||
|
%{__rm} -rf %{buildroot}
|
||||||
|
|
||||||
|
install -dm 755 $RPM_BUILD_ROOT%{_sysconfdir}
|
||||||
|
install -dm 755 $RPM_BUILD_ROOT%{_sysconfdir}/cron.d
|
||||||
|
install -dm 755 $RPM_BUILD_ROOT%{_bindir}
|
||||||
|
install -dm 755 $RPM_BUILD_ROOT%{_sysconfdir}/dhcp/
|
||||||
|
install -dm 755 $RPM_BUILD_ROOT%{_sysconfdir}/dhcp/dhclient.d
|
||||||
|
install -dm 755 $RPM_BUILD_ROOT%{_sysconfdir}/ppp
|
||||||
|
install -dm 755 $RPM_BUILD_ROOT%{_sysconfdir}/ppp/ip-up.d
|
||||||
|
|
||||||
|
install -pm 755 %{SOURCE0} $RPM_BUILD_ROOT%{_bindir}/dnsupdate
|
||||||
|
install -pm 755 %{SOURCE1} $RPM_BUILD_ROOT%{_sysconfdir}/dhcp/dhclient.d/dnsupdate.sh
|
||||||
|
install -pm 755 %{SOURCE2} $RPM_BUILD_ROOT%{_sysconfdir}/ppp/ip-up.d/dnsupdate.sh
|
||||||
|
install -pm 644 %{SOURCE3} $RPM_BUILD_ROOT%{_sysconfdir}/cron.d/dnsupdate
|
||||||
|
|
||||||
|
%clean
|
||||||
|
%{__rm} -rf %{buildroot}
|
||||||
|
|
||||||
|
%files
|
||||||
|
|
||||||
|
%defattr(-,root,root,-)
|
||||||
|
|
||||||
|
%{_bindir}/dnsupdate
|
||||||
|
%{_sysconfdir}/dhcp/dhclient.d/dnsupdate.sh
|
||||||
|
%{_sysconfdir}/ppp/ip-up.d/dnsupdate.sh
|
||||||
|
%{_sysconfdir}/cron.d/dnsupdate
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
* Mon Jul 27 2015 Zoran Pericic <zpericic@netst.org> - 0.5.2-1
|
||||||
|
- Fix dhcpd script
|
||||||
|
|
||||||
|
* Sun Jul 26 2015 Zoran Pericic <zpericic@netst.org> - 0.5.1-1
|
||||||
|
- Fix cron job and permissions
|
||||||
|
|
||||||
|
* Wed Jul 22 2015 Zoran Pericic <zpericic@netst.org> - 0.5.0-1
|
||||||
|
- Many improvements
|
||||||
|
|
||||||
|
* Sun Apr 5 2015 Zoran Pericic <zpericic@netst.org>
|
||||||
|
- Initial commmit
|
||||||
10
ppp-dnsupdate.sh
Executable file
10
ppp-dnsupdate.sh
Executable file
@@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
[ -f "/etc/sysconfig/network-scripts/ifcfg-${6}" ] && . /etc/sysconfig/network-scripts/ifcfg-${6}
|
||||||
|
|
||||||
|
if [[ $# -l 6 ]]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
/usr/bin/dnsupdate "${6}" "${4}"
|
||||||
|
|
||||||
Reference in New Issue
Block a user