use more variables instead of hard-coding (fixes #3)
This commit is contained in:
parent
d48064a7e3
commit
04686de59c
15 changed files with 101 additions and 70 deletions
54
templates/ddns-hosts.sh
Normal file
54
templates/ddns-hosts.sh
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
#!/bin/sh
|
||||
passwd='{{ ddns_passphrase }}'
|
||||
hostname=$(hostname | tr '[:upper:]' '[:lower:]')
|
||||
|
||||
platform='unknown'
|
||||
unamestr=$(uname)
|
||||
if [ "$unamestr" = 'Linux' ]; then
|
||||
platform='linux'
|
||||
elif [ "$unamestr" = 'FreeBSD' ]; then
|
||||
platform='freebsd'
|
||||
fi
|
||||
|
||||
ip6addr=''
|
||||
ip4addr=''
|
||||
if [ $platform = 'linux' ]; then
|
||||
ip6addr=$(ip -6 addr show scope global | grep inet6 | tail -1 | egrep -o '([0-9abcdef]{4}[0-9:abcdef]*)')
|
||||
# filter local IPv4 address ranges (172.16.0.0/12, 10.0.0.0/8, 192.168.0.0/16)
|
||||
ip4addr=$(ip -4 addr show scope global | grep inet | egrep -o '([0-9]{1,3}\.){3}[0-9]{1,3}' | grep -Ev '172.(1[6-9]|2[0-9]|3[0-1])' | grep -Ev '10.' | grep -Ev '192.168.' | head -n 1)
|
||||
elif [ $platform = 'freebsd' ]; then
|
||||
ip6addr=$(ifconfig em0 | grep inet6 | tail -1 | egrep -o '([0-9abcdef]{4}[0-9:abcdef]*)')
|
||||
ip4addr=$(ifconfig em0 inet | grep inet | egrep -o '([0-9]{1,3}\.){3}[0-9]{1,3}' | head -n 1)
|
||||
fi
|
||||
|
||||
echo "Current IP addresses of $hostname are: $ip4addr, $ip6addr"
|
||||
|
||||
|
||||
if [ $ip4addr ]; then
|
||||
echo "Updating IPv4 DNS entry..."
|
||||
else
|
||||
echo "No public IPv4 address, updating DNS entry anyway..."
|
||||
fi
|
||||
|
||||
# API always returns 200, so check for response payload to begin with {"Success":true,
|
||||
url="https://{{ ddns_server_domain }}/update?secret=$passwd&domain=$hostname&addr=$ip4addr"
|
||||
statuscode=$(curl -s $url)
|
||||
case "$statuscode" in
|
||||
{\"Success\":true*) echo "IPv4 Success" ;;
|
||||
*) (>&2 echo "IPv4 DynDNS update failed: API response:\n$statuscode") ;;
|
||||
esac
|
||||
|
||||
|
||||
if [ $ip6addr ]; then
|
||||
echo "Updating IPv6 DNS entry..."
|
||||
|
||||
# API always returns 200, so check for response payload to begin with {"Success":true,
|
||||
url="https://{{ ddns_server_domain }}/update?secret=$passwd&domain=$hostname&addr=$ip6addr"
|
||||
statuscode=$(curl -s $url)
|
||||
case "$statuscode" in
|
||||
{\"Success\":true*) echo "IPv6 Success" ;;
|
||||
*) (>&2 echo "IPv6 DynDNS update failed: API response:\n$statuscode") ;;
|
||||
esac
|
||||
else
|
||||
echo "No public IPv6 Address, skipping DNS update."
|
||||
fi
|
||||
Loading…
Add table
Add a link
Reference in a new issue