From 7f3ea34aa350c2af6d9d20b5181b8d6a036cb474 Mon Sep 17 00:00:00 2001 From: Florian Klemenz Date: Wed, 22 May 2024 13:25:03 +0000 Subject: [PATCH] changes for ipv6 handling --- ddns.sh | 30 ++++++++++++++++++++---------- unitedDomainsCtrl.sh | 11 ++++++----- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/ddns.sh b/ddns.sh index d31b1ef..0405b6a 100755 --- a/ddns.sh +++ b/ddns.sh @@ -3,7 +3,11 @@ # The DNS-server IP to use for checking the domain->IP mapping # If the local system has it's own DNS server which maps IPs differently # this should point to an external DNS like 1.1.1.1 -NAMESERVER="1.1.1.1" +#NAMESERVER="1.1.1.1" +NAMESERVER="2606:4700:4700::1111" + +IPV6_INTERFACE_ID="c03c:17ff:feeb:21e7" +IPV6_SUBNET_ID="01" # ----- END CONFIG ------------------------------- @@ -32,31 +36,37 @@ if [ -f "${LAST_IP_FILE}" ]; then fi echo "Last UPDATE-IP -----------> ${LAST_IP}" -WAN_IP=$(${SCRIPTPATH}/easyBoxCtrl.sh wan ip 2>/dev/null) -echo "Current WAN-IP -----------> ${WAN_IP}" +#WAN_IP=$(${SCRIPTPATH}/easyBoxCtrl.sh wan ip 2>/dev/null) +#echo "Current WAN-IP -----------> ${WAN_IP}" + +IPV6_PREFIX=$(${SCRIPTPATH}/easyBoxCtrl.sh wan ipv6prefix 2>/dev/null) +echo "Current IPv6-Prefix ------> ${IPV6_PREFIX}" + +IPV6_IP="$(sed -r 's/(.*)00::.*/\1/' <<< ${IPV6_PREFIX})${IPV6_SUBNET_ID}:${IPV6_INTERFACE_ID}" +echo "Current IPv6-IP ----------> ${IPV6_IP}" PROBE_DOMAIN="${DOMAIN}" if [[ "${PROBE_DOMAIN}" == \*.* ]]; then PROBE_DOMAIN="probe.${PROBE_DOMAIN:2}" echo "Probe domain is ----------> ${PROBE_DOMAIN}" fi -DNS_IP=$(dig @${NAMESERVER} +short ${PROBE_DOMAIN}) +DNS_IP=$(dig @${NAMESERVER} +short ${PROBE_DOMAIN} AAAA) echo "Current DNS-IP -----------> ${DNS_IP}" -if [ "${WAN_IP}" == "${DNS_IP}" ]; then +if [ "${IPV6_IP}" == "${DNS_IP}" ]; then echo "IPs match - nothing to do." exit 0 else - if [ "${LAST_IP}" == "${WAN_IP}" ]; then - echo "Last update IP matches WAN-IP - waiting for DNS to propagate changes." + if [ "${LAST_IP}" == "${IPV6_IP}" ]; then + echo "Last update IP matches current IP - waiting for DNS to propagate changes." else - echo "IP mismatch - trying to update A-record(s)..." - $SCRIPTPATH/unitedDomainsCtrl.sh ${DOMAIN} ${WAN_IP} + echo "IP mismatch - trying to update AAAA-record(s)..." + $SCRIPTPATH/unitedDomainsCtrl.sh ${DOMAIN} ${IPV6_IP} if [ "$?" == "0" ]; then echo "Save UPDATE_IP." - echo "${WAN_IP}" > ${LAST_IP_FILE} + echo "${IPV6_IP}" > ${LAST_IP_FILE} fi fi fi diff --git a/unitedDomainsCtrl.sh b/unitedDomainsCtrl.sh index fe864a4..e759bd8 100755 --- a/unitedDomainsCtrl.sh +++ b/unitedDomainsCtrl.sh @@ -36,7 +36,7 @@ fi echo "DOMAIN=${DOMAIN}" echo "SUBDOMAIN=${SUBDOMAIN}" -IPV4=$2 +UPDATE_IP=$2 ################################################# @@ -111,12 +111,13 @@ current=$(wget -U " $UA" \ RECORD_ID=$(echo $current | \ - jq -cM --arg v "${SUBDOMAIN}" '.data.A | map(select(.sub_domain == $v)) | .[0].id') + jq -cM --arg v "${SUBDOMAIN}" '.data.AAAA | map(select(.sub_domain == $v)) | .[0].id') +echo "RECORD_ID=${RECORD_ID}" record=$(echo $current | - jq -cM --arg v "${SUBDOMAIN}" '.data.A | map(select(.sub_domain == $v)) | .[0]' | \ + jq -cM --arg v "${SUBDOMAIN}" '.data.AAAA | map(select(.sub_domain == $v)) | .[0]' | \ sed "s/ //g" | \ - sed "s/\"address\":\"[0-9.]\+\"/\"address\":\"${IPV4}\",\"formId\":${RECORD_ID}/g") + sed "s/\"address\":\"[0-9a-z:.]\+\"/\"address\":\"${UPDATE_IP}\",\"formId\":${RECORD_ID}/g") echo "NEW: $record" @@ -153,7 +154,7 @@ OUT=$(wget -U " $UA" \ -O- "https://www.united-domains.de/pfapi/dns/domain/$DOMAIN_ID/records" 2>&1) #echo "UD answered: $OUT" -#echo $OUT | grep "$IPV4" >/dev/null 2>&1 +#echo $OUT | grep "$UPDATE_IP" >/dev/null 2>&1 SUCCESS=$? echo "Retval: $SUCCESS"