Сброс зависших соединений при переключ на резервный канал

Обсуждение ПО и его настройки
Ответить
nitro
Сообщения: 17
Зарегистрирован: 03 июл 2013, 04:41

Здравствуйте всем.
Основа http://mikrotik.ru/forum/posting.php?mo ... =15&t=3938
"Переключение реализовано через Distance в роутах. "

Надо сделать так, пинговать только основной канал на несколько ресурсов и если все они не пингуются только! на одном канале, то выполнить команду по сбросу зависших соединений и выполнить когда соединение восстановилось

Я так понял пинги одновременно на все это так?
:local PingTargets {194.87.0.50; 87.250.250.203; 8.8.8.8; 93.158.134.11; шлюз провайдера}
Иногда у провайдера "заканчиваются деньги на интернет" по этому шлюз доступен

Сброс зависших соединений
foreach i in=[/ip firewall connection find] do={/ip firewall connection remove $i}

Проблема в том, что sip телефон не подключается и вроде из-за этого ovpn на удалённой точке не хочет подключаться к резервному каналу. Хотя на другой точке проходит нормально.
Прошивка 5.25

Пишите свои варианты.


vqd
Модератор
Сообщения: 3605
Зарегистрирован: 26 сен 2013, 14:20
Откуда: НСК
Контактная информация:

:local PingTargets {194.87.0.50; 87.250.250.203; 8.8.8.8; 93.158.134.11; шлюз провайдера}

Это просто массив

foreach i in=[/ip firewall connection find] do={/ip firewall connection remove $i}

с большой долей вероятности не отработает и вылетит с ошибкой но в этом методе можно прикрутить обработку ошибки, да и зачем грохать все соединения сразу то???

Опять же убить все соединения можно проще:
/ip firewall connection remove [find ]


Есть интересная задача и бюджет? http://mikrotik.site
nitro
Сообщения: 17
Зарегистрирован: 03 июл 2013, 04:41

Нашёл скрипт, немного подредактировал.
:log info "*************************************"
:log info " vvod peremennih"
:log info "*************************************"
#Glavniy interface name
:local MainIf "ISP1"

:log info "*************************************"
:log info " End peremennih"
:log info "*************************************"

:local PingCount 3
:log info "*************************************"
:log info " Proverka interneta"
:log info "*************************************"

#shluz ISP1
:local PingTarget1 194.87.0.50

#ya.ru
:local PingTarget2 87.250.250.203

#google dns
:local PingTarget3 8.8.8.8
:log info "******* servers***********************"


#Check main internet connection
:local MainIfInetOk false;

:log info "pinguem internet"
:log info "******* ping***********************"
:local PingResult1 [/ping $PingTarget1 count=$PingCount interface=$MainIf]
:log info "******* ping $PingTarget1***********************"
:local PingResult2 [/ping $PingTarget2 count=$PingCount interface=$MainIf]
:log info "******* ping $PingTarget2***********************"
:local PingResult3 [/ping $PingTarget3 count=$PingCount interface=$MainIf]
:log info "******* ping $PingTarget3***********************"

:set MainIfInetOk (($PingResult1 + $PingResult2 + $PingResult3) >= (2 * $PingCount))

:log info "test internet $MainIfInetOk"
:if ($MainIfInetOk = false) do={
/log error "Internet upal"
#Glavniy interface upal
/ip firewall connection remove [find ] (надо что бы тут находил соединения привязанные к не действующему шлюзу и грохал)
}
:log info "******* ping***********************"
:put "MainIfInetOk=$MainIfInetOk"

:if ($MainIfInetOk = true) do={
/ip firewall connection remove [find ] (надо что бы тут находил соединения привязанные к не действующему шлюзу и грохал)
:log info "Internet OK"
}

Ну может кто подсказать строчку - находил соединения привязанные к не действующему шлюзу и грохал их?
И можно ли скрипт привязать к событию, что бы не каждую минуту включал скрипт?


nitro
Сообщения: 17
Зарегистрирован: 03 июл 2013, 04:41

Кто в скриптах разбирается, взгляните верно написал или где ошибка?
3 действия:
1 пингуем на главном интерфейсе ресурсы и пока пинг есть, то скрипт не выполняем
2 Если пинга нет, выполнить сброс "зависших" соединений (:foreach i in=[/ip firewall connection find assured=no] do={
/ip firewall connection remove $i)
3 Если пинг появился то снова выполнить сброс соединений и ждать пока пинг пропадёт.


local ISPVT vt
:local PingCount 1
:local PingTargets {194.87.0.50; 87.250.250.203; 8.8.8.8; 93.158.134.11; 8.8.4.4}
:local ISPVTInetOk false
:local VTPings 0
:foreach host in=$PingTargets do={

: local res [/ping $host count=$PingCount interface=$ISPVT]

: set VTPings ($VTPings + $res)
}

:set ISPVTInetOk ($VTPings >= 1)

:if ($ISPVTInetOk = false) do={
:foreach i in=[/ip firewall connection find assured=no] do={
/ip firewall connection remove $i
}

:put "ISPVTInetOk=$ISPVTInetOk"
:if ($ISPVTInetOk = true) do={
:foreach i in=[/ip firewall connection find assured=no] do={
/ip firewall connection remove $i}
}

Добавлю скрипт по расписанию и пускай каждую минуту выполняет.
Заранее благодарю.
Последний раз редактировалось nitro 16 сен 2015, 01:50, всего редактировалось 1 раз.


vqd
Модератор
Сообщения: 3605
Зарегистрирован: 26 сен 2013, 14:20
Откуда: НСК
Контактная информация:

Кривовато но с основной идеей справится несмотря на то что загадит все логи и будет вылетать регулярно


Есть интересная задача и бюджет? http://mikrotik.site
nitro
Сообщения: 17
Зарегистрирован: 03 июл 2013, 04:41

Сделал проще, в tools- netwatch
Пингую шлюз провайдера и если пропадает то выполняю сброс "не правильных" соединений:


/ip firewall connection {:foreach i in [find assured ] do={remove $i}
:log info "sbros_connects"
}

Вопрос с voip решился! Но проблема с подключением на резервный канал, удалённого филиала так и осталась.

На всех точках 951Ui-2HnD
Офис (прошивку обновил до 6,32)
два канала
1- проводной провайдер
2 - ёта беспроводной провайдер (для юриков)

Удалённые филиалы, у каждого проводной провайдер
Роутеры настроены идентично, только подсети разные.

При падении канала в офисе, первая точка подключается нормально к резерву.
Проблемная точка не подключается(прошивка так же обновлена до 6,31)
НО заметил один нюанс, когда я перезагружаю роутер на проблемной точке, в офисе вижу подключение с ip адреса 10.197.66.* или 10.193.171.* (что не правильно), соединение устанавливается но через несколько секунд рвётся. На другой точке такого нету.
Делаю выключение порта упавшего провайдера и всё исправляется.
А теперь вопрос откуда берутся эти адреса? Если их в микротиках вообще нигде нету.
У меня закралось ощущение что ёта как то гадит в этом месте. Хочу обратиться в тп ёты, но вначале решил спросить здесь.
Заранее благодарен за ответ.


Ответить