Asterisk нет звука или звук есть в одну сторону, настройка NAT

Asterisk предусматривает два вида соединений: соединение с использование протокола SIP — отвечающего за установление соединения и с использованием протокола RTP — который описывает правила передачи голоса в IP сетях. Когда в Asterisk нет звука нужно проверять настройки отвечающие за использование NAT.



При траблшутинге Asterisk следует исходить прежде всего из того, на каком уровне существует проблема.


Самым правильным способом выяснить это является снятие дампа с внешнего интерфейса:

tcpdump -i eth0 -s 0 -w test.pcap



Затем файл при помощи scp переносится с сервера на рабочую станцию с графическим интерфейсом.

Дамп удобнее всего просматривать в Wireshark. В главном меню потребуется выбрать пункт Telephony, после этого появится возможность просмотреть диаграммы, отражающие передачу пакетов и прослушать разговор (в случае если голос передается по незащищенному соединению).

Wireshark Voip-calls


Проблема NAT при использовании ASTERISK и отсутствие звука

Далее будем исходить из того, что соединение устанавливается (т.е. проблем на уровне SIP нет). Признаком потери RTP пакетов будет отсутствие  звука в одном направлении или в обоих. Фактически это означает, что при работе с Asterisk нет звука.

На диаграммах, которые строит Wireshark можно увидеть, что RTP трафик ходит только в одном направлении или не ходит — причина в большинстве случаев в неверной настройке сервера телефонии на работу с NAT.

NAT, как известно, ставится на границе локальной и глобальной сетей и преобразует локальные адреса в публичные — делать это он может для исходящего трафика и для входящего.

Применительно к NAT существует несколько способов настройки Asterisk в зависимости от существующей конфигурации сети.


ASTERISK на выделенном IP адресе, клиенты за NAT

Asterisk нет звука

Распространенным случаем (особенно при использовании виртуального сервера телефонии) являются клиенты за NAT, сервер же находится на публичном выделенном IP адресе.

При отсутствии настройки пакеты, посредством которых передается голос, направляются клиентами на серый локальный адрес и до сервера, естественно, не доходят — результатом будет потеря звука.



Чтобы избежать потери звука потребуется отредактировать sip.conf:

[general]
localnet=192.168.1.1/24
externip=185.12.48.1
[user1]
nat=yes
qualify=300

localnet здесь — параметр в котором нужно задать диапазон из локальной сети, из которого получают IP адреса клиенты.

В качестве externip задается белый адрес сервера с Asterisk.

Также делаем указание на то, что на стороне клиентов используется NAT и задаем проверку соединения каждые 300 мс.



ASTERISK — за NAT, клиенты находятся в публичной сети


Asterisk нет звука в одном направлении

Другой случай: Asterisk находится за NAT, клиенты снаружи. На практике такое может быть при подключении удаленных сотрудников к серверу телефонии, находящемуся в локальной сети. RTP пакеты при некорректной настройке будут передаваться от звонящего, в обратную сторону голосовой трафик не пойдет.



Настройка в sip.conf похожа на использованную в предыдущем случае, но для клиентов запрещается reinvite, т.е. трафик может ходить только через сервер. клиенты между собой напрямую общаться не могут.


[general]

localnet=192.168.1.1/24
externip=192.168.1.2
[user1]
nat=yes
canreinvite=no

Также стоит убедиться, что в rtp.conf задан диапазон портов (начальный и конечный порт) и что движение трафика через них не ограниченно в iptables.

less rtp.conf

rtpstart=10000
rtpend=20000

 


Asterisk и SIP-клиенты находятся за NAT

 
Asterisk NAT проброс портов

Последний типичный случай: и сервер Asterisk и SIP-клиенты находятся за NAT.

Настройка в этом случае полностью аналогична предыдущему случаю, однако дополнительно требуется настроить проброс портов:


iptables -t nat -A PREROUTING -i eth0 -p udp  -m udp —dport 10000:12000 -j DNAT  —to-destination 192.168.1.2
iptables -t nat -A PREROUTING -i eth0 -p udp -m udp —dport 5060 -j DNAT —to-destination 192.168.1.2



Здесь eth0 — интерфейс, смотрящий в Интернет, 192.168.1.2 — IP адрес Asterisk; первой директивой пробрасывается DTP трафик с диапазоном портов 10000-20000, второй — SIP трафик на порт 5060.

При подключении к провайдеру SIP телефонии всегда следует изучить имеющуюся справочную информация по настройке сервера для работы с NAT или запросить таковую.



P.S.

Также в сети можно найти схемы поиска причин отсутствия звука при работе с Asterisk. Авторскими данные схемы не являются, однако они очень хорошо составлены и могут оказаться полезны при траблшутинге, поэтому ссылки на них приводятся в рамках данного материала.

Схема: Asterisk — нет звука при входящих

Открыть схему в новой вкладке

Схема: Asterisk — нет звука при исходящих

Открыть схему в новой вкладке

Схемы доступны по ссылкам в максимальном разрешении.