Настройка SIP через NAT на Mikrotik RouterOS

Много слышал о том что нужно пробрасывать порты за 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