Много слышал о том что нужно пробрасывать порты за NAT, но считаю это полным бредом, так как если у вас 1 база или мини-АТС то ок, может быть, но когда в офисе все SIP телефоны подключаются к виртуальной облачной АТС, а таким образом базовых блоков или аппаратов 10 + то что и куда пробрасывать?
SIP устройства вполне корректно работают и за NAT и пробрасывать порты не имеет смысла. Углубившись в детали Mikrotik SIP выяснилось что есть такая фича как SIP ALG которая подменяет SIP внешним адресом. Но иногда появляется ошибка регистрации или односторонней слышимости, в таких случаях нужно выключить SIP ALG на Микротике командой:
1 | /ip firewall service-port disable sip |
Но мы отключили данное чудо, но у нас все равно не проходит регистрация и плохая слышимость, что может быть? А могут быть зависшие UDP сесии, несколько вариантов чего это может быть:
1. Происходит отключение Интернет соединения
2. Устройство, находящееся за NAT, отправляет запрос в сторону SIP сервера
3. Создается ошибочная запись в таблице conntrack
4. Интернет соединение восстанавливается
5. Таблица NAT netfilter не может получить корректную информацию для новых запросов
Для решения нужно почистить соединения
1 | /ip firewall connection remove [find where protocol=udp and dst-address~":5060"] |
или таким образом
1 | /ip firewall connection remove [find where connection-type=sip and assured=no] |
Так же можно рассмотреть более радикальные методы
Перезагрузить микротик после команд
1 2 3 | /ip settings set allow-fast-path=no /ip firewall filter disable [/ip firewall filter find where action=fasttrack-connection] |
Ну или же в новых версиях установить таймаут
1 | /ip firewall service-port set sip disabled=no ports=5060,5061 sip-direct-media=yes sip-timeout=5m |