SIP-сессия с пиром за NAT-ом после смены активного аплинка на маршрутизаторе?
Имеется следующая конфигурация:
локальная сеть, маршрутизатор (Mikrotik) которой двумя аплинками (1 - основной, 2 - резерв) подключен к Интернету. Внутри локальной сети есть сервер с Asterisk (работает по udp), который регистрируется у вышестоящего SIP-провайдера (Ростелеком) для приема входящих звонков. Все порт-форварды на маршрутизаторе настроены - в обычных условиях все работает корректно (слышимость в обе стороны, звонки вход/исход работают и т.п.).
Однако, при смене активного аплинка на маршрутизаторе на резервный (при падении основного) появляется проблема: хоть внутрисетевой Asterisk форсированно перерегистрируется у sip-провайдера (чтобы засветить у него новый внешний адрес), INVITE-запросы от провайдера продолжают приходить (или пытаться приходить) на старый внешний адрес, т.к. старая sip-сессия с т.з. провайдера все еще активна, а провайдер поддерживает до 2х коннектов с одинаковыми реквизитами с разных мест и считает новую сессию с резервного IP просто 2ым подключением.
После переключения (с заменой маршрутов, принудительным разрыванием tcp-соединений и очисткой conntrack-таблицы на маршрутизаторе слышимость в направлении астериск->провайдер пропадает на время, пока по таймауту старая сип-сессия не протухнет у последнего (астериск исходящие RTP-пакеты отправляет провайдеру уже с нового активного внешнего адреса, провайдер считает их неверными и отбрасывает). Самый плохой вариант: когда спустя короткое время основной аплинк оживает и маршрутизатор переключается обратно - период односторонней слышимости удваивается.
Вопрос: что мы со своей стороны (на Asterisk или маршрутизаторе) можем сделать, чтобы не происходила описанная ситуация ? Т.е. как не допускать подвисающую SIP-сессии после смены аплинка ?
У Asterisk`а есть такой параметр как externip (тут подробнее: voip.rus.net/tiki-index.php?page=Asterisk+SIP+externip)
плюс, для порядка:
localnet=192.168.2.0/255.255.255.0
localnet=10.5.1.0/255.255.255.192
и т.д. - для этих подсетей не будет подставляться exnetnip в SIP пакете
p.s. exterтip и localnet`s указываются в [general] контексте в sip.conf
Должно помочь для правильной регистрации у провайдера.
да, это, в принципе, вариант. только штука в том, что адрес внешний при фейловере на резервный аплинк изменяется - если поступить по вашему - надо будет лезть в настройки астериска и менять адрес. это так себе идея. тем более, что минут через 15 после смены аплинка старая сессия умирает и все начинает работать нормально.
Тогда DynDNS и опция externhost
; b. "externhost = hostname[:port]" is similar to "externaddr" except
; that the hostname is looked up every "externrefresh" seconds
; (default 10s). This can be useful when your NAT device lets you choose
; the port mapping, but the IP address is dynamic.
; Beware, you might suffer from service disruption when the name server
; resolution fails. Examples:
;
; externhost=foo.dyndns.net ; refreshed periodically
; externrefresh=180 ; change the refresh interval
;
; Note that at the moment all these mechanism work only for the SIP socket.
; The IP address discovered with externaddr/externhost is reused for
; media sessions as well, but the port numbers are not remapped so you
; may still experience problems.
Надежнее всего - попросить у SIP-провайдера второй транк, чтобы на него регистрация со второго внешнего IP шла и ничего даже рвать не надо, только dialplan чуть поправить.
А так - ну сделаете Вы скрипт с пингом первого шлюза интернет-провайдера и по обрыву связи - сменой externip в астериске и sip reload, и возвратом обратно при восстановлении, а толку?
Провайдер же, как вы говорите, считает новые пакеты неверными (хотя не понимаю - почему?).
Добрый день. Можете конфиг вашего микротика дать??
У меня такая-же задача, вроде бы все настроил, только регистрация на сервере провайдере проходит только через первый канал интернета. Плюс произошел сбой, такое впечатление как будто роутер пакет регистрации заворачивает назад на астер. Хотя замечательно регистрируюсь на другом астериске который работает на нестандартном порте.