Отключение зависших VPN клиентов
Добавлено: 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];
}
}
Я нашел решение данной проблемы, написав небольшой скрипт. Он не будет работать с клиентами (будет их отключать), которые не отвечают на пинг-запросы, поэтому прежде позаботьтесь о том, что-бы виндовые и другие клиенты правильно настроили файрволы. В случае, если подключаются только другие микротики, то все работает вообще идеально.
Скрипт имеет 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];
}
}