Часто пользователи 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