artem
04.07.2017
4450

Шифрование вызовов при использовании DUNDi

В статье «Настройка DUNDi для динамической маршрутизации вызовов между хостами Asterisk» была описана базовая настройка DUNDi с использованием IAX2 для совершения вызовов. К сожалению, шифрование IAX2 (параметр encryption=yes) не работает в этом случае, а SIP с DUNDi работает только по UDP и только без аутентификации. В этой статье будет описан способ настройки DUNDi с использованием SIP по TLS и SRTP.

DUNDi

Настройка DUNDi

Настройку DUNDi нужно выполнить по упомянутой выше статье (исходные данные те же самые, IP-адреса серверов — 192.168.10.111 и 192.168.10.222), в маппинге DUNDi нужно точно так же указывать IAX2, но IAX2-пользователя iax_dundi создавать не нужно, т.к. он не будет использоваться. Также не нужно добавлять контексты диалплана macro-dundi-direct и outbound-dundi, т.к. для совершения вызовов через DUNDi будет использоваться другой диалплан.
К настройкам iptables на обоих серверах добавляются строки:

iptables -A INPUT -p tcp —dport 5061 -j PBXS
iptables -A INPUT -p udp —dport 10000:20000 -j PBXS
(10000-20000 — диапазон RTP-портов)

Создание сертификатов безопасности

Для работы SIP по TLS нужны сертификаты безопасности, быстрее всего будет создать их при помощи Easy RSA. Все приведённые ниже действия нужно выполнить на обоих серверах.
Скачайте и распакуйте последнюю версию Easy RSA в директории /opt

cd /opt
wget ‘https://github.com/OpenVPN/easy-rsa/releases/download/3.0.1/EasyRSA-3.0.1.tgz’
tar xf EasyRSA-3.0.1.tgz
cd EasyRSA-3.0.1

Заполните файл vars (в директории есть образец vars.example)

cat <<‘EOF123’ >vars
if [ -z «$EASYRSA_CALLER» ]; then
echo «You appear to be sourcing an Easy-RSA ‘vars’ file.» >&2
echo «This is no longer necessary and is disallowed. See the section called» >&2
echo «‘How to use this file’ near the top comments for more details.» >&2
return 1
fi

set_var EASYRSA_REQ_COUNTRY «RU»
set_var EASYRSA_REQ_PROVINCE «Province»
set_var EASYRSA_REQ_CITY «City»
set_var EASYRSA_REQ_ORG «Organization»
set_var EASYRSA_REQ_EMAIL «[email protected]»
set_var EASYRSA_REQ_OU «Unit»

set_var EASYRSA_KEY_SIZE 2048
set_var EASYRSA_ALGO rsa
set_var EASYRSA_CA_EXPIRE 3650
set_var EASYRSA_CERT_EXPIRE 3650
set_var EASYRSA_DIGEST «sha256»
EOF123

Создайте сертификат CA

./easyrsa —batch init-pki
./easyrsa —batch —req-cn=CA-«$(uuid)» build-ca nopass

Создайте сертификат для SIP

# на 192.168.10.111
./easyrsa —batch —req-cn=192.168.10.111 gen-req sip-tls nopass
./easyrsa —batch sign server sip-tls

# на 192.168.10.222

./easyrsa —batch —req-cn=192.168.10.222 gen-req sip-tls nopass
./easyrsa —batch sign server sip-tls

Конвертируйте созданный сертификат в формат PEM

openssl x509 -in pki/issued/sip-tls.crt -out pki/issued/sip-tls.pem -outform PEM

Копируйте все необходимые сертификаты и закрытый ключ в директорию /etc/asterisk/keys

mkdir -p /etc/asterisk/keys
cp pki/issued/sip-tls.pem /etc/asterisk/keys/
cp pki/issued/sip-tls.key /etc/asterisk/keys/
cp pki/ca.crt /etc/asterisk/keys/
chown -R asterisk:asterisk /etc/asterisk/keys

Теперь в файл /etc/asterisk/keys/ca.crt на каждом из серверов нужно добавить открытый ключ CA с другого сервера (просто допишите в конец файла /etc/asterisk/keys/ca.crt содержимое файла /opt/EasyRSA-3.0.1/pki/ca.crt с другого сервера). Это нужно для того, чтобы сервера могли проверить подлинность сертификатов друг друга.
С сертификатами всё, переходим к настройке SIP.

Настройка SIP

Настройку SIP нужно выполнить на обоих серверах, один сервер должен выполнять регистрацию на другом сервере (в данном случае 192.168.10.222 будет регистрироваться на 192.168.10.111).
Для включения SIP по TLS нужно добавить одинаковые настройки в раздел [general] в файле /etc/asterisk/sip.conf на обоих серверах.

tlsenable=yes
tlsbindaddr=0.0.0.0:5061
tlscertfile=/etc/asterisk/keys/sip-tls.pem
tlsprivatekey=/etc/asterisk/keys/sip-tls.key
tlscafile=/etc/asterisk/keys/ca.crt
tlscipher=AES256-SHA
tlsclientmethod=tlsv1
tlsdontverifyserver=no

Далее на оба сервера нужно добавить описание SIP-устройства в файл /etc/asterisk/sip.conf.
На 192.168.10.111:

[from-192.168.10.222]
type=friend
host=dynamic
defaultuser=from-192.168.10.111
secret=amIWlAywsXz8HjXv
context=from-pbxs
nat=no
qualify=yes
trustrpid=yes
sendrpid=pai
transport=tls
encryption=yes
directmedia=no
disallow=all
allow=g722
allow=alaw
allow=ulaw

На 192.168.10.222:

[from-192.168.10.111]
type=friend
host=192.168.10.111
defaultuser=from-192.168.10.222
secret=amIWlAywsXz8HjXv
context=from-pbxs
nat=no
qualify=yes
trustrpid=yes
sendrpid=pai
transport=tls
encryption=yes
directmedia=no
disallow=all
allow=g722
allow=alaw
allow=ulaw

Также на 192.168.10.222 нужно добавить строку регистрации в раздел [general] файла /etc/asterisk/sip.conf

register => tls://from-192.168.10.222:[email protected]/from-192.168.10.222

После применения настроек SIP-регистрация должна успешно выполниться. Если в консоли Asterisk появляются ошибки SSL, убедитесь, что адреса, между которыми устанавливается SIP-подключение, соответствуют CN в своих сертификатах, что в директории /etc/asterisk/keys присутствуют все необходимые файлы, и что у пользователя, под которым запущен asterisk, есть право на чтение этих файлов и самой директории /etc/asterisk/keys. Также убедитесь, что в файл /etc/asterisk/keys/ca.crt на обоих серверах добавлены открытые ключи CA с обоих серверов.

Диалплан для вызова через DUNDi

В название SIP-устройств, созданных на предыдущем этапе, не случайно входит IP-адрес сервера. Теперь через DUNDi будет определяться IP-адрес сервера, а вызов будет совершаться через SIP-устройство, в названии которого есть этот IP-адрес.

Ниже приведён диалплан для вызова через DUNDi (маппинг называется direct):

[outbound-dundi]
exten => _XXX,1,Set(DUNDI_MAPPING=direct)
same  => n,Set(DUNDI_RES=${DUNDILOOKUP(${EXTEN},${DUNDI_MAPPING})})
same  => n,GotoIf($[«${DUNDI_RES}» = «»]?end)
same  => n,Set(DUNDI_HOST=${CUT(DUNDI_RES,@,2)})
same  => n,Set(DUNDI_HOST=${CUT(DUNDI_HOST,/,1)})
same  => n,GotoIf($[«${SIPPEER(from-${DUNDI_HOST},ip)}» = «»]?end)
same  => n,Dial(SIP/from-${DUNDI_HOST}/${EXTEN},30,T)
same  => n(end),Hangup

Контекст outbound-dundi точно так же включается в from-internal

[from-internal]
include => ext-local
include => ext-features
include => outbound-dundi
include => outbound-1
include => outbound-2

Всё готово, можно тестировать.

Телефонная книга CallMetrix
Корпоративный телефонный справочник для удобной связи между сотрудниками организации
Скачать описание CallMetrix
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Остались вопросы?

Я - Компаниец Никита, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.