Отключение зависших VPN клиентов

Здесь выкладываем скрипты
Ответить
Frozer
Сообщения: 44
Зарегистрирован: 01 апр 2013, 13:35

02 апр 2013, 16:35

Случается так, что при разрыве соединения VPN клиенты зависают на роутере и заново не удается подключиться. Если конечно вы не используете "Only One", то клиент без проблем подключится, но получит новый IP адрес. В моем случае это недопустимо и я разрешаю подключаться только под выделенным клиенту IP для того, что-бы была возможна маршрутизация в сторону этого клиента (это единственный способ подключения к клиентам за NAT провайдера). Так вот, в похожих случаях, зависший клиент может висеть сколь угодно долго. Можно конечно ограничивать сессии или период бездействия, но ограничение сессии будет периодически прерывать передачу данных, а ограничение периода бездействия будет работать не всегда, если включена проверка работоспособности маршрута.

Я нашел решение данной проблемы, написав небольшой скрипт. Он не будет работать с клиентами (будет их отключать), которые не отвечают на пинг-запросы, поэтому прежде позаботьтесь о том, что-бы виндовые и другие клиенты правильно настроили файрволы. В случае, если подключаются только другие микротики, то все работает вообще идеально.

Скрипт имеет 2 блока (проверку PPTP и L2TP клиентов).

Я запускаю данный скрипт каждую минуту через планировщик.

# VPN TESTING SCRIPT V.1.1.2
# Author: Sergey Krivosheyev (frozer@mail.ru)

:local PingCount 5;
# укажите адрес вашего VPN сервера:
:local SRCAddress 10.25.50.1;

:foreach i in=[/ip address find interface~"<pptp-"] #do={
:local CheckInt [/ping [/ip address get $i network] #count=$PingCount src-address $SRCAddress];
if ($CheckInt = 0) do={
:log info ("Client " . [/ip address get $i interface] . " is down - removing");
/interface pptp-server remove [/ip address get $i interface];
}
}

:foreach i in=[/ip address find interface~"<l2tp-"] do={
:local CheckInt [/ping [/ip address get $i network] count=$PingCount src-address $SRCAddress];
if ($CheckInt = 0) do={
:log info ("Client " . [/ip address get $i interface] . " is down - removing");
/interface l2tp-server remove [/ip address get $i interface];
}
}


Аватара пользователя
LESHIY_ODESSA
Сообщения: 2
Зарегистрирован: 14 фев 2015, 17:14

14 фев 2015, 21:45

Вставьте скрипт в [code], движок форума его подпортил.


Аватара пользователя
podarok66
Модератор
Сообщения: 3433
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

15 фев 2015, 18:56

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

:foreach i in=[/ip address find interface~"<pptp-"] #do={
:local CheckInt [/ping [/ip address get $i network] #count=$PingCount src-address $SRCAddress];

Вот эти строки непонятны? Хотелось бы увидеть подробный комментарий по поводу interface~"<pptp-" , #do= , #count=


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
vqd
Модератор
Сообщения: 3604
Зарегистрирован: 26 сен 2013, 14:20
Откуда: НСК
Контактная информация:

04 мар 2015, 18:56

interface~"<pptp-"

Содержит в имени интерфейса "<pptp-"

Тобиш "<pptp-123>"~"<pptp-" есть истина
Так же можно тупо написать interface~"pptp"


Есть интересная задача и бюджет? http://mikrotik.site
Аватара пользователя
podarok66
Модератор
Сообщения: 3433
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

04 мар 2015, 19:05

Здравствуй, уважаемый. Рад видеть тебя на этом форуме... :ya_hoo_oo:
Вот меня и смутил значок <. А дальше вообще часть строки закомментирована, словно автор не понимал, что за кусок кода он привел)))


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
vqd
Модератор
Сообщения: 3604
Зарегистрирован: 26 сен 2013, 14:20
Откуда: НСК
Контактная информация:

04 мар 2015, 19:09

Да и тебе привет :-)


Есть интересная задача и бюджет? http://mikrotik.site
Ответить