Рассмотрим ситуацию, когда необходимо менять порт клиента VPN-туннеля WireGuard на MikroTik, если туннель упал и требуется выбрать другой случайный порт для его повторного поднятия.
Собственно, сам скрипт:
/system script
add dont-require-permissions=no name=wg_up owner=sa policy=read,write,test source="# Remote address to ping. Intname, wireguard interface.\r\
\n:local remote \"1.2.3.4\";\r\
\n:local intname \"wireguard1\";\r\
\n\r\
\n:if ([/ping \$remote count=2 interface=\$intname]=0) do={\r\
\n :if ([/ping \$remote count=10 interface=\$intname]=0) do={\r\
\n :log error \"\$intname crashed. Resetting.\";\r\
\n /interface wireguard set \$intname listen-port=0\r\
\n }\r\
\n}"Как вы догадались, значение listen-port=0 позволяет выбрать новый случайный UDP-порт.
Также можно добавить задание в шедулер:
/system scheduler
add interval=2m name=wg_up on-event=":local remote \"1.2.3.4\";\r\
\n:local intname \"wireguard1\";\r\
\n\r\
\n:if ([/ping \$remote count=2 interface=\$intname]=0) do={\r\
\n :if ([/ping \$remote count=10 interface=\$intname]=0) do={\r\
\n :log error \"\$intname crashed. Resetting.\";\r\
\n /interface wireguard set \$intname listen-port=0\r\
\n }\r\
\n}" policy=read,write,test start-date=2026-03-06 start-time=20:10:51
