Будьте в курсе всех новостей про IP-телефонию и Asterisk.

Подписка на еженедельную рассылку компании VoxLink. Статьи и инструкции по настройке Asterisk и VoIP-оборудования, рецепты и лайфхаки, обучение и бесплатные вебинары.

Будь в теме

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Настройка 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 "root@localhost.localdomain"
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:amIWlAywsXz8HjXv@192.168.10.111/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

 

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

 

asterisk, nat, sip, настройка, Подключение, for, outbound, GitHub