RouterOS HE.NET DDNSv6 脚本
RouterOS 的 Cloud 其实是支持 Push IPv6 地址的,会很“智能”的推送默认 IPv6 的前缀地址,但如果网络环境是多线的情况下,这个智能就显得比较鸡肋。所以我们一般把 Cloud 的 IPv6 Support 关掉,找第三方的服务去做 DDNS。
以下脚本可以帮助你将 ROS 某个接口的 IPv6 地址,推送给 HE.NET 的 DDNS 上。这是完全依赖 ROS 命令和 HE.NET 官方接口的,无需借助第三方服务器,安全可靠。
```:global hostname "xxxx.ddns6.16iot.cn"
:global password "p@ssw0rd2022"
:global intv6 "pppoe-out"
:log info ("[ipv6_ddns]" . $intv6 . " is running.")
:global "address_v6" [/ipv6 address get [find interface=$intv6 global ] address ]
:global "my_ipv6" [:pick $"address_v6" 0 [:find $"address_v6" "/"]]
:if ([:len $"my_ipv6"] >8) do={
:log info ("[ipv6_ddns]" . $intv6 . " ipv6 address is " . $"my_ipv6")
:global "recode_now" [:resolve $hostname]
:log info ("[ipv6_ddns]" . $hostname . " AAAA record is " . $"recode_now")
:if ($"recode_now" !=$"my_ipv6") do={
:log info ("[ipv6_ddns]" . $hostname . " begin to change AAAA record")
:global "ddns_status" [/tool fetch url="https://dyn.dns.he.net/nic/update" http-data="hostname=$hostname&password=$password&myip=$"my_ipv6"" output="none"]
:delay 5s
:log info ("[ipv6_ddns]" . $hostname . " : the record has changed")
} else={
:log info ("[ipv6_ddns]" . $hostname . " : the record has not changed")
};
} else={
:log error ("[ipv6_ddns]" . $intv6 . " ipv6 address is less than 8")
};
```
解释:
- hostname:域名,就是你要把 AAAA 记录推给谁。这个记录一定是 HE.NET 已经有的记录。
- password:更新密码,HE.NET 记录更新密码。
- intv6:哪个接口,就是你要把哪个接口的 IPv6 地址推给域名。
- Q:要把域名的 DNS 换到 HE.NET 吗?
[图片: 20220213014434]
https://static.txisfine.cn/upload/20220213014434.png/pkwatermark
[图片: 20220213014155]
https://static.txisfine.cn/upload/20220213014155.png/pkwatermark
- Q:更新密码要怎么找?
[图片: 20220213014555]
https://static.txisfine.cn/upload/20220213014555.png/pkwatermark
- Q:ROS 要更新的接口在哪看?
[图片: 20220213014837]
https://static.txisfine.cn/upload/20220213014837.png/pkwatermark
- Q:脚本放哪?