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

🔧 handle dns server selection

This commit is contained in:
2021-09-13 13:16:27 +02:00
parent 4643331534
commit d92cdb2652

107
dynb.sh
View File

@@ -41,7 +41,7 @@ _ipv4_checker=api64.ipify.org
_ipv6_checker=api64.ipify.org _ipv6_checker=api64.ipify.org
## An exernal DNS check server prevents wrong info from local DNS servers/resolvers ## An exernal DNS check server prevents wrong info from local DNS servers/resolvers
_DNS_checkServer=1.1.1.1 _DNS_checkServer=
## if you are actively using multiple network interfaces you might want to specify this ## if you are actively using multiple network interfaces you might want to specify this
## normally the default value is okay ## normally the default value is okay
@@ -161,13 +161,18 @@ function getDNSIP() {
# 2. param: IP check server address # 2. param: IP check server address
# result to stdout # result to stdout
function getRemoteIP() { function getRemoteIP() {
curl --silent "$_interface_str" --user-agent "$_userAgent" \ if [[ -n $_DNS_checkServer ]]; then
--ipv"${1}" --dns-servers 1.1.1.1 --location "${2}" curl --silent "$_interface_str" --user-agent "$_userAgent" \
# shellcheck disable=2181 --ipv"${1}" --dns-servers "$_DNS_checkServer" --location "${2}"
if [[ $? -gt 0 ]]; then else
errorMessage "IPCheck (getRemoteIP ${1}) request failed" curl --silent "$_interface_str" --user-agent "$_userAgent" \
exit 1 --ipv"${1}" --location "${2}"
fi fi
# shellcheck disable=2181
if [[ $? -gt 0 ]]; then
errorMessage "IPCheck (getRemoteIP ${1}) request failed"
exit 1
fi
} }
# requires parameter # requires parameter
@@ -412,46 +417,54 @@ function checkStatus() {
# requires parameter # requires parameter
# 1. param: 4 or 6 for IP version # 1. param: 4 or 6 for IP version
function ipHasChanged() { function ipHasChanged() {
case ${1} in case ${1} in
4 ) 4)
remote_ip=$(getRemoteIP 4 $_ipv4_checker) remote_ip=$(getRemoteIP 4 $_ipv4_checker)
if [[ $DYNB_UPDATE_METHOD == domrobot ]]; then if [[ $DYNB_UPDATE_METHOD == domrobot ]]; then
dns_ip=$(getDNSIP A) dns_ip=$(getDNSIP A)
else else
dig_response=$(dig @${_DNS_checkServer} in a +short "$DYNB_DYN_DOMAIN") if [[ -n $_DNS_checkServer ]]; then
if [[ $dig_response == ";; connection timed out; no servers could be reached" ]]; then dig_response=$(dig @"${_DNS_checkServer}" in a +short "$DYNB_DYN_DOMAIN")
errorMessage "DNS request failed $dig_response" else
return 0 dig_response=$(dig in a +short "$DYNB_DYN_DOMAIN")
fi fi
dns_ip=$dig_response if [[ $dig_response == ";; connection timed out; no servers could be reached" ]]; then
fi errorMessage "DNS request failed $dig_response"
_new_IPv4=$remote_ip return 0
debugMessage "New IPv4: $_new_IPv4 old was: $dns_ip" fi
;; dns_ip=$dig_response
6 ) fi
remote_ip=$(getRemoteIP 6 $_ipv6_checker) _new_IPv4=$remote_ip
if [[ $DYNB_UPDATE_METHOD == domrobot ]]; then debugMessage "New IPv4: $_new_IPv4 old was: $dns_ip"
dns_ip=$(getDNSIP AAAA) ;;
else 6)
dig_response=$(dig @${_DNS_checkServer} in aaaa +short "$DYNB_DYN_DOMAIN") remote_ip=$(getRemoteIP 6 $_ipv6_checker)
if [[ $dig_response == ";; connection timed out; no servers could be reached" ]]; then if [[ $DYNB_UPDATE_METHOD == domrobot ]]; then
errorMessage "DNS request failed $dig_response" dns_ip=$(getDNSIP AAAA)
return 0 else
fi if [[ -n $_DNS_checkServer ]]; then
dns_ip=$dig_response dig_response=$(dig @"${_DNS_checkServer}" in aaaa +short "$DYNB_DYN_DOMAIN")
fi else
_new_IPv6=$remote_ip dig_response=$(dig in aaaa +short "$DYNB_DYN_DOMAIN")
debugMessage "New IPv6: $_new_IPv6 old was: $dns_ip" fi
;; if [[ $dig_response == ";; connection timed out; no servers could be reached" ]]; then
* ) errorMessage "DNS request failed $dig_response"
;; return 0
esac fi
dns_ip=$dig_response
fi
_new_IPv6=$remote_ip
debugMessage "New IPv6: $_new_IPv6 old was: $dns_ip"
;;
*) ;;
if [[ "$remote_ip" == "$dns_ip" ]]; then esac
return 0
else if [[ "$remote_ip" == "$dns_ip" ]]; then
return 1 return 0
fi else
return 1
fi
} }
################ ################