У меня и ip порты жестко прописаны на разных микротиках, поэтому скрипт с ожиданием сброса порта. Не требует указания портов и ip. Все берет из пира. Скрипт ищет активные пиры с остановившейся передачей, разрывает соединение, ждет 7 минут, посылает мусор и включает пир обратно. Нужно поставить в шедулер с интервалом раз в 1 минуту. 🔴 Осторожно, скрипт удаляет все stream, packet-template в генераторе трафика.
:global Tx
:global Rx
/interface/wireguard/peers
:foreach i in=[find where disabled=no] do={
:local LocalTx [get $i tx]
:local LocalRx [get $i rx]
:local LastHandshake [get $i last-handshake]
:if (([:tostr $LastHandshake] = "") or (($LastHandshake > [:totime "2m"]) and ($Rx->[:tostr $i] = $LocalRx))) do={
:local rawHeader [:rndstr length=4 from=123456789abcdef]
:local EndpointAddress [get $i endpoint-address]
:local EndpointAddressIP $EndpointAddress
:do {:set EndpointAddressIP [:resolve $EndpointAddress] } on-error={:log info ("EndpointAddress is ip: $EndpointAddressIP") }
:local name [get $i name]
:local wgDstPort [get $i endpoint-port]
:local interface [get $i interface]
:local srcport [/interface/wireguard/get $interface listen-port];
:log info ("WG name is $name, EndpointAddress $EndpointAddress , LastHandshake $LastHandshake, LastTx " . $Tx->[:tostr $i] . ", CurrentTx $LocalTx, LastRx " . $Rx->[:tostr $i] . ", CurrentRx $LocalRx")
:log info ("WG Currentinterface $interface, srcport $srcport, EndpointAddressIP $EndpointAddressIP, DstPort $wgDstPort")
:log info ("Generating spam for RKN")
set $i disabled=yes
:delay 7m
/tool traffic-generator stream remove [find]
/tool traffic-generator packet-template remove [find]
:delay 1
/tool/traffic-generator/packet-template/add header-stack=mac,ip,udp,raw ip-dst=$EndpointAddressIP name=packet-template-wg raw-header=$rawHeader special-footer=no udp-dst-port=$wgDstPort udp-src-port=$srcport
/tool traffic-generator stream add disabled=no mbps=1 name=stream1 id=3 packet-size=1450 pps=0 tx-template=packet-template-wg
:delay 1
/tool traffic-generator quick duration=4
:log info ("WG $EndpointAddress is now up")
set $i endpoint-address=$EndpointAddress
set $i disabled=no
}
:set ($Tx->[:tostr $i]) $LocalTx
:set ($Rx->[:tostr $i]) $LocalRx
}