Курсы по использованию Asterisk

IP-телефония — технология будущего. Обучитесь работе с IP-АТС Asterisk для того чтобы внедрить и профессионально использовать при решении коммуникационных задач.

Работайте с Asterisk профессионально!

Многоуровневая защита IP-АТС Asterisk

Телефонные станции очень часто становятся объектами хакерских атак. Узнайте, каким образом необходимо строить многоуровневую защиту для Вашей IP-АТС.

Не оставьте хакерам шансов. Защитите свой Asterisk от атак.

Используйте Веб-Интерфейс для удобства настройки

Панель управление FreePBX позволяет легко и удобно управлять всей системой. Научитесь эффективно использовать FreePBX для решения своих задач.

Управление станцией и статистика в окне браузера.

Научитесь работать с Asterisk из консоли

Для понимания работы с Asterisk необходимо уметь настраивать его вручную с конфигурационными файлами и командной строкой CLI Asterisk.

Научитесь «тонкой» настройке Asterisk

Цель курсов - максимум практики.

Обучение нацелено на практическую работу с IP-оборудованием: платы потоков E1, VoIP-телефонные аппараты, голосовые шлюзы FXS и прочее.

Обучение на реальном оборудовании — залог успеха.

Настройка WebRTC в Asterisk 13

База знаний Настройка Asterisk

В данной статье речь пойдёт о настройке 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   "root@fubar-pbx.local"|;
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, выполнены верно, звук должен проходить в обе стороны без какой-либо заметной задержки в начале разговора.

 

asterisk, nat, sip, настройка, Подключение, трафик, Call-файл, SDP, FreePBX, for, call, webrtc, Демо, centOS, 1C