Скрипт проверяет доступность внешних интерфейсов удалённой площадки, и если они доступны проверяет внутренние адреса удалённой сети.
При необходимости сбрасывает установленные SA.
############## # Flush SA script for RouterOS # Arthur 25.01.2013 ############## :local Target Sklad :local IPWatchServerExt1 8.x.x.8 :local IPWatchServerExt2 8.x.x.4 :local IPWatchServerInt1 10.x.x.1 :local IPWatchServerInt2 10.x.x.2 ####### :local StatusRemote1 [/ping $IPWatchServerExt1 count=3] :local StatusRemote2 [/ping $IPWatchServerExt2 count=3] ####### :if (($StatusRemote1=0) && ($StatusRemote1=0)) do={ :log info "Connection to $Target lost!!!" } else={ :log info "Connection to $Target is OK!!!" :local StatusIpsecT1 [/ping $IPWatchServerInt1 count=3] :local StatusIpsecT2 [/ping $IPWatchServerInt2 count=3] :if (($StatusIpsecT1=0) && ($StatusIpsecT2=0)) do={ :log info "IPSEC tunnel with $Target is down: Flushing Installed SA !!!" /ip ipsec installed-sa flush sa-type=all } else={ :log info "IPSEC tunnel with $Target is OK !" }} |
Я так понимаю что
IPWatchServerExt1
IPWatchServerExt2 — это внешние адреса для IPSEC, а INT — внутренние?
/ping $IPWatchServerExt1 count=3. «count=3» это будет 3 попытки пинга?
$StatusRemote1=0 — Нуль это тоже что и timeout?
IPWatchServerInt1
$IPWatchServerInt2 — это внутренние адреса?
Пример для 2 туннелей IPSEC?
Если вопросы глупые прошу прощения, недавно стал скриптами интересоваться. Спасибо!!!
Господа, я разобрался, все вопросы снимаются кроме одного
:if (($StatusRemote1=0) && ($StatusRemote1=0)) Здесь ошибка? вторая переменная должна быть $StatusRemote2?
И можно сделать вот так? — :if (($StatusRemote1=0) OR ($StatusRemote1=0)) чтобы даже при падании одного туннеля из двух у меня ключи сбрасывались на всех каналах?
Создан ipsec между двумя микротик.
Пинги с локальных машин проходят в другую локальную сеть, а вот с самого микротика нет. Что нужно сделать, чтобы пинги с самого микротика в другую локальную сеть шли? а то в скрипте пингуешь адреса другой локальной сети, а они всегда недоступны.
Кириллу:
>:if (($StatusRemote1=0) && ($StatusRemote1=0)) Здесь ошибка? вторая переменная должна быть $StatusRemote2?
Да, очепятка.
>И можно сделать вот так? — :if (($StatusRemote1=0) OR ($StatusRemote1=0)) чтобы даже при падании одного туннеля из двух у меня ключи сбрасывались на всех каналах?
Проверяются не тоннели, а доступность работоспособность активного тоннеля 1 и 2 (например пингуется внутренний ип удалённого микротика и таргет-сервер)
Сергею:
Смотреть что в НАТ-е, роутах и правилах фаервола.
> Пинги с локальных машин проходят в другую локальную сеть, а вот с самого микротика нет.
------------
Tools — Ping
укажи локальный интерфейс, тогда пинги пойдут
Спасибо, что поделились!