Часто пользователи IP телефонии сталкиваются с проблемой односторонней слышимости. Проблема в том, что в SIP протоколе, в части где описываются возможности голосового соединения (кодеки, IP адреса и порты обмена) - в протоколе SDP (Session Description Protocol), имеется запись о IP адресе на котором клиент ожидает соединения, и этот IP адрес, естественно является "серым", то есть из сети, которая находится за NAT-ом. А прямое соединение на этот немаршрутизируемый IP естественно невозможно. Однако, все современные IP шлюзы, понимают, что такая ситуация может возникнуть и разруливают её соответствующим образом - то есть они не обращают внимание на этот адрес, а пакеты шлют на тот адрес с которого приходят к нему пакеты, то есть на наш реальный IP, находящийся на выходе из NAT.

 

SIP телефоны (софтфоны) вполне корректно работают из под NAT, и порты никакие пробрасывать не надо.

В процессе изучения Mikrotik и анализа проходящего VoIP трафика, выяснилось, что роутер по умолчанию лезет в SIP/SDP протокол и подменяет установленный там IP на свой внешний (так называемый SIP ALG). Таким образом, со стороны это выглядит так, как будто и нет никакого NAT-а. И всё в порядке, и всё в общем то работает. Однако если у вас проблема с односторонней слышимостью, то вам необходимо отключить SIP ALG на роутере. Делается это следующей командой в консоли RouterOS

 

/ip firewall service-port disable sip

 

Еще одна часто возникающая проблема с роутерами Mikrotik - это зависшие UDP соединения. По наблюдениям это происходит в результате цепочки событий

1. Происходит отключение Интернет соединения
2. Устройство, находящееся за NAT, отправляет запрос в сторону SIP сервера
3. Создается ошибочная запись в таблице conntrack
4. Интернет соединение восстанавливается
5. Таблица NAT netfilter  не может получить корректную информацию для новых запросов

 

В результате SIP-устройства не могут зарегистрироваться, хотя запросы отправляются (клиенты Ростелеком с подключением по технологии PON страдают в первую очередь, т.к. раз в сутки биллинг провайдера принудительно разрывает сессию) .

TCPDUMP в данной ситуации показывает, что UAC отправляет в сторону сервера REGISTER, сервер отвечает запросом авторизации (SIP/2.0 401 Unauthorized), а в ответ ничего не приходит. Лечится это либо перезагрузкой роутера или удалением UDP соединений из консоли Mikrotik

 

/ip firewall connection remove [find where protocol=udp and dst-address~":5060"]

или так

/ip firewall connection remove [find where connection-type=sip and assured=no]

 

Если нет возможности перезагрузить роутер или удалить UDP сессии, то можно попробовать выключить SIP устройство на 15-20 минут и потом включить снова.

 

Если проблема не постоянная, а то появляется, то исчезает, то возможно поможет отключение технологии fastpath (необходимо перезагрузить роутер после выполнения этих команд)

/ip settings set allow-fast-path=no

/ip firewall filter disable [/ip firewall filter find where action=fasttrack-connection]

 

 

В новых версиях RouterOS появился параметр sip-timeout, который теоретически может помочь в решении данной проблемы. Попробуйте выполнить следующую команду

 

/ip firewall service-port set sip disabled=no ports=5060,5061 sip-direct-media=yes sip-timeout=5m