Открываем консоль:
/system script add name=wg-rotate-port source={
:local iface "ТУТ ИМЯ ВАШЕГО ИНТЕРФЕЙСА"
:local minPort 30000
:local maxPort 50000
# Псевдо-рандом на основе времени + uptime
:local timeNow [/system clock get time]
:local sec [:tonum [:pick $timeNow 6 8]]
:local up [/system resource get uptime]
:local upSec [:tonum [:pick $up ([:len $up]-2) [:len $up]]]
:local rand ( ($sec * $upSec + [:tonum [:pick [/system identity get name] 0 3]]) % ($maxPort - $minPort + 1) )
:local newPort ($minPort + $rand)
:log info ("WG rotate: changed listen-port to " . $newPort . " (seed: " . $sec . "/" . $upSec . ")")
/interface wireguard set [find name=$iface] listen-port=$newPort
# Обновляем firewall (ищем по comment, можете блок ниже убрать, если не используете)
:local fwRule [/ip firewall filter find comment~"КОММЕНТ ПРАВИЛА ИНТЕРФЕЙСА"]
:if ([:len $fwRule] > 0) do={
/ip firewall filter set $fwRule dst-port=$newPort
} else={
:log warning "WG rotate: firewall rule с comment not found!"
}
}Затем добавим смену порта скриптом каждые 3 часа:
/system scheduler add name=wg-port interval=3h on-event=wg-rotate-port start-time=00:00:00
Ну и проверьте что все ок:
/system script run wg-rotate-port
