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

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

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

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

Asterisk: RTP Timeout - No incoming RTP data on port (Сброс звонка через 30-60 сек)

Обновлено: 24.08.2026 · Официальная документация ↗
  • Звонок обрывается ровно через 30 или 60 секунд после ответа абонента.
  • В журнале Asterisk фиксируется NOTICE[3456]: res_rtp_asterisk.c: RTP Timeout: No incoming RTP data on port 10452 (got 0 packets in 30000 ms).
  • Односторонняя слышимость: вызывающий абонент слышит оператора, а оператор абонента — нет (или тишина с обеих сторон).
  • Разрыв вызова происходит из-за срабатывания таймера rtptimeout.

1. Настройка NAT и внешнего IP в PJSIP (pjsip.conf)

Укажите внешний белый IP и локальные подсети в секции транспорта /etc/asterisk/pjsip.conf:

[transport-udp]
type = transport
protocol = udp
bind = 0.0.0.0:5060
local_net = 192.168.0.0/16
local_net = 10.0.0.0/8
external_media_address = 203.0.113.10
external_signaling_address = 203.0.113.10

2. Настройка эндпоинтов (Endpoint NAT Settings)

Для абонентов за NAT установите параметры в секции [endpoint]:

[101]
type = endpoint
context = internal
force_rport = yes
rewrite_contact = yes
rtp_symmetric = yes
direct_media = no

3. Корректировка таймаутов RTP в rtp.conf

В файле /etc/asterisk/rtp.conf увеличьте таймаут или отключите сброс на время удержания вызова (MOH):

[general]
rtptimeout=60
rtpholdtimeout=300
rtpkeepalive=5

4. Проверка Forwarding портов на шлюзе/роутере

Пробросьте диапазон 10000-20000 UDP на роутере (Mikrotik, pfSense, Cisco) и отключите SIP ALG (SIP Helper):

# Пример для Linux iptables на NAT-шлюзе:
iptables -t nat -A PREROUTING -p udp -m udp --dport 10000:20000 -j DNAT --to-destination 192.168.1.100

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

asterisk -rx "pjsip reload"
asterisk -rx "rtp reload"
💡 Практика специалистов: В 99% случаев RTP Timeout вызван неверно указанным external_media_address в pjsip.conf либо включенным механизмом SIP ALG на промежуточном клиентском роутере.

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

Почему звонок сбрасывается именно через 30 секунд?

По умолчанию в конфигурации rtptimeout=30. Если за 30 секунд в открытый UDP-порт Asterisk не пришло ни одного RTP-пакета (например, пакеты заблокированы NAT на стороне клиента), Asterisk принудительно посылает SIP BYE.

Что делает параметр rtp_symmetric = yes?

Опция заставляет Asterisk отправлять исходящий RTP-поток на тот IP-адрес и UDP-порт, с которого физически пришел первый входящий RTP-пакет, полностью игнорируя приватный IP-адрес, указанный клиентом в SDP.

Зачем отключать SIP ALG на маршрутизаторах?

SIP ALG некорректно модифицирует заголовки пакетов SIP и SDP, подменяя валидные IP-адреса и нарушая механизм Symmetric RTP, что приводит к отсутствию звука и RTP-таймаутам.

Что делает опция direct_media = no?

Она запрещает телефонам передавать голос напрямую peer-to-peer минуя сервер. Весь трафик принудительно проходит через Asterisk, гарантируя запись разговоров и стабильную маршрутизацию за NAT.

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