MikroTik RouterOS V7.20.6 自动换WireGuard随机端口,保证WG100%在线

2026-01-10T12:49:56

前言

由于我们地区的运营商比较奇葩,WireGuard每过一段时间端口就被封堵了,很头疼,因此有了本文,这个用处很广泛,懂得人,都知道怎么利用

脚本

# =========================================
# ROS 7.20.6 WireGuard 监听端口伪随机脚本
# 条件:ping 192.168.230.1 连续 3 次不通
# 接口名:IEPL
# 端口范围:29201 - 29300
# 随机源:系统时间(秒) 
# =========================================
# 这是要修改的地方
:local wgName "IEPL"
:local minPort 29201
:local maxPort 29300
:local checkIP "192.168.230.1"

# ===============================
# 1:进行 3 次 ping 测试
# ===============================
:local pingResult [/ping $checkIP count=3 interval=500ms]

# 如果 ping 成功次数 >=1,认为链路正常,直接退出
:if ($pingResult > 0) do={
    :log info ("[WG-PORT-ROTATE] ping ok, skip port change, success=" . $pingResult)
    :return
}

# ===============================
# 2:ping 全失败,开始旋转端口
# ===============================

# 获取当前系统时间(HH:MM:SS)
:local t [/system clock get time]

# 取“秒”部分
:local sec [:tonum [:pick $t 6 8]]

# 端口区间长度
:local range ($maxPort - $minPort + 1)

# 计算新端口(伪随机)
:local newPort ($minPort + ($sec % $range))

# 设置 WireGuard 监听端口
/interface wireguard set [find where name=$wgName] listen-port=$newPort

# 日志记录
:log warning ("[WG-PORT-ROTATE] ping failed x3, rotate port => " . $wgName . " : " . $newPort)

最后设置5分钟定时任务即可,不要小于30秒,我是设置5分钟,因为我们这边是大概六七个小时会封堵,所以我5分钟足以,大家也可以设置到1分钟

当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »