Телефонизация. Технический блог.

Односторонняя слышимость в FreePBX — причины и решение

Одна из самых неприятных и при этом распространённых проблем в IP-телефонии — односторонняя слышимость (one-way audio). Вы звоните, абонент вас слышит, а вы его — нет. Или наоборот. Звонок установлен, SIP-сигнализация отработала, но голос идёт только в одну сторону.

В этой статье разберём все возможные причины односторонней слышимости на FreePBX 17 (chan_pjsip) и способы их устранения — с акцентом на веб-интерфейс, а не ручную правку конфигов.

FreePBX хранит настройки в базе данных и перезаписывает конфигурационные файлы при каждом применении изменений через веб-интерфейс.

Любые ручные правки в `/etc/asterisk/pjsip.conf`, `sip.conf`, `rtp.conf` и подобных будут стёрты при следующем `fwconsole reload`.

Единственное исключение — файлы `*_custom.conf`, которые FreePBX не трогает. Поэтому в этой статье мы используем веб-интерфейс везде, где это возможно, и `_custom.conf` только в крайних случаях.

Как работает передача голоса в SIP

Уровень
Протокол
За что отвечает
Сигнализация
SIP (5060 UDP / 5061 TLS)
Установка, управление, завершение звонка
Медиа / Голос
RTP диапазон UDP 10000-20000
Передача голоса
SIP и RTP могут идти разными маршрутами. В SDP-теле звонка Asterisk сообщает участникам, на какой IP и порт отправлять RTP-пакеты. Если этот IP недоступен для одной из сторон — получаем одностороннюю слышимость.

Причина №1: NAT и неверный внешний адрес

Самая частая причина. FreePBX стоит за NAT (частный IP), транки — снаружи. Asterisk подставляет в SDP свой локальный IP (например, `192.168.0.100`), до которого внешний мир не может достучаться.

Симптомы:

  • Внутренние звонки (extension → extension) работают нормально.
  • Проблема только на внешних звонках (через SIP-транк).
  • Звонок устанавливается, но слышимость односторонняя.

Решение (веб-интерфейс):

Где: Settings → Asterisk SIP Settings
Заполните два поля в General Settings или нажмите кнопку Detect network settings
External Address: Ваш внешний IP (или домен). Пример: 87.250.1.1
Local Networks: Внутренние подсети. Пример: 192.168.0.0/24
Нажмите Submit и Apply Config
Что это меняет: FreePBX пропишет `external_media_address` и `local_net` в транспорте PJSIP, и Asterisk начнёт подставлять внешний IP в SDP для всех, кто не из Local Networks.

Причина №2: SIP ALG на маршрутизаторе

SIP ALG (Application Layer Gateway) — «помощник» на роутере, который пытается подменять IP-адреса в SIP-пакетах. На практике ломает чаще, чем чинит.

Симптомы:

  • Нестабильная односторонняя слышимость: то есть, то нет.
  • В одном направлении звонки работают, в другом — нет.
  • После отключения ALG проблема исчезает.

Решение:

Отключите SIP ALG на роутере:
Роутер
Где отключить
MikroTik
/ip firewall service-port disable sip
TP-Link
Advanced → NAT Forwarding → ALG → SIP: Disable
D-Link
Firewall → ALG → SIP: Off
Cisco
no ip nat service sip udp port 5060
Keenetic
Сетевые правила → ALG → SIP: выкл
Zyxel
Configuration → Network → ALG → SIP: Disable
pfSense
System → Advanced → Firewall & NAT → Disable SIP ALG
Если настройка не найдена или ALG не отключается — смените стандартный порт SIP на нестандартный (например, 5080). SIP ALG анализирует только трафик на порту 5060.

Изменить в FreePBX: Settings → Asterisk SIP Settings → Chan PJSIP → Port to Listen On: 5080

После этого обязательно нужно сделать в cli - fwconsole restart.

Причина №3: RTP-порты закрыты фаерволом

Asterisk использует диапазон UDP-портов для RTP-трафика. Если фаервол пропускает порт 5060 (SIP), но не пропускает RTP-порты — сигнализация работает, а голос нет.
Сделайте на вашем роутере port forwarding и разрешите в firewall диапазон портов Udp 10000-20000 на IP вашего asterisk / freepbx
Проверьте что у вас настроен модуль Firewall в freePBX и firewall самого астериска не блокирует трафик.
Как правильно настроить firewall прочитать тут.

Причина №4: Direct Media включён

Direct Media позволяет двум телефонам обмениваться RTP напрямую в обход Asterisk. Если телефоны в разных подсетях и не видят друг друга — RTP не дойдёт, и одна сторона замолчит.
Пофиксить можно в проблемных внутренних номерах (extensions).
Найти можно в Connectivity → Extensions → 1000 → Advanced → Direct Media выставить в No
Нажмите Submit → Apply Config.
Теперь весь RTP-трафик будет идти через Asterisk. Снижает нагрузку на сеть между телефонами, но гарантирует, что медиа дойдёт.

Причина №5: Несовпадение кодеков

Если на транке или экстеншене разрешены кодеки, которые не поддерживаются одной из сторон звонка, или кодеки не пересекаются — возможна как полная тишина, так и односторонняя слышимость.
Включите только нужные кодеки. Надёжный минимум: ulaw (G.711μ) и alaw (G.711a). Это базовые кодеки без сжатия, поддерживаются всеми устройствами и провайдерами.

Причина №6: Проблемы на стороне SIP-провайдера

Если RTP-пакеты от провайдера не доходят до вашего сервера — проблема вне вашей АТС.

Как проверить:

  1. Позвоните через другого провайдера (другой транк). Если односторонней слышимости нет — проблема в первом провайдере.
  2. Сравните входящие и исходящие: если проблема только в одну сторону — это подсказка.
  3. Снимите дамп трафика через sngrep -i -r и настройке через f8 в вкладке call flow параметр Show RTP media stearms в положение on. Сохраните.
Сделайте тестовый звонок, он отобразится в sngrep как 2 Invite звонка, выделите оба через пробел и откройте через enter. вы увидите 2 RTP белых потока, если все хорошо или увидите 1 RTP поток, если односторонняя слышимость. RTP потоки указаны стрелками и вы можете понять откуда и куда потока нет.

Причина №7: Несколько сетевых интерфейсов на сервере

Если у сервера FreePBX два (или больше) IP-адреса, Asterisk может подставлять в SDP адрес не того интерфейса.
Укажите корректный External Address (см. Причину №1). FreePBX пропишет его в `external_media_address`, и Asterisk будет использовать именно его.

Причина №8: VPN, MTU и сложные топологии

Если телефоны подключаются через VPN (OpenVPN, WireGuard, IPSec):

  • MTU: RTP-пакеты (особенно с кодеками без сжатия) могут превышать MTU туннеля. Попробуйте уменьшить MTU на интерфейсе туннеля или использовать кодеки со сжатием (G.729, G.722).
  • Маршрутизация: убедитесь, что маршрут к RTP-адресу существует с обеих сторон.
  • Фаервол: внутри туннеля тоже может быть фаервол.

Чек-лист: пошаговое устранение

- [ ] 1.В веб-интерфейсе: Settings → Asterisk SIP Settings → Chan PJSIP → External Address + Local Networks — заполнены?
- [ ] 2.Отключить SIP ALG на роутере
- [ ] 3.Connectivity → Extensions → 1000 → Advanced → Direct Media = No
- [ ] 4.Проверить RTP-диапазон: Settings → Asterisk SIP Settings → General → RTP Port Ranges и открыть его на фаерволе
- [ ] 5.Проверить кодеки: Settings → Asterisk SIP Settings → Audio Codecs и в настройках транка
- [ ] 6.Сделать тестовый звонок через другого провайдера
- [ ] 7. Захватить трафик `sngrep` и проверить доходят ли RTP-пакеты в обе стороны

Заключение

Односторонняя слышимость — это почти всегда сетевая проблема. Особенно часто ловится при переключении на резервный интернет канал. Не менее часто при перенастройке VPN тунелей между офисами начинаются проблемы, то слышу, то не слышу. Подключили новый офис - внесли сеть в NAT freeBPX. Не менее часто возникает, после кратковременного отвала интернет канала, тогда просто сбрасываете все сессии по UDP 5060, они восстановятся с правильной адресацией и RTP заработает.

На FreePBX 17 почти всё решается через веб-интерфейс. Не лезьте в конфиги напрямую — изменения сотрутся при следующем Apply Config. Если настройка действительно требует ручной правки — используйте только `*_custom.conf`.

Если после всех шагов проблема сохраняется, мы поможем разобраться.

Мы оказываем разовую техническую поддержку, оставьте заявку. Мы сделаем всё за вас.

Фиксированная цена: 3 000 руб.
Срок: до 40 минут.
Гарантия: 7 дней на выполненные работы.

Разобраться с голосом


Telephonization.ru — внедрение и поддержка корпоративной телефонии на Asterisk/FreePBX.
2026-06-15 17:32 Исправление ошибок