Скрипт для восстановления зависших туннелей IPSec

Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Ответить
Frozer
Сообщения: 49
Зарегистрирован: 01 апр 2013, 13:35

Довольно часто в сети встречаются жалобы на то, что туннели IPSec зависают. Следит за этим призваны опции DPD (Interval и Maximum Features) в настройках туннеля. Манипулирую этими настройками мне не удалось добиться положительных результатов и туннели периодически зависают, особенно при нестабильных каналах связи - помогает только перезагрузка роутеров или очистка Installed SAs. Приведенный ниже скрипт будет сам очищать Installed SAs, если туннель зависнет. Данный скрипт нужно разместить на обоих роутерах.

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

# IPSEC TESTING SCRIPT V.1.0
# Author: Sergey Krivosheyev (frozer@mail.ru)

:local PingCount 5;
# Укажите IP адрес роутера, отличный от того, который обозначает начало туннеля IPSEC (у вас должно быть настроено правило IPSec, по которому обращение этого роутера к другому пойдет через туннель):
:local LocalRouterIP 10.25.25.1;

# Укажите имя туннеля, которое будет отображаться в логах:
:local Name "Office 2";
# Укажите IP адрес начала туннеля (SA Src. Address)
:local LocalTunnelIP 192.168.60.2;
# Укажите IP адрес конца туннеля (SA Dst. Address)
:local RemoteTunnelIP 192.168.60.1;

:local CheckTunnel [/ping $RemoteTunnelIP count=$PingCount src-address $LocalTunnelIP];
:if ($CheckTunnel>0) do={
:local CheckTunnel [/ping $RemoteTunnelIP count=$PingCount src-address $LocalRouterIP];
:local CheckPeer [/ip ipsec remote-peers find remote-address=$RemoteTunnelIP local-address=$LocalTunnelIP state="established"];
:if (($CheckTunnel=0) || ($CheckPeer="")) do={
/ip ipsec installed-sa flush;
:log info ($Name . " tunnel is down - flushing installed SAs");
}
}


Ответить