# DNSPod API Token
:local token "000,00000000000000000000000"
# 域名与主机名
:local domain "0cloud.cc"
:local subdomain "bros"
:local dname ($subdomain . "." . $domain)
# 缓存文件(保存上次 IPv6)
:local cachefile "lastipv6.txt"
# 接口名称(IPv6 来源)
:local interface "ether1"
# ========== Step 1: 获取当前接口 IPv6 ==========
:local ipv6 [/ipv6 address get [find interface=$interface && global] address]
:if ($ipv6 = "") do={
:log warning ("[".$dname."] 未获取到全局IPv6地址,退出")
:error "No IPv6"
}
# 去掉 /64 或 /128
:set ipv6 [:pick $ipv6 0 [:find $ipv6 "/"]]
:log info ("[".$dname."] 当前IPv6地址为: " . $ipv6)
# ========== Step 2: 读取缓存 ==========
:local lastipv6 ""
:if ([:len [/file find name=$cachefile]] > 0) do={
:set lastipv6 [/file get $cachefile contents]
:set lastipv6 [:pick $lastipv6 0 [:len $lastipv6]]
}
# ========== Step 3: 比较是否变化 ==========
:if ($ipv6 = $lastipv6) do={
:log info ("[".$dname."] IPv6 未变化,无需更新 (" . $ipv6 . ")")
:return
}
# ========== Step 4: 获取 DNSPod 记录 ==========
:local record [/tool fetch url="https://dnsapi.cn/Record.List" \
http-data=("login_token=" . $token . "&format=json&domain=" . $domain . "&sub_domain=" . $subdomain . "&record_type=AAAA") \
as-value output=user]
:set record ($record->"data")
:set record [:pick $record [:find $record "\"records\":"] [:len $record]]
:local recordid [:pick $record ([:find $record "\"id\":\""]+6) [:find $record "\",\"ttl"]]
:local recordip [:pick $record ([:find $record "\"value\":\""]+9) [:find $record "\",\"en"]]
# ========== Step 5: 判断是否更新 ==========
:if ($recordip != $ipv6) do={
:log info ("[".$dname."] 检测到 IPv6 变化,旧:" . $recordip . " → 新:" . $ipv6)
/tool fetch url="https://dnsapi.cn/Record.Ddns" \
http-data=("login_token=" . $token . "&format=json&domain=" . $domain . "&sub_domain=" . $subdomain . "&record_id=" . $recordid . "&record_line_id=0&record_type=AAAA&value=" . $ipv6) \
output=none
:log info ("[".$dname."] IPv6 已更新为 " . $ipv6)
# 保存缓存
/file remove $cachefile
/file print file=$cachefile
/file set $cachefile contents=$ipv6
} else={
:log info ("[".$dname."] DNSPod AAAA 记录已是最新,无需更新")
# 更新缓存文件
/file remove $cachefile
/file print file=$cachefile
/file set $cachefile contents=$ipv6
}