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

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

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

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

Asterisk: chan_pjsip.c Failed to set remote RTP address - invalid SDP c= line

Обновлено: 24.08.2026 · Официальная документация ↗
  • Предупреждение: WARNING: chan_pjsip.c: Failed to set remote RTP address - invalid SDP c= line.
  • Вызов успешно устанавливается по SIP-сигнализации (200 OK), но сразу прерывается или наблюдается односторонняя слышимость.
  • В теле SDP пакета от удаленного узла содержится некорректный IP: c=IN IP4 0.0.0.0 или немаршрутизируемый адрес.
  • SIP сессия сбрасывается с ошибкой RTP timeout через 30 секунд.

1. Анализ полученного SDP пакета в PJSIP History

Включите дамп SIP сигнализации в CLI:

asterisk -rvvv
pjsip set logger on

Изучите тело входящего пакета INVITE или 200 OK на предмет секции Connection Data (c=):

v=0
o=root 12345 1 IN IP4 192.168.1.100
s=Asterisk
c=IN IP4 0.0.0.0  <-- ОШИБКА: НЕДОПУСТИМЫЙ RTP АДРЕС
t=0 0
m=audio 10000 RTP/AVP 8 0

2. Включение механизмов симметричного RTP в pjsip.conf

Если удаленный абонент или оператор отправляет 0.0.0.0 при удержании (Hold) или за NAT, включите автоопределение адреса по первому пришедшему RTP пакету в /etc/asterisk/pjsip.conf:

[my_endpoint]
type = endpoint
context = from-external
disallow = all
allow = alaw,ulaw
; Симметричный RTP и форсирование портов
rtp_symmetric = yes
force_rport = yes
rewrite_contact = yes
direct_media = no
asymmetric_rtp_codec = no

3. Проверка диапазона портов RTP в rtp.conf

Убедитесь, что диапазон RTP портов не заблокирован локальным файрволом:

# /etc/asterisk/rtp.conf
[general]
rtpstart=10000
rtpend=20000

Откройте UDP порты в брандмауэре Linux:

# UFW (Ubuntu/Debian)
ufw allow 10000:20000/udp

# Firewalld (RHEL/CentOS/Rocky)
firewall-cmd --permanent --add-port=10000-20000/udp
firewall-cmd --reload

4. Отключение логирования PJSIP

asterisk -rx "pjsip set logger off"
💡 Практика специалистов: Комбинация параметров rtp_symmetric=yes, force_rport=yes, rewrite_contact=yes и direct_media=no в PJSIP endpoint является золотым стандартом для надежной работы любых абонентов за NAT.

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

Почему удаленная сторона отправляет c=IN IP4 0.0.0.0?

В устаревшем стандарте RFC 2543 отправка IP 0.0.0.0 в строке c= использовалась для перевода звонка в режим удержания (Music on Hold). Современный стандарт RFC 3264 требует использовать атрибут a=sendonly или a=inactive.

Что делает директива rtp_symmetric = yes?

Она указывает Asterisk игнорировать IP и порт из SDP c=/m= строк и отправлять исходящий медиапоток RTP строго на тот IP и порт, с которого фактически начали поступать входящие RTP пакеты.

Зачем отключать direct_media (direct_media = no)?

direct_media = no заставляет весь аудиопоток проходить через Asterisk, предотвращая сбои прямой передачи медиа между клиентами, находящимися за разными NAT-маршрутизаторами.

Как перезагрузить конфигурацию PJSIP без разрыва текущих звонков?

Выполните команду: asterisk -rx "pjsip reload".

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