Подключение через маршрутизатор с NAT

Материал из wiki.sipnet.ru
Перейти к: навигация, поиск
Приглашаем принять участие в тестировании виртуальной АТС от SIPNET!

SIP-телефон или SIP-адаптер часто приходится подключать к Интернет через маршрутизатор с функцией NAT. В качестве маршрутизатора может выступать либо DSL-модем либо отдельное устройство.
Также NAT может быть реализован и на стороне провайдера Интернет, что в итоге приводит к двойному NAT для SIP-клиента.


При таком подключении нет никакой необходимости делать «исправление» NAT на стороне абонента, т.е. подменять IP-адреса в SIP-сигнализации. Все необходимое для нормальной работы абонентов, подключенных через NAT, сделает сервер SIPNET, однако для этого необходимо, чтобы внутренний (приватный) адрес SIP-клиента был назначен из правильного диапазона адресов согласно RFC 1918. При использовании других адресов «исправления» NAT на стороне SIPNET не происходит и возникают различные проблемы, например, с односторонней слышимостью, входящими вызовами и проч.

Формально допустимые внутренние адреса:

  • 10.0.0.0 - 10.255.255.255
  • 172.16.0.0 - 172.31.255.255
  • 192.168.0.0 - 192.168.255.255


Интернет-провайдер может делать NAT на своей стороне и выдавать своим абонентам приватные адреса согласно RFC6598:

  • 100.64.0.0/10


При работе через NAT можно (но совсем не обязательно!) использовать STUN-сервер, например stun.sipnet.ru или любой другой доступный сервер. Некоторые программы и устройства умеют определять адрес STUN-сервера автоматически. Технология STUN позволяет SIP-устройству узнать свой внешний (публичный) IP-адрес, а также определить, как именно работает механизм NAT между ним и Интернетом. Если тип используемого NAT'а оказался "symmetric" - STUN не поможет.

Если маршрутизатор имеет встроенную поддержку протокола SIP (т.наз. SIP ALG), то в этом случае, как правило, включение STUN только мешает.


Обратите внимание:

  • SIP ALG в маршрутизаторах, как правило, работают некорректно, так называемую "поддержку SIP" (SIP Helper, SIP Passthrough,...) следует, по возможности, отключать. Рекомендации для ZyXEL можно найти здесь, для TP-Link - здесь, для некоторых других маршрутизаторов - здесь. При использовании в SIP-программе или устройстве транспортного протокола TLS можно не отключать SIP ALG в маршрутизаторе
  • В зависимости от конкретной реализации STUN-клиента в программе/устройстве, от типа используемого NAT'а, от задержек в сети и прочих факторов включение STUN может привести к нежелательным последствиям. Рекомендуется с осторожностью подходить к использованию этой технологии.

Входящие вызовы

Делать на DSL-модеме или маршрутизаторе «проброс портов», «port forwarding» или «virtual server» для сигнализации и RTP-трафика в подавляющем большинстве случаев не требуется. Согласно принципу своей работы, любое NAT-устройство не пропускает новые входящие соединения извне. Для того, чтобы это не мешало входящему трафику SIP-сигнализации, необходимо чтобы SIP-устройство или программа периодически генерировали трафик из внутренней сети наружу. Обычно это обеспечивается путем регулярной (примерно каждые 50-170 сек) отправки keepalive пакетов. «Проброс» порта сигнализации позволяет избежать отправки keepalive пакетов и может быть рекомендован только в том случае, если никаким другим способом не удалось добиться устойчивого прохождения входящих вызовов. При подключении через двойной NAT "проброс" портов лишь на одном из NAT-устройств не решает проблему.


Если входящие вызовы на SIP-устройство или программу не проходят вообще или проходят только в течение короткого промежутка времени (обычно < 3-5 минут) после включения или перезагрузки SIP-агента либо после исходящего вызова с него, то:

  • необходимо убедиться в том, что устройство (или программа) успешно регистрируется на сервере; статус регистрации следует проверять не только в программе или устройстве, но и в своем Личном кабинете
  • необходимо включить механизм keepalive (на SIP-агенте)
  • либо уменьшить интервал keepalive, если механизм keepalive уже был включён ранее
  • если устройство не имеет функции keepalive, то можно попробовать уменьшить интервал перерегистрации (Register Expire) до значения, чуть меньшего чем то время, в течение которого вызовы проходят; не устанавливайте интервал перерегистрации менее 60 секунд!
  • либо настроить «port forwarding» (на маршрутизаторе) для того порта, который фактически используется клиентской стороной для сигнализации SIP
  • необходимо убедиться, что входящим соединениям не мешает встроенный в маршрутизатор firewall.


По умолчанию, как правило, на клиентской стороне для сигнализации SIP используется порт 5060/UDP, однако программные и аппаратные устройства SIP-телефонии позволяют менять это значение или же выбирать этот порт динамически.