疫情期间为了看剧,搭了个只能通过WireGuard内网访问的DNS流媒体解锁服务器,但是这个服务器的公网IP是动态IP,为了方便连接,自己配了DDNS,但是发现RouterOS不会自动更新DDNS解析IP,只好自己写个脚本用计划任务定期更新RouterOS上的WireGuard Endpoint IP。
WireGuard DDNS更新脚本
单接口单Peer脚本
单接口且单个Peer,可以通过查找指定接口名,并更新接口Peer的IP。
:local wgInterface
:local wgPeerDns
:set wgInterface "your_interface_name"
:set wgPeerDns "your_ddns_domain"
:if ([interface wireguard peers get number=[find interface="$wgInterface"] value-name=endpoint-address] != [resolve $wgPeerDns]) do={
interface wireguard peers set number=[find interface="$wgInterface"] endpoint-address=[/resolve $wgPeerDns]
}
单接口多Peer脚本
如果WireGuard接口有多个Peer,可以给每个Peer添加Comment,然后通过Comment找到指定Peer并更新其IP。
:local wgPeerComment
:local wgPeerDns
:set wgPeerComment "Peer #1 Comment (Your comment)"
:set wgPeerDns "your_ddns_domain"
:if ([interface wireguard peers get number=[find comment="$wgPeerComment"] value-name=endpoint-address] != [resolve $wgPeerDns]) do={
interface wireguard peers set number=[find comment="$wgPeerComment"] endpoint-address=[/resolve $wgPeerDns]
}
脚本及计划任务权限
本着不提供不必要权限的原则,给脚本和计划任务设置了Read、Write、Test权限。
相关参考资料
https://blog.spaps.de/mikrotik-routeros-wireguard-dynamic-dns-endpoint-refresh/