Настройка WebRTC в Asterisk 13
В данной статье речь пойдёт о настройке Asterisk 13 для подключения клиентов по WebRTC. Каждый компонент, требуемый для работы WebRTC, будет описан в отдельном разделе.
(Приведённые настройки рассчитаны на CentOS 6, FreePBX 13 и Asterisk 13, приведена настройка для канала chan_sip).
DNS-имя
Первое, что нужно для нормальной работы WebRTC — DNS-имя для вашего сервера Asterisk. В принципе, WebRTC будет работать и с IP-адресом, но такое решение годится только для тестирования. В описываемом примере DNS-имя сервера Asterisk будет fubar-pbx.local. Указывать DNS-имя где-либо в настройках самого сервера телефонии не обязательно, поэтому переходим к следующему пункту.
SSL-сертификат
SSL-сертификат для работы WebRTC нужен обязательно. Соединение по websocket может быть нешифрованным, но голос может передаваться только по SRTP с использованием DTLS, наличие сертификата для этого обязательно. Для нормальной работы WebRTC, сертификат должен быть доверенным для всех браузеров, в которых будет запускаться WebRTC-клиент, поэтому сертификат придётся купить или воспользоваться корпоративным центром сертификации.
Для тестирования сгодится и сертификат, сгенерированный с помощью EasyRSA, открытый ключ полученного центра сертификации даже можно будет сделать доверенным для клиентов и использовать полученный сертификат в продашн. Естественно, в поле сертификата CN должно быть указано DNS-имя (или IP-адрес, если Вы всё-таки решили использовать IP-адрес). Ниже приведены команды, с помощью которых можно создать сертификат, используя актуальную версию EasyRSA (скачивание, распаковка и переход в директорию с EasyRSA — упражнение для читателя).
yes | cp ./vars.example ./vars
# Заполняем параметры EasyRSA приемлимыми значениями
sed -ri ‘s|^#set_var EASYRSA_REQ_COUNTRY[[:space:]]+.*|set_var EASYRSA_REQ_COUNTRY «RU»|;
s|^#set_var EASYRSA_REQ_PROVINCE[[:space:]]+.*|set_var EASYRSA_REQ_PROVINCE «Province»|;
s|^#set_var EASYRSA_REQ_CITY[[:space:]]+.*|set_var EASYRSA_REQ_CITY «City»|;
s|^#set_var EASYRSA_REQ_ORG[[:space:]]+.*|set_var EASYRSA_REQ_ORG «Organization»|;
s|^#set_var EASYRSA_REQ_EMAIL[[:space:]]+.*|set_var EASYRSA_REQ_EMAIL «[email protected]»|;
s|^#set_var EASYRSA_REQ_OU[[:space:]]+.*|set_var EASYRSA_REQ_OU «Unit»|’ ./vars
sed -ri ‘s|^#set_var EASYRSA_KEY_SIZE[[:space:]]+.*|set_var EASYRSA_KEY_SIZE 2048|;
s|^#set_var EASYRSA_ALGO[[:space:]]+.*|set_var EASYRSA_ALGO rsa|;
s|^#set_var EASYRSA_CA_EXPIRE[[:space:]]+.*|set_var EASYRSA_CA_EXPIRE 3650|;
s|^#set_var EASYRSA_CERT_EXPIRE[[:space:]]+.*|set_var EASYRSA_CERT_EXPIRE 3650|;
s|^#set_var EASYRSA_DIGEST[[:space:]]+.*|set_var EASYRSA_DIGEST «sha256″|’ ./vars
# Создаём ключ и сертификат центра сертификации
./easyrsa —batch init-pki
./easyrsa —batch —req-cn=»$(uuid)» build-ca nopass
# Создаём и подписываем сертификат для сервера
./easyrsa —batch —req-cn=fubar-pbx.local gen-req FubarPBX nopass
./easyrsa —batch sign server FubarPBX
# Конвертируем полученный сертификат в формат PEM
openssl x509 -in pki/issued/FubarPBX.crt -out pki/issued/FubarPBX.pem -outform PEM
Нужные нам файлы:
./pki/ca.crt — сертификат центра сертификации
./pki/issued/FubarPBX.pem — сертификат сервера
./pki/private/FubarPBX.key — закрытый ключ сервера
Все эти файлы нужно загрузить через модуль FreePBX «Certificate Management» (выберите пункт «New Certificate» → «Upload Certificate» при добавлении сертификата)
В поле Private Key вставьте закрытый ключ, в поле Certificate — сертификат, в поле Trusted Chain — сертификат центра сертификации, затем нажмите «Generate Certificate» (FreePBX сохранит данные сертификата в файлы в директории /etc/asterisk/keys).
STUN-сервер
Даже если между клиентом и сервером не будет NAT, для нормальной работы WebRTC требуется наличие механизма ICE, как минимум, для того, чтобы клиент и сервер могли определить, какой из своих IP-адресов указывать в SDP. Совсем без ICE, WebRTC работать не будет, т.к. в заголовки c= в SDP будут вписываться либо все IP-адреса хоста, либо ни одного. Для реализации ICE мы поднимем простой STUN-сервер, он не поможет нам обойти большую часть современных NAT, но от него это и не требуется. NAT будем обходить с помощью привычного механизма SIP Comedia, а STUN здесь нужен для того, чтобы клиент и сервер WebRTC могли определить правильный IP-адрес для подстановки в SDP.
STUN-сервер желательно установить на другом хосте (не на сервере Asterisk), на CentOS 6 можно поставить из EPEL пакет stun-server. Для работы STUN-сервера необходимо наличие двух IP-адресов, в нашем случае это будут адреса 192.168.100.55/24 и 192.168.100.56/24, оба настроены на сетевом интерфейсе eth0.
Также нам понадобится init-скрипт для STUN-сервера (в пакет stun-server он почему-то не входит), приведённый init-скрипт был позаимствован здесь
#!/bin/sh
#
# Startup/shutdown script for the STUN-Server
#
# Linux chkconfig stuff:
#
# chkconfig: 35 90 10
# description: Startup/shutdown script for the STUN-Server
#
# Source function library.
if [ -f /etc/init.d/functions ] ; then
. /etc/init.d/functions
elif [ -f /etc/rc.d/init.d/functions ] ; then
. /etc/rc.d/init.d/functions
else
exit 0
fi
DAEMON=/usr/sbin/stun-server
IP1=192.168.100.55
IP2=192.168.100.56
prog=stun-server
start () {
echo -n $»Starting $prog: »
# start daemon
daemon $DAEMON -b -h $IP1 -a $IP2 2>/dev/null
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/stun-server
return $RETVAL
}
stop () {
# stop daemon
echo -n $»Stopping $prog: »
killproc $DAEMON
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f /var/lock/subsys/stun-server
}
restart() {
stop
start
}
case $1 in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
condrestart)
[ -f /var/lock/subsys/stun-server ] && restart || :
;;
status)
status $DAEMON
;;
*)
echo $»Usage: $prog {start|stop|restart|condrestart|status}»
exit 1
esac
exit $RETVAL
Скрипт нужно сохранить в файл /etc/init.d/stun-server
Что делать дальше, должно быть очевидно
chkconfig —add stun-server
service stun-server start
Если stun-server не работает можете запустить его вручную и посмотреть, на что он ругается
stun-server -v -h 192.168.100.55 -a 192.168.100.56
Важное замечание насчёт STUN — STUN-сервер должен вернуть WebRTC-серверу IP-адрес, на который WebRTC-клиент сможет отправить RTP-трафик, и RTP-трафик дойдёт до WebRTC-сервера. Т.е. STUN-сервер, описанный здесь, подойдёт для подключения клиентов из локальной сети и из удалённых подразделений по VPN. Если в данном сценарии использовать, к примеру, публичный STUN-сервер, WebRTC-сервер подставит в SDP внешний IP-адрес и WebRTC-клиент будет пытаться отправлять RTP-трафик на внешний IP-адрес со всеми вытекающими последствиями.
Это ещё не всё, Asterisk тоже должен использовать настроенный STUN-сервер. Для этого добавьте в раздел [general] файла /etc/asterisk/rtp.conf следующие параметры:
icesupport=yes
stunaddr=192.168.100.55:3478
Если используете FreePBX, дополнительные параметры нужно указать в файле rtp_custom.conf следующим образом
[general](+)
icesupport=yes
stunaddr=192.168.100.55:3478
Встроенный HTTP-сервер Asterisk
Встроенный HTTP-сервер Asterisk будет принимать websocket-соединения от WebRTC-клиентов, но для начала его нужно включить, для этого зайдите в раздел FreePBX «Settings» → «Advanced Settings»
Включите параметр «Enable TLS for the mini-HTTP Server» (параметр «Enable the mini-HTTP Server» не нужно включать, если не планируете использовать подключения к websocket без шифрования) и укажите путь к загруженному ранее сертификату и ключу.
Настройки в файле /etc/asterisk/http.conf (если не используете FreePBX):
[general]
enabled=no
tlsenable=yes
tlsbindaddr=0.0.0.0:8089
tlscertfile=/etc/asterisk/keys/FubarPBX.pem
tlsprivatekey=/etc/asterisk/keys/FubarPBX.key
Учётная запись SIP для подключения webrtc-клиента
Создайте обычную учётную запись для канала chan_sip и укажите дополнительно следующие параметры:
NAT Mode: Yes — (force_rport,comedia)
Transport: WSS Only
Enable AVPF: Yes
Force AVP: Yes
Enable ICE Support: Yes
Enable rtcp Mux: Yes
Enable Encryption: Yes (SRTP only)
Enable DTLS: Yes
Use Certificate: FubarPBX (выберите из списка загруженный ранее сертификат)
DTLS Verify: Fingerprint
DTLS Setup: Act/Pass
Те же дополнительные параметры для указания в файле sip.conf в том же порядке:
nat=force_rport,comedia
transport=wss
avpf=yes
force_avp=yes
icesupport=yes
rtcp_mux=yes
encryption=yes
dtlsenable=yes
dtlscertfile=/etc/asterisk/keys/FubarPBX.crt
dtlsprivatekey=/etc/asterisk/keys/FubarPBX.key
dtlsverify=fingerprint
dtlssetup=actpass
Для примера был создан номер 100 со случайным паролем.
Подключение демо-клиента sipML5
Настройка WebRTC завершена, протестируем работу с помощью демо-клиента sipML5. sipML5 выбран из-за того, что только у него в демо-клиенте доступны все необходимые расширенные настройки.
Демо-клиент доступен по ссылке https://www.doubango.org/sipml5/call.htm?svn=250
Для начала зайдите в «Expert Settings»
Включите опцию «Disable Video», укажите URL для подключения к websocket (значение текстом wss://fubar-pbx.local:8089/ws) и укажите свой STUN-сервер (значение текстом — [{ url: ‘stun:192.168.100.55:3478’ }])
Сохраните расширенные настройки и вернитесь на основную страничку демо-клиента
Внесите базовые параметры для подключения и нажмите «Login», если все настройки внесены верно, сверху должна появиться надпись Connected (также команда «sip show peers» в CLI Asterisk должна отобразить подключение клиента с учётной записью 100). Также, если настройки, связанные со STUN, выполнены верно, звук должен проходить в обе стороны без какой-либо заметной задержки в начале разговора.
Остались вопросы?
Я - Кондрашин Игорь, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.
категории
- DECT
- Linux
- Вспомогательный софт при работе с Asterisk
- Интеграция с CRM и другими системами
- Интеграция с другими АТС
- Использование Elastix
- Использование FreePBX
- Книга
- Мониторинг и траблшутинг
- Настройка Asterisk
- Настройка IP-телефонов
- Настройка VoIP-оборудования
- Новости и Статьи
- Подключение операторов связи
- Разработка под Asterisk
- Установка Asterisk
VoIP оборудование
ближайшие курсы
Новые статьи
10 доводов в пользу Asterisk
Распространяется бесплатно.
Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.
Безопасен в использовании.
Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.
Надежен в эксплуатации.
Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.
Гибкий в настройке.
Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.
Имеет огромный функционал.
Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.
Интегрируется с любыми системами.
То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.
Позволяет телефонизировать офис за считанные часы.
В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.
Отличная масштабируемость.
Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.
Повышает управляемость бизнеса.
Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.
Снижает расходы на связь.
Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.