В маршрутизаторах Mikrotik, а именно в RB941-2nD, иногда возникает проблема с зависшими peers в Firewall. Маршрутизатор ничего не может сделать с этой проблемой сам, поэтому приходится подключаться к нему вручную и производить удаление зависших peer на mikrotik. Это вычисляется по тому, что в логах шлюза, к которому пытается подключиться маршрутизатор, начинают появляться такие записи:
first L2TP UDP packet received from [ip-address]
Много повторов с коротким интервалом времени
Чтобы не делать это руками используем встроенный планировщик и скрипт для него:
{
:log info "IPSec Watchdog Started"
##### The host you want to ping######
:local HOST "10.74.0.1"
##### Interface to Remote Network#######
:local GW "company"
#### Ping Time out Increase or decrease as Required #####
:local TIMEOUT "100ms"
#### How Many try's ######
:local COUNT "10"
### If less than 8 successful reply's Restart IPSec#####
:local LESSTHAN "8"
##################################DONT EDIT BELOW###################################
:log info "Looking for $HOST at $GW"
:log info "Checking 10.74.0.1 via $GW"
:if ([/ping interface=$GW $HOST interval=$TIMEOUT count=$COUNT]<$LESSTHAN) \
do={log error "$HOST at $GW is unreachable. Forcing IPSec Restart"; /ip ipsec peer remove $GW} \
else {:log warning "IPSec Tunnel to $GW is OK Nothing to do"}
}
log info – запись в логе о том, что скрипт запустился
HOST – адрес шлюза, к которому подключается маршрутизатор
GW – интерфейс на маршрутизаторе, через который выполняется подключение
TIMEOUT – время ожидания ответа от команды Ping
COUNT – количество попыток
LESSTHAN – количество удачных попыток, если меньше этого числа, то срабатывает сброс IPSec
Добавление через Winbox
System > Scheduler > +
Установим необходимый интервал запуска скрипта в поле Interval, например, 5 минут.
Вставим скрипт в поле On Event. Вот он без комментариев:
{:log info "IPSec Watchdog Started"; :local HOST "10.74.0.1"; :local GW "company"; :local TIMEOUT "100ms"; :local COUNT "10"; :local LESSTHAN "8"; :log info "Looking for $HOST at $GW"; :log info "Checking 10.74.0.1 via $GW"; :if ([/ping interface=$GW $HOST interval=$TIMEOUT count=$COUNT]<$LESSTHAN) \
do={log error "$HOST at $GW is unreachable. Forcing IPSec Restart"; /ip ipsec peer remove $GW} \
else {:log warning "IPSec Tunnel to $GW is OK Nothing to do"}}
Добавление скрипта через терминал
Открываем терминал в Winbox или подключаемся к маршрутизатору через SSH, в этой команде сразу создается и задача в планировщике и тело задачи. Жирным выделены записи, которые Вам нужно заменить на свои. Выполняем команду:
system scheduler add name=company start-time=startup interval=00:10:00 on-event={{:log info "IPSec Watchdog Started"; :local HOST "10.74.0.1"; :local GW "company"; :local TIMEOUT "100ms"; :local COUNT "10"; :local LESSTHAN "8"; :log info "Looking for $HOST at $GW"; :log info "Checking 10.74.0.1 via $GW"; :if ([/ping interface=$GW $HOST interval=$TIMEOUT count=$COUNT]<$LESSTHAN) \
do={log error "$HOST at $GW is unreachable. Forcing IPSec Restart"; /ip ipsec peer remove $GW } \
else {:log warning "IPSec Tunnel to $GW is OK Nothing to do"}}}
/
Результат
Через указанный выше интервал времени планировщик будет запускать скрипт для проверки, выглядит в логах это так:
Если происходит зависание, то скрипт производит удаление зависших peer на mikrotik и перезапускает соединение: