Asterisk предусматривает два вида соединений: соединение с использование протокола SIP — отвечающего за установление соединения и с использованием протокола RTP — который описывает правила передачи голоса в IP сетях. Когда в Asterisk нет звука нужно проверять настройки отвечающие за использование NAT.
Что делать если при использовании Asterisk нет звука или звук есть в одну сторону
При траблшутинге Asterisk следует исходить прежде всего из того, на каком уровне существует проблема.
Самым правильным способом выяснить это является снятие дампа с внешнего интерфейса:
tcpdump -i eth0 -s 0 -w test.pcap
Затем файл при помощи scp переносится с сервера на рабочую станцию с графическим интерфейсом.
Дамп удобнее всего просматривать в Wireshark. В главном меню потребуется выбрать пункт Telephony, после этого появится возможность просмотреть диаграммы, отражающие передачу пакетов и прослушать разговор (в случае если голос передается по незащищенному соединению).
Проблема NAT при использовании ASTERISK и отсутствие звука
Далее будем исходить из того, что соединение устанавливается (т.е. проблем на уровне SIP нет). Признаком потери RTP пакетов будет отсутствие звука в одном направлении или в обоих. Фактически это означает, что при работе с Asterisk нет звука.
На диаграммах, которые строит Wireshark можно увидеть, что RTP трафик ходит только в одном направлении или не ходит — причина в большинстве случаев в неверной настройке сервера телефонии на работу с NAT.
NAT, как известно, ставится на границе локальной и глобальной сетей и преобразует локальные адреса в публичные — делать это он может для исходящего трафика и для входящего.
Применительно к NAT существует несколько способов настройки Asterisk в зависимости от существующей конфигурации сети.
ASTERISK на выделенном IP адресе, клиенты за NAT
Распространенным случаем (особенно при использовании виртуального сервера телефонии) являются клиенты за 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 находится за 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 и 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 или запросить таковую.
Также в сети можно найти схемы поиска причин отсутствия звука при работе с Asterisk.
Вводная статья цикла по настройке корпоративной телефонии.