1
0
mirror of https://github.com/EV21/dynb.git synced 2025-12-26 16:39:32 +01:00

feat: temporarily disable an ip version if the connectivity/routing does not work

This commit is contained in:
2022-11-10 11:59:48 +01:00
parent 15ea0345bd
commit 0eec80f604

46
dynb.sh
View File

@@ -77,6 +77,10 @@ _statusFile=/tmp/dynb.status
_debug=false _debug=false
_minimum_looptime=60 _minimum_looptime=60
_loopMode=false _loopMode=false
_remote_ip=
_has_remote_ip_error=
_has_remote_ip4=false
_has_remote_ip6=false
# Ansi color code variables # Ansi color code variables
yellow_color="\e[0;33m" yellow_color="\e[0;33m"
@@ -221,7 +225,7 @@ function getRecordID
} }
## getDNSIP A ## getDNSIP A
# requires parameter A or AAAA # requires parameter A or AAAA,
# result to stdout # result to stdout
function getDNSIP() { function getDNSIP() {
local record_type=$1 local record_type=$1
@@ -256,8 +260,8 @@ function getDNSIP() {
fi fi
} }
_has_remote_ip_error=false ## getRemoteIP A
# sets the variable _remote_ip
# requires parameter # requires parameter
# 1. param: 4 or 6 for ip version # 1. param: 4 or 6 for ip version
# result to stdout # result to stdout
@@ -289,14 +293,14 @@ function getRemoteIP
# shellcheck disable=2181 # shellcheck disable=2181
if [[ $curls_status_code -gt 0 ]] if [[ $curls_status_code -gt 0 ]]
then then
errorMessage "Remote IPv$ip_version request failed with ${current_check_server}" errorMessage "Remote IPv$ip_version request failed with ${current_check_server} curl status code: $curls_status_code"
_has_remote_ip_error=true _has_remote_ip_error=true
return_value=1 return_value=1
else else
if is_ip_address "$ip_version" "$response" if is_ip_address "$ip_version" "$response"
then then
_has_remote_ip_error=false _has_remote_ip_error=false
echo "$response" _remote_ip="$response"
return_value=0 return_value=0
break break
else else
@@ -307,6 +311,20 @@ function getRemoteIP
fi fi
done done
case $ip_version in
4)
if [[ $_has_remote_ip_error == true ]]
then _has_remote_ip4=false
else _has_remote_ip4=true
fi
;;
6)
if [[ $_has_remote_ip_error == true ]]
then export _has_remote_ip6=false
else export _has_remote_ip6=true
fi
;;
esac
return $return_value return $return_value
} }
@@ -425,15 +443,16 @@ function prepare_request_parameters
function prepare_ip_flag_parameters function prepare_ip_flag_parameters
{ {
if [[ $_is_IPv4_enabled == true ]] && [[ $_is_IPv6_enabled == true ]] debugMessage "IPv4 enabled: $_is_IPv4_enabled; IPv6 enabled: $_is_IPv6_enabled; has remote IPv4: $_has_remote_ip4; has remote IPv6: $_has_remote_ip6"
if [[ $_is_IPv4_enabled == true ]] && [[ $_is_IPv6_enabled == true ]] && [[ $_has_remote_ip4 == true ]] && [[ $_has_remote_ip6 == true ]]
then then
ip_flag_parameters=("--data-urlencode" "${ipv4_parameter_name}=${_new_IPv4}" "--data-urlencode" "${ipv6_parameter_name}=${_new_IPv6}") ip_flag_parameters=("--data-urlencode" "${ipv4_parameter_name}=${_new_IPv4}" "--data-urlencode" "${ipv6_parameter_name}=${_new_IPv6}")
fi fi
if [[ $_is_IPv4_enabled == true ]] && [[ $_is_IPv6_enabled == false ]] if [[ $_is_IPv4_enabled == true ]] && [[ $_is_IPv6_enabled == false ]] || [[ $_is_IPv4_enabled == true ]] && [[ $_is_IPv6_enabled == true ]] && [[ $_has_remote_ip4 == true ]] && [[ $_has_remote_ip6 == false ]]
then then
ip_flag_parameters=("--data-urlencode" "${ipv4_parameter_name}=${_new_IPv4}") ip_flag_parameters=("--data-urlencode" "${ipv4_parameter_name}=${_new_IPv4}")
fi fi
if [[ $_is_IPv4_enabled == false ]] && [[ $_is_IPv6_enabled == true ]] if [[ $_is_IPv4_enabled == false ]] && [[ $_is_IPv6_enabled == true ]] || [[ $_is_IPv4_enabled == true ]] && [[ $_is_IPv6_enabled == true ]] && [[ $_has_remote_ip4 == false ]] && [[ $_has_remote_ip6 == true ]]
then then
ip_flag_parameters=("--data-urlencode" "${ipv6_parameter_name}=${_new_IPv6}") ip_flag_parameters=("--data-urlencode" "${ipv6_parameter_name}=${_new_IPv6}")
fi fi
@@ -628,25 +647,24 @@ function checkStatus
function ipHasChanged function ipHasChanged
{ {
local ip_version=$1 local ip_version=$1
remote_ip=$(getRemoteIP "$ip_version") getRemoteIP "$ip_version"
if test $? -gt 0 if test $? -gt 0
then return 1 then return 1
fi fi
case ${ip_version} in case ${ip_version} in
4) 4)
dns_ip=$(getDNSIP A) dns_ip=$(getDNSIP A)
_new_IPv4=$remote_ip _new_IPv4=$_remote_ip
debugMessage "IPv4 from remote IP check server: $_new_IPv4, IPv4 from DNS: $dns_ip" debugMessage "IPv4 from remote IP check server: $_new_IPv4, IPv4 from DNS: $dns_ip"
;; ;;
6) 6)
dns_ip=$(getDNSIP AAAA) dns_ip=$(getDNSIP AAAA)
_new_IPv6=$remote_ip _new_IPv6=$_remote_ip
debugMessage "IPv6 from remote IP check server: $_new_IPv6, IPv6 from DNS: $dns_ip" debugMessage "IPv6 from remote IP check server: $_new_IPv6, IPv6 from DNS: $dns_ip"
;; ;;
*) ;;
esac esac
if [[ "$remote_ip" == "$dns_ip" ]] if [[ "$_remote_ip" == "$dns_ip" ]]
then return 1 then return 1
else else
case ${ip_version} in case ${ip_version} in
@@ -835,7 +853,7 @@ function doDynDNS2Updates
if [[ $_is_IPv6_enabled == true ]] && ipHasChanged 6 if [[ $_is_IPv6_enabled == true ]] && ipHasChanged 6
then ((changed += 1)) then ((changed += 1))
fi fi
if [[ $changed -gt 0 ]] && [[ $_has_remote_ip_error == false ]] if [[ $changed -gt 0 ]]
then then
if checkStatus if checkStatus
then then