当前位置:首页 > Mikrotik > 正文

自动从公网接口获取IP -> 更新到DNSPod RouterOS v6.49.18 -(IPv4)

# ===============================
# RouterOS v6.49.18 - DNSPod DDNS 更新脚本(IPv4)
# 自动从公网接口获取IP -> 更新到DNSPod
# ===============================

# DNSPod API Token(格式:ID,Key)
:local token "0000,0000000000000000000000000"

# 主域名与子域名
:local domain "0cloud.cc"
:local subdomain "gxq"
:local dname ($subdomain . "." . $domain)

# 获取公网 IP(使用自建接口或可靠源)
/tool fetch url="http://ip.0cloud.cc/ip/" mode=http dst-path="current_ip.txt"
:local ipaddr [/file get current_ip.txt contents]
/file remove current_ip.txt

# 去掉换行符
:set ipaddr [:pick $ipaddr 0 [:len $ipaddr]]

# 校验IP格式
:if ([:len $ipaddr] < 7 || [:find $ipaddr "."] = nil) do={
    :log warning ("[".$dname."] 获取公网IP失败:" . $ipaddr)
    :error "公网 IP 获取失败"
}

# 获取 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=A" \
    as-value output=user]

:set record ($record->"data")
:set record [:pick $record [:find $record "\"records\":"] [:len $record]]

# 提取记录ID与当前解析IP
:local recordid [:pick $record ([:find $record "\"id\":\""]+6) [:find $record "\",\"ttl"]]
:local recordip [:pick $record ([:find $record "\"value\":\""]+9) [:find $record "\",\"en"]]

# 判断是否更新
:if ($recordip != $ipaddr) do={
    :log info ("[".$dname."] 检测到IP变化:" . $recordip . " → " . $ipaddr)
    /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&value=$ipaddr" \
        output=none
    :log info ("[".$dname."] 已更新DNSPod记录 → " . $ipaddr)
} else={
    :log info ("[".$dname."] IP未变化,无需更新 → " . $ipaddr)
}

更新时间 2025-10-12