Скрипт для Mikrotik для переподключения Wireguard

    На просторах интернета нешел скриптик. соус 
    :global Tx
    :global Rx
    /interface/wireguard/peers
    
    # при частых ребутах роутера или других ошибках отключается пир wg, т.к. внезапно прерывается выполнение скрипта
    # решение просто раскомментировать следующую строку и внести имя интерфейса чей пир нужно включить в любом случае, если выключен.
    #:foreach y in=[find where disabled=yes and responder!=yes and interface="wireguard-warp"] do={set $y disabled=no}
    # либо использовать включение по комменту к пиру auto_on
    #:foreach y in=[find where disabled=yes and responder!=yes and comment="auto_on"] do={set $y disabled=no}
    
    # Далее идут варианты строки :foreach i in=, которые взаимоисключающие т.е. сейчас активна строка, можете её закомментировать и раскомментировать другую по необходимости.
    # Исключить подключение wireguard-client по имени интерфейса чтобы скрипт его никогда не трогал
    #:foreach i in=[find where disabled=no and responder!=yes and interface!="wireguard-client"] do={
    :foreach i in=[find where disabled=no and responder!=yes] do={
      :local LocalTx [get $i tx]
      :local LocalRx [get $i rx]
      :local LastHandshake [get $i last-handshake]
      :if (([:tostr $LastHandshake] = "") or (($LastHandshake > [:totime "2m30s"]) and ($Rx->[:tostr $i] = $LocalRx))) do={
        :local rawHeader [:rndstr length=4 from=123456789abcdef]
        :local EndpointAddress [get $i endpoint-address]
        :local EndpointAddressIP $EndpointAddress
        :local EndpointAddressIP [get $i current-endpoint-address]
        :local name [get $i name]
        :local wgDstPort [get $i current-endpoint-port]
        :local interface [get $i interface]
    
        # Сбрасываем исходящий порт на уровне интерфейса
        /interface wireguard set $interface listen-port=0
        :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
        /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
        :delay 1
        /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
        :delay 1
    
        :log info ("Starting WG $EndpointAddress")
        set $i endpoint-address=$EndpointAddress
        set $i disabled=no
      }
      :set ($Tx->[:tostr $i]) $LocalTx
      :set ($Rx->[:tostr $i]) $LocalRx
    }

    Copyright © 2022Powered by Bludit