Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

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

PJSIP_NAT_NO_EXTERNAL_ADDR IP-Телефония и СКУД

Asterisk: res_pjsip_nat.c NAT detected without external signaling address configured

Обновлено: 24.08.2026 · Официальная документация ↗
  • Предупреждение: WARNING: res_pjsip_nat.c: NAT detected without external signaling address configured.
  • Asterisk отправляет во внешних SIP пакетах (Contact, SDP) свой серый локальный IP-адрес (например 192.168.1.15 или 10.0.0.5).
  • Внешние абоненты и SIP-транки не могут дозвониться до АТС или слышат тишину из-за неверной маршрутизации ответов.
  • Сбои входящей регистрации на серверах облачных операторов связи.

1. Определение публичного IP-адреса и топологии сети

Узнайте текущий внешний IP-адрес сервера:

curl -4 icanhazip.com

2. Настройка секции Transport в /etc/asterisk/pjsip.conf

Отредактируйте транспорт pjsip.conf, указав локальные подсети и внешний IP-адрес:

[transport-udp]
type = transport
protocol = udp
bind = 0.0.0.0:5060

; Обязательное перечисление ВСЕХ локальных серых сетей компании
local_net = 127.0.0.1/32
local_net = 192.168.0.0/16
local_net = 10.0.0.0/8
local_net = 172.16.0.0/12

; Публичный IP-адрес сервера (или внешний FQDN)
external_signaling_address = 203.0.113.50
external_media_address = 203.0.113.50

; Для динамических публичных IP адресов (DDNS):
; external_signaling_address = mypbx.dyndns.org
; external_media_address = mypbx.dyndns.org

3. Проверка настроек для WebRTC/WSS транспорта (при наличии)

[transport-wss]
type = transport
protocol = wss
bind = 0.0.0.0:8089
local_net = 192.168.0.0/16
external_signaling_address = 203.0.113.50
external_media_address = 203.0.113.50

4. Применение настроек транспорта

Изменения параметров сетевых транспортов требуют перезагрузки PJSIP или рестарта Asterisk:

asterisk -rx "pjsip reload"
💡 Практика специалистов: Если сервер размещен в AWS EC2, GCP, Yandex Cloud или за 1:1 NAT, настройка external_signaling_address и external_media_address в pjsip.conf является абсолютно обязательной для прохождения звонков.

Частые вопросы (FAQ)

Почему Asterisk подставляет локальный IP вместо публичного?

Если в секции transport не заданы external_signaling_address и local_net, Asterisk не знает, находится ли он за NAT, и вставляет в заголовки Via, Contact и SDP c= адрес локального сетевого интерфейса ОС.

Что произойдет, если забыть прописать офисную подсеть в local_net?

Asterisk посчитает локальные офисные телефоны внешними клиентами и начнет отправлять им в заголовках свой публичный IP, что приведет к разрыву связи внутри локальной сети.

Можно ли указывать доменное имя (FQDN) вместо IP в external_media_address?

Да, PJSIP поддерживает FQDN и периодически обновляет IP через DNS-запросы, что удобно при использовании серверов с динамическим белым IP (Dynamic DNS).

В чем разница между external_signaling_address и external_media_address?

external_signaling_address подставляется в сигнальные заголовки SIP (Contact, Via), а external_media_address — в параметры дескриптора медиа-потоков SDP (c=IN IP4).

Полезные материалы
Рекомендуем