Страница 1 из 1

Зависают VPN? мы идём к вам.....

Добавлено: 31 май 2015, 19:02
EdkiyGluk
Доброго времени суток, Форумчане))
На форуме уже встречался скрипт призванный убивать зависшие VPN ... Вот вам моя версия скрипта, который заливается на удалённые Микротики, которые стучаться VPN-ном на центральный. Его плюшка в том, что скрипт не нужно переписывать под каждую железку, он будет всё делать сам. Единственное, что нужно будет сделать, это поправить имена своих VPN клиентов и добавить в начало их имён "VPN_"


Код: Выделить всё


#Made by EdkiyGluk
:global cnt 3
:foreach i in=[/ip address find interface~"VPN_"] do={ 

:global remaddr [/ip address get $i network]
:global locaddr [:pick [/ip address get $i address ] 0 ([:len [/ip address get $i address ]]-3)]
:global vpnname [/ip address get $i interface]
:global check [/ping $remaddr src-address=$locaddr count=$cnt]
:if ($check <2) do={
:interface disable $vpnname
:log warning ("VPN " . $vpnname . " disable")
:interface enable $vpnname
:log warning ("VPN " . $vpnname . " enable")
}
}


====
Следующий скрипт будет направлен на установку на центральном Микротике... Но я пока его не написал :-[

Re: Зависают VPN? мы идём к вам.....

Добавлено: 07 июл 2015, 16:33
wolf_ktl
а смысл ? у меня в текстовике готовые команды лежат, меня имя и пароль и все ))

Re: Зависают VPN? мы идём к вам.....

Добавлено: 11 май 2020, 12:59
drpioneer
Добрый день.

Этот скрипт с минимальными изменениями уже несколько лет трудится на благо моих VPN-соединений.
За все время эксплуатации только положительное мнение о его работе.
У себя на клиентах запускаю его по расписанию раз в минуту.
Добавлено автоматическое включение VPN-интерфейса, если по какой-то причине он выключился.

Код: Выделить всё


# Script VPN connection error handler by EdkiyGluk
# http://forummikrotik.ru/viewtopic.php?f=14&t=6258
# tested on ROS 6.48
# updated 2021/02/14

:do {
    :local nameVPN "VPN";
    :local countPing 3;
    if ([ /interface find name~$nameVPN; ] != "") do={
        /interface set [ /interface find name~$nameVPN disabled=yes; ] disabled=no;
        :foreach activeVPN in=[ /ip address find interface~$nameVPN; ] do={
            :do {
                :local remoteAddress [ /ip address get $activeVPN network; ];
                :local localAddress  [ :pick [ /ip address get $activeVPN address; ] 0 ([ :len [ /ip address get $activeVPN address; ]] - 3)];
                :local interfaceVPN  [ /ip address get $activeVPN interface; ];
                :local checkPing [ /ping $remoteAddress src-address=$localAddress count=$countPing; ];
                :if ($checkPing < ($countPing / 3 * 1)) do={
                    /interface disable $interfaceVPN;
                    delay delay-time=3s;
                    /interface enable $interfaceVPN;
                    :log warning (">>> VPN interface ".$interfaceVPN." reactivated");
                }
            } on-error={ :log warning (">>> Script error. Working VPN interface not found"); }
        }
    } else={ :log warning (">>> VPN interface '".$nameVPN."' not found"); }
}