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

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

Добавлено: 02 апр 2013, 16:35
Frozer
Случается так, что при разрыве соединения 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];
}
}

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

Добавлено: 14 фев 2015, 21:45
LESHIY_ODESSA
Вставьте скрипт в [code], движок форума его подпортил.

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

Добавлено: 15 фев 2015, 18:56
podarok66

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

: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=

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

Добавлено: 04 мар 2015, 18:56
vqd
interface~"<pptp-"

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

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

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

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

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

Добавлено: 04 мар 2015, 19:09
vqd
Да и тебе привет :-)