给你一个 dnspod 的 routeros ddns 脚本,在主路由上做 ddns 。弄个便宜的域名就行了。
###程序执行完需要较长时间,请耐心等待,不要反复执行,建议放在 PPP 模板里 ON-UP 使用###
###注意事项:子域名请尽量全部大于 3 位,如果子域名列表里同时存在
1.x.com 和
11.x.com 记录时会出现误判###
###注意事项:使用 V4V6 同时更新的域名,顶级域名必须一致,否则会因为缓存域名 ID 导致后续更新失败###
###定义必须变量#####
###定义 DNSPOD 的 TOKEN###
:local mytoken "XXX,XXX"
###定义自己的需更新域名(不需要更新的 IP 类型留空即可)###
:global mydomains4 "域名 t"
:global mydomains6 "域名 t"
###定义自己的需更新的拨号接口###
:global myint "pppoe-out1"
###以下内容无需修改###
###预判断域名是否为双栈###
:global v4putex ""
:global v6putex ""
:if ($mydomains4 = $mydomains6) do={:log error "检测到当前更新域名使用双栈。";:global v4putex "&offset=0&length=1";:global v6putex "&offset=1&length=1";}
:if ([:len $mydomains4] >0) do={
###开始 IPV4 获取工作,可自行按需调整###
:global mydomain41 [:pick $mydomains4 ([:find $mydomains4 "."] +1) [:len $mydomains4]]
:global mydomain42 [:pick $mydomains4 0 [:find $mydomains4 "."]]
:global myipv4 [/ip address get [find interface=$myint] address]
:set myipv4 [:pick $myipv4 0 [:find $myipv4 "/"]]
###开始 DNSPOD 处理 IPV4 工作,以下请勿修改###
:log error "DNSPOD 脚本执行 IPV4 更新开始"
:do [/tool fetch url="
https://dnsapi.cn/Record.List" http-data="login_token=$mytoken&format=json&domain=$mydomain41&sub_domain=$mydomain42&$v4putex"]
:delay 5s
:global reprec [/file get [find name="Record.List"] contents]
:if ([:len [:find $reprec "u7a7a"]] >0) do={
/file remove [find name="Record.List"]
:log error "DNSPOD 因为没有对应子域名,尝试自己 NEW 一个。"
:global myipv4
:do [/tool fetch url="
https://dnsapi.cn/Record.Create" http-data="login_token=$mytoken&format=json&domain=$mydomain41&sub_domain=$mydomain42&value=$myipv4&record_type=A&record_line=%e9%bb%98%e8%ae%a4" keep-result=no]
:delay 5s
:do [/tool fetch url="
https://dnsapi.cn/Record.List" http-data="login_token=$mytoken&format=json&domain=$mydomain41&sub_domain=$mydomain42"]
:delay 5s
:global reprec [/file get [find name="Record.List"] contents]
}
:if ([:len [:find $reprec "u6210"]] >0) do={
:global dnspodf [/file get [find name="Record.List"] contents]
:global fdend [:find $dnspodf ("\"".$mydomain42."\"")]
:global fdinfo [:pick $dnspodf 0 $fdend]
:while ([:len [:find $fdinfo "{"]] > 0) do={
:global fdinfo [:pick $fdinfo ([:find $fdinfo "{"] +1) [:len $fdinfo]]}
:global fdinfo [:pick $fdinfo 6 [:len $fdinfo]]
:global fdinfo [:pick $fdinfo 0 [:find $fdinfo "\","]]
:global recordid $fdinfo
/file remove [find name="Record.List"]
:global myipv4
:if ([:len [:find $dnspodf $myipv4]] >0) do={
:log error ("DNSPOD 放弃更新,IPV4 没有变化。")
} else={
:do [/tool fetch url="
https://dnsapi.cn/Record.Modify" http-data="login_token=$mytoken&format=json&domain=$mydomain41&record_id=$recordid&sub_domain=$mydomain42&value=$myipv4&record_type=A&record_line=%e9%bb%98%e8%ae%a4"]
:delay 5s
:global reprec [/file get [find name="Record.Modify"] contents]
/file remove [find name="Record.Modify"]
:if ([:len [:find $reprec "u6210"]] >0) do={
:log error ("DNSPOD 更新 IPV4 成功。当前 IPV4 为:".myipv4)
} else={
:log error "DNSPOD 更新 IPV4 失败"
}}}
:log error "DNSPOD 执行脚本 IPV4 更新完毕"}
:if ([:len $mydomains6] >0) do={
###开始 IPV6 获取工作,可自行按需调整###
:global mydomain61 [:pick $mydomains6 ([:find $mydomains6 "."] +1) [:len $mydomains6]]
:global mydomain62 [:pick $mydomains6 0 [:find $mydomains6 "."]]
:global myipv6 [/ip address get [find interface=$myint] address]
:set myipv6 [:pick $myipv6 0 [:find $myipv6 "/"]]
###有的朋友这里 V6 使用 release 会有问题,可更换为 renew 尝试,和运营商有关###
/ipv6 dhcp-client renew [find interface=$myint]
:delay 3s
:global myipv6 [/ipv6 dhcp-client get [find interface=$myint status=bound] prefix]
:set myipv6 [:pick $myipv6 0 [:find $myipv6 "/"]]
###开始 DNSPOD 处理 IPV6 工作,以下请勿修改###
:log error "DNSPOD 脚本执行 IPV6 更新开始"
:do [/tool fetch url="
https://dnsapi.cn/Record.List" http-data="login_token=$mytoken&format=json&domain=$mydomain61&sub_domain=$mydomain62&$v6putex"]
:delay 5s
:global reprec [/file get [find name="Record.List"] contents]
:if ([:len [:find $reprec "u7a7a"]] >0) do={
/file remove [find name="Record.List"]
:log error "DNSPOD 因为没有对应子域名,尝试自己 NEW 一个。"
:global myipv6
:do [/tool fetch url="
https://dnsapi.cn/Record.Create" http-data="login_token=$mytoken&format=json&domain=$mydomain61&sub_domain=$mydomain62&value=$myipv6&record_type=AAAA&record_line=%e9%bb%98%e8%ae%a4" keep-result=no]
:delay 5s
:do [/tool fetch url="
https://dnsapi.cn/Record.List" http-data="login_token=$mytoken&format=json&domain=$mydomain61&sub_domain=$mydomain62"]
:delay 5s
:global reprec [/file get [find name="Record.List"] contents]}
:if ([:len [:find $reprec "u6210"]] >0) do={
:global dnspodf [/file get [find name="Record.List"] contents]
:global fdend [:find $dnspodf ("\"".$mydomain62."\"")]
:global fdinfo [:pick $dnspodf 0 $fdend]
:while ([:len [:find $fdinfo "{"]] > 0) do={
:global fdinfo [:pick $fdinfo ([:find $fdinfo "{"] +1) [:len $fdinfo]]}
:global fdinfo [:pick $fdinfo 6 [:len $fdinfo]]
:global fdinfo [:pick $fdinfo 0 [:find $fdinfo "\","]]
:global recordid $fdinfo
/file remove [find name="Record.List"]
:global myipv6
:if ([:len [:find $dnspodf $myipv6]] >0) do={
:log error ("DNSPOD 放弃更新,IPV6 没有变化。")
} else={
:do [/tool fetch url="
https://dnsapi.cn/Record.Modify" http-data="login_token=$mytoken&format=json&domain=$mydomain61&record_id=$recordid&sub_domain=$mydomain62&value=$myipv6&record_type=AAAA&record_line=%e9%bb%98%e8%ae%a4"]
:delay 5s
:global reprec [/file get [find name="Record.Modify"] contents]
/file remove [find name="Record.Modify"]
:if ([:len [:find $reprec "u6210"]] >0) do={
:log error ("DNSPOD 更新 IPV6 成功。当前 IPV6 为:".myipv6)
} else={
:log error "DNSPOD 更新 IPV6 失败"
}}}
:log error "DNSPOD 执行脚本 IPV6 更新完毕"}