Односторонняя слышимость в Asterisk: настройка NAT и проброс RTP портов
Характерные признаки проблемы:
- Вы отлично слышите клиента, а клиент вам в ответ говорит: «Алло, вас не слышно!».
- Звонок обрывается ровно через 30 или 32 секунды после начала разговора.
- Звук идет только при звонках внутри офиса, но пропадает при звонках на мобильные или удаленные филиалы.
- В логах сервера Asterisk появляются строки:
RTP timeout: no audio received.
Шаг 1. Понимание причины (Что такое NAT и RTP)
В телефонии служебные команды (гудки, набор номера) идут по протоколу SIP (порт 5060), а сам живой голос передается отдельным потоком данных — по протоколу RTP через случайные порты. Если роутер блокирует эти порты, звук идет только в одну сторону.
Шаг 2. Проверяем диапазон портов в настройках Asterisk
Откройте файл конфигурации RTP на вашем сервере Asterisk:
cat /etc/asterisk/rtp.confВ нем должен быть указан диапазон портов (по умолчанию от 10000 до 20000):
[general]
rtpstart=10000
rtpend=20000Шаг 3. Пробрасываем порты на офисном роутере (Port Forwarding)
- Зайдите в панель управления вашего роутера (MikroTik, Keenetic, TP-Link, Asus).
- Найдите раздел Переадресация портов (Port Forwarding / NAT).
- Создайте правило для SIP: порт
5060, протокол UDP, перенаправлять на локальный IP адрес сервера Asterisk (например,192.168.1.100). - Создайте правило для Голоса (RTP): диапазон портов
10000-20000, протокол UDP, на IP сервера телефонии192.168.1.100.
Шаг 4. Указываем внешний белый IP в конфигурации Asterisk
Если используется драйвер pjsip.conf, проверьте настройки транспорта:
[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0:5060
local_net=192.168.1.0/24
external_media_address=ВШ_ВНЕШНИЙ_БЕЛЫЙ_IP
external_signaling_address=ВАШ_ВНЕШНИЙ_БЕЛЫЙ_IPПримените настройки в консоли телефонии:
asterisk -rx "pjsip reload" Частые вопросы (FAQ)
Почему звонок сбрасывается ровно через 30 секунд?
Сервер Asterisk отправляет голосовые пакеты клиенту, но из-за закрытых портов NAT не получает подтверждений. Встроенный таймер Asterisk (rtpkeepalive/rtptimeout) считает соединение мертвым и принудительно кладет трубку.
Нужно ли пробрасывать порты TCP для передачи голоса?
Нет, голос в реальном времени передается исключительно по протоколу UDP для исключения сетевых задержек буферизации.
Что такое SIP ALG на роутере и почему его советуют отключать?
SIP ALG (Application Layer Gateway) — это функция на домашних роутерах, которая пытается подменять IP-адреса в пакетах телефонии, но на практике искажает заголовки, что приводит к полной потере звука. Ее обязательно нужно отключить в настройках роутера.
Можно ли сузить диапазон RTP портов, например, до 10000-10050?
Да. Один разговорный канал занимает 2 порта (RTP и RTCP). Диапазона в 50 портов хватит максимум на 25 одновременных разговоров.