Клиент спрятан за NAT
Когда клиент пытается инициировать сеанс связи, оно отправляет SIP-сообщение, содержащее его IP-адрес и некоторую дополнительную информацию. Получив это сообщение, Asterisk использует его, чтобы определить, куда отправить ответ на это сообщение. Поскольку устройство находится за NAT, SIP-сообщение будет иметь серый адрес, например, 192.168.1.104. Тем не менее, мы можем сообщить Asterisk, игнорировать SIP-адрес этого сообщения, а вместо этого использовать то, что поставляется сетевым стеком. Рассмотрим какие опции мы можем использовать в sip.conf для преодоления NAT:
Стоит заметить что начиная с версии Asterisk 11: nat=yes устарело, и необходимо использовать nat=force_rport,comedia.
RFC 3581 позволяет одному клиенту использовать параметр rport, для того чтобы передать другому клиенту, что оно должно реагировать на адрес источника IP и порт запрос, а не на IP адрес прописанный в SIP заголовке. Установка параметра rport может произойти, когда устройство знает, что он находиться за NAT и не может записать информацию, которая была бы необходима, для связи в обоих направлениях, в заголовке SIP. Asterisk всегда читает параметр rport, если он передается, но так как это происходит не так часто, как хотелось бы, мы можем заставить Asterisk предположить, что устройство будет передавать параметр rport. Выполняя это, мы заставляем Asterisk всегда отвечать на адрес IP и порт источника сообщения, от которого он получил запрос. Если настройки NAT явно не определены, Asterisk будет выполнять auto_force_rport, в качестве параметра по умолчанию. Вы можете принудительно изменить такое поведение, установив nat=force_rport.
Во многих реализациях NAT, при не получении пакетов поддержки диалога, может происходить закрытие соединения. В Asterisk для предотвращения этого используется опция qualify=yes, выполняющая отправку OPTIONS серверу каждые 2000 миллисекунд (2 секунды), не давая закрыть сессию NAT устройством. Также можно указать свое время в миллисекундах: