Asterisk: RTP Timeout - No incoming RTP data on port (Сброс звонка через 30-60 сек)
- Звонок обрывается ровно через 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.102. Настройка эндпоинтов (Endpoint NAT Settings)
Для абонентов за NAT установите параметры в секции [endpoint]:
[101]
type = endpoint
context = internal
force_rport = yes
rewrite_contact = yes
rtp_symmetric = yes
direct_media = no3. Корректировка таймаутов RTP в rtp.conf
В файле /etc/asterisk/rtp.conf увеличьте таймаут или отключите сброс на время удержания вызова (MOH):
[general]
rtptimeout=60
rtpholdtimeout=300
rtpkeepalive=54. Проверка 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.1005. Применение настроек
asterisk -rx "pjsip reload"
asterisk -rx "rtp reload" Частые вопросы (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.