Столкнулся вот с такой проблемой (уже где-то писал о ней). Стоят SIP софтфоны за NAT и два провайдера, один основной, другой резервный, сегодня основной упал, и начал подпрыгивать, роутер конечно же отрабатывает переключения, но в офисе вешаются из-за телефонии, у меня и софтфоны и CISCO стоят. Они теряют регистрацию. Время перерегистрации стоит короткое, НО ВСЕ РАВНО НЕ ПОМОГАЕТ. Помогает только смена порта у софтфона/циски. Захожу в Connectionts: вот они! Все старые подключения на старые порты висят и судя по времени - еще часа три будут висеть. В связи с этим вопрос:
1. Есть ли настройки выдачи времени на соединение?
2. Как узнать, что соединение не активное и убрать его?
3. В микротике есть интересное место: Servis ports, из таблички только выкинуть строки можно, может там собака порылась?
Неактивные соединения. А точнее SIP.
-
- Модератор
- Сообщения: 3416
- Зарегистрирован: 01 окт 2012, 14:48
Переключение скриптом выполняется???
Этим же скриптом "убивайте" коннекты (в конце концов можно все). Можно по IP источника, ведь IP у всех телефонов фиксированные?
Этим же скриптом "убивайте" коннекты (в конце концов можно все). Можно по IP источника, ведь IP у всех телефонов фиксированные?
-
- Сообщения: 8
- Зарегистрирован: 12 апр 2013, 11:59
Переключение автоматом без скрипта, через distance, все подключения как-то нежелательно.. хотя.. можно наверное..
Проблема все равно остается - неактивные подключения висят, хотя по логике должны удаляться...
Проблема все равно остается - неактивные подключения висят, хотя по логике должны удаляться...
-
- Сообщения: 52
- Зарегистрирован: 30 июн 2012, 08:50
-
- Сообщения: 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;
}
Понимаю что изящнее с дистанс, но это первое попалось под руку в интернетах.
Вопрос: что делаю не так???
собрал скрипт, который пингует шлюз провайдера, и если он недоступен, отключает основной маршрут и включает резервный, с одновременной очисткой соединений и трекинга этих соединений. Думал что все отлично, но как показал очередной сбой - нифига!
Скрипт отрабатывает переключения маршрутов и всё! никаких ошибок не выдает, но и дальнейших сообщений об очистке соединений и трекинга тоже не выдает!

Отдельно скрипты очистки работают и в логах инфа пишется, внутри одного скрипта - непонятки.
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;
}
Понимаю что изящнее с дистанс, но это первое попалось под руку в интернетах.
Вопрос: что делаю не так???
-
- Сообщения: 52
- Зарегистрирован: 30 июн 2012, 08:50
блин, у меня оказывается такая же проблема!)
переключение тоже не скриптом, а через дистанс
что делать??
переключение тоже не скриптом, а через дистанс
что делать??

- podarok66
- Модератор
- Сообщения: 4402
- Зарегистрирован: 11 фев 2012, 18:49
- Откуда: МО
А если строго по Wiki? Там вместо:
вроде должно быть:
А во второй половине Вы уверены, что переменная должна быть именно i?:
Я особо-то в скрипт не вдумывался, просто если их объединять в кучу, вроде бы переменные должны иметь уникальные имена. И скобки после do= во второй строке тоже на фигурные замените... При объединении второй раз объявлять переменную i наверное некорректно. Надо как-то условиями обговорить всё. Типа если переключение на другого провайдера произошло, переменная i опять задаётся равной нулю.
Код: Выделить всё
: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'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
-
- Сообщения: 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 на основном или произошло переключение то очищаются соединения
: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 на основном или произошло переключение то очищаются соединения