-
-
Save Holzkohlen/016b1da00990475d0441dc9babd84261 to your computer and use it in GitHub Desktop.
Script for updating spDYN dynamic DNS entries ipv4 and ipv6 (https://spdyn.de)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# | |
# Script for updating spDYN dynamic DNS entries (https://spdyn.de) | |
# | |
# Usage: | |
# - Save this script as $HOME/bin/spDYN_update.sh | |
# - Make it executable: chmod u+x $HOME/bin/spDYN_update.sh | |
# - Create a cron entry (crontab -e) and supply <HOST_NAME> and <UPDATE_TOKEN> | |
# according to your spDYN settings. Example for running every 10 minutes: | |
# */10 * * * * $HOME/bin/spDYN_update.sh <HOST_NAME> <UPDATE_TOKEN> > /dev/null | |
# | |
# Logs are written to $HOME/.spDYN/ | |
# | |
# forked from: | |
# spDYN_update.sh, Copyright 2017 Harald Aigner <harald.aigner@gmx.net> | |
# Licensed under the GPLv3 (https://www.gnu.org/licenses/gpl-3.0.txt) | |
# | |
# added functionality to update the ivp6 address as well | |
if [ $# -ne 2 ] | |
then | |
echo "Usage: $0 <HOST_NAME> <UPDATE_TOKEN>" | |
exit 0 | |
fi | |
HOST_NAME=$1 | |
UPDATE_TOKEN=$2 | |
DATE=`date "+%Y-%m-%d %H:%M:%S"` | |
UPDATE_URL="https://update.spdyn.de/nic/update" | |
CHECK_IPV4_URL="http://checkip4.spdyn.de" | |
CHECK_IPV6_URL="http://checkip6.spdyn.de" | |
ip_file="${HOME}/.spDYN/${HOST_NAME}" | |
log_file="${HOME}/.spDYN/${HOST_NAME}.log" | |
old_ipv4="<not available>" | |
old_ipv6="<not available>" | |
if [ -r ${ip_file} ] | |
then | |
old_ipv4=$(sed -n 1p ${ip_file}) | |
old_ipv6=$(sed -n 2p ${ip_file}) | |
else | |
mkdir -p "${HOME}/.spDYN" | |
fi | |
ipv4=$(curl -s ${CHECK_IPV4_URL}) | |
if [ -z "${ipv4}" ] | |
then | |
echo "${DATE}: error retrieving IPV4" | tee -a "${log_file}" | |
exit 1 | |
fi | |
ipv6=$(curl -s ${CHECK_IPV6_URL}) | |
if [ -z "${ipv6}" ] | |
then | |
echo "${DATE}: error retrieving IPV6" | tee -a "${log_file}" | |
exit 1 | |
fi | |
if [ "${ipv4}" = "${old_ipv4}" ] | |
then | |
if [ "${ipv6}" = "${old_ipv6}" ] | |
then | |
echo "${DATE}: no IP change (${ipv4}) and (${ipv6})" | tee -a "${log_file}" | |
exit 0 | |
else | |
echo "${DATE}: only IPV6 changed (${ipv6})" | tee -a "${log_file}" | |
fi | |
fi | |
echo "${DATE}: detected new IP: ${old_ipv4} -> ${ipv4}" | tee -a "${log_file}" | |
echo "${DATE}: detected new IP: ${old_ipv6} -> ${ipv6}" | tee -a "${log_file}" | |
echo "${ipv4}" > "${ip_file}" | |
echo "${ipv6}" >> "${ip_file}" | |
echo "${DATE}: wrote new IPs to ${ip_file}" | tee -a "${log_file}" | |
response=$(curl -su "${HOST_NAME}:${UPDATE_TOKEN}" "${UPDATE_URL}?hostname=${HOST_NAME}&myip=${ipv4},${ipv6}") | |
echo "${DATE}: response: ${response}" | tee -a "${log_file}" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
added support for updating ipv6 in addition to ipv4