From 689a915c198ee2b5aa15ba45c51627ffbcb3463f Mon Sep 17 00:00:00 2001 From: Alexander Gabriel Date: Tue, 24 Mar 2026 22:45:23 +0100 Subject: [PATCH] first version for delegated zones --- .env.example | 4 ++++ .gitignore | 1 + dynv6_delegated.sh | 52 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+) create mode 100644 .env.example create mode 100644 .gitignore create mode 100644 dynv6_delegated.sh diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..d7e63ae --- /dev/null +++ b/.env.example @@ -0,0 +1,4 @@ +token= +api_url=https://dynv6.com/api/v2/zones/xxx/records/yyy +hostname=zzz +device=ensxx \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4c49bd7 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.env diff --git a/dynv6_delegated.sh b/dynv6_delegated.sh new file mode 100644 index 0000000..2556f96 --- /dev/null +++ b/dynv6_delegated.sh @@ -0,0 +1,52 @@ +#!/bin/sh -e + +set -a +source .env +set +a + +file=$HOME/.dynv6.addr6 +[ -e $file ] && old=`cat $file` + +if [ -z "$hostname" -o -z "$token" ]; then + echo "Usage: token= [netmask=64] $0 your-name.dynv6.net [device]" + exit 1 +fi + +if [ -z "$netmask" ]; then + netmask=128 +fi + +if [ -n "$device" ]; then + device="dev $device" +fi +address=$(ip -6 addr list scope global $device | grep -v " fd" | sed -n 's/.*inet6 \([0-9a-f:]\+\).*/\1/p' | head -n 1) + +if [ -e /usr/bin/curl ]; then + bin="curl -fsS" +elif [ -e /usr/bin/wget ]; then + bin="wget -O-" +else + echo "neither curl nor wget found" + exit 1 +fi + +if [ -z "$address" ]; then + echo "no IPv6 address found" + exit 1 +fi + +# address with netmask +current=$address/$netmask + +if [ "$old" = "$current" ]; then + #echo "IPv6 address unchanged" + exit +fi + +# send addresses to dynv6 +curl --silent -H "Authorization: Bearer $token" -H "Accept: application/json" -H "Content-Type: application/json" -X PATCH \ + -d '{"name":"'$hostname'","data":"'$address'","type":"AAAA"}' \ + $api_url | jq + +# save current address +echo $current > $file