Неактивные соединения. А точнее SIP.

Обсуждение оборудования и его настройки
Ответить
Coolspawn
Сообщения: 8
Зарегистрирован: 12 апр 2013, 11:59

Столкнулся вот с такой проблемой (уже где-то писал о ней). Стоят SIP софтфоны за NAT и два провайдера, один основной, другой резервный, сегодня основной упал, и начал подпрыгивать, роутер конечно же отрабатывает переключения, но в офисе вешаются из-за телефонии, у меня и софтфоны и CISCO стоят. Они теряют регистрацию. Время перерегистрации стоит короткое, НО ВСЕ РАВНО НЕ ПОМОГАЕТ. Помогает только смена порта у софтфона/циски. Захожу в Connectionts: вот они! Все старые подключения на старые порты висят и судя по времени - еще часа три будут висеть. В связи с этим вопрос:
1. Есть ли настройки выдачи времени на соединение?
2. Как узнать, что соединение не активное и убрать его?
3. В микротике есть интересное место: Servis ports, из таблички только выкинуть строки можно, может там собака порылась?


gmx
Модератор
Сообщения: 3290
Зарегистрирован: 01 окт 2012, 14:48

Переключение скриптом выполняется???

Этим же скриптом "убивайте" коннекты (в конце концов можно все). Можно по IP источника, ведь IP у всех телефонов фиксированные?


Coolspawn
Сообщения: 8
Зарегистрирован: 12 апр 2013, 11:59

Переключение автоматом без скрипта, через distance, все подключения как-то нежелательно.. хотя.. можно наверное..
Проблема все равно остается - неактивные подключения висят, хотя по логике должны удаляться...


Coolspawn
Сообщения: 8
Зарегистрирован: 12 апр 2013, 11:59

Отписываюсь по решению проблемы:
собрал скрипт, который пингует шлюз провайдера, и если он недоступен, отключает основной маршрут и включает резервный, с одновременной очисткой соединений и трекинга этих соединений. Думал что все отлично, но как показал очередной сбой - нифига!
Скрипт отрабатывает переключения маршрутов и всё! никаких ошибок не выдает, но и дальнейших сообщений об очистке соединений и трекинга тоже не выдает! :(
Отдельно скрипты очистки работают и в логах инфа пишется, внутри одного скрипта - непонятки.
script print ошибок не показывает!


:local i 0; {:do {:set i ($i + 1)} while (($i < 5) && ([/ping <шлюз осн провайдера> interval=3 count=1]=0))};
:if ($i=5 && [/ip route get [find comment="Default Route"] disabled]=false) do={

:log info "Main Gateway down"; //вот это сообщение в лог выводится!!!

/ip route set [find comment="Default Route"] disabled=yes; //отрабатывает
/ip route set [find comment="Second Route"] disabled=no; //отрабатывает
:delay 2; //жду
:foreach q in=[/ip firewall connection find] do=[/ip firewall connection remove $q]; //ВРОДЕ отрабатывает, так как визуально табличка очищается, но не уверен что по моей хотелке, а не автоматом....
:log info "Connections cleared"; //ЭТОГО СООБЩЕНИЯ НЕТ!
:delay 2;
/ip firewall connection tracking
set enabled=no;
:delay 1;
set enabled=yes; // убирал эту строчку, чтобы проверить, отключен ли трекинг... НЕ ОТКЛЮЧЕН!
:log info "Contrack cleared"; //ЭТОГО СООБЩЕНИЯ НЕТ
}

//Этот кусок возвращает обратно основной маршрут, тут задержек нет, сообщений тоже нет!!!

:local i 0; {:do {:set i ($i + 1)} while (($i < 5) && ([/ping <шлюз осн провайдера> interval=3 count=1]=1))};
:if ($i=5 && [/ip route get [find comment="Default Route"] disabled]=true) do={
:log info "Main Gateway up";
/ip route set [find comment="Default Route"] disabled=no;
/ip route set [find comment="Second Route"] disabled=yes
:foreach i in=[/ip firewall connection find] do=[/ip firewall connection remove $i];
/ip firewall connection tracking
set enabled=no;
:delay 1;
set enabled=yes;
:local message "Contrack cleared";
:log info $message;
:put $message;
}

Понимаю что изящнее с дистанс, но это первое попалось под руку в интернетах.
Вопрос: что делаю не так???


Shino Kuyo
Сообщения: 52
Зарегистрирован: 30 июн 2012, 08:50

блин, у меня оказывается такая же проблема!)
переключение тоже не скриптом, а через дистанс
что делать?? :cry:


Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

А если строго по Wiki? Там вместо:

Код: Выделить всё

:foreach q in=[/ip firewall connection find] do=[/ip firewall connection remove $q];

вроде должно быть:

Код: Выделить всё

:foreach q in=[/ip firewall connection find] do={/ip firewall connection remove $q};

А во второй половине Вы уверены, что переменная должна быть именно i?:

Код: Выделить всё

:local i 0; {:do {:set i ($i + 1)} while (($i < 5) && ([/ping <шлюз осн провайдера> interval=3 count=1]=1))}; 

Код: Выделить всё

:foreach i in=[/ip firewall connection find] do=[/ip firewall connection remove $i];

Я особо-то в скрипт не вдумывался, просто если их объединять в кучу, вроде бы переменные должны иметь уникальные имена. И скобки после do= во второй строке тоже на фигурные замените... При объединении второй раз объявлять переменную i наверное некорректно. Надо как-то условиями обговорить всё. Типа если переключение на другого провайдера произошло, переменная i опять задаётся равной нулю.


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Shino Kuyo
Сообщения: 52
Зарегистрирован: 30 июн 2012, 08:50

:global ipadd;
:global actd;
:local thisip [/ip address get [find where interface=имя интерфейса основного провайдера] address];
:local thisactd [/ip route get [find where active static] value-name=distance];
:if ($ipadd != $thisip or $actd != $thisactd ) do={
:set ipadd $thisip;
:set actd $thisactd;
/ip firewall connection {:foreach i in [find assured ] do={remove $i}}
};

вот так работает через дистанс
скрипт в шедулер и агонь! :)
друг помог со скриптом :)

у меня основной пров через pptp
резерв через pppoe
если изменился ip на основном или произошло переключение то очищаются соединения


Ответить