Создание защищенного канала голосовой связи (IP-телефония с VPN)

Задача: создать защищенный канал голосовой связи "точка-точка".

Для реализации задачи используется IP-телефония через шифрованный канал VPN, что позволяет защититься от прослушивания.

Для связи понадобятся два IP-телефона с поддержкой VPN, подключенные к Интернет. В нашем случае используются IP-телефоны Yealink W52P. Необходимо отметить, что партии этих телефонов для некоторых стран не имеют функцию VPN.

Сердце системы - сервер VPN, который обеспечивает шифрование голосового трафика.
VPN туннель для IP-телефонии
На рисунке выше приведена схема подключения IP-телефона, предлагаемая компанией Yealink. Можно использовать более простой вариант: VPN поднять на виртуальном сервере, размещенном на площадке хостера. Но в этом случае придется платить незначительную абонплату.

Установка и настройка OpenVPN сервера под Debian

VPN-сервер должен иметь две сетевые карты, (даже?) если он находится внутри локальной сети.

Проверяем доступность устройства TUN:

ls -l /dev/net/tun

Ответ должен быть примерно таким:
Проверка TUN

Для установки OpenVPN сервера потребуются модули OpenSSL и LZO.

aptitude install openssl
aptitude install debian-keyring debian-archive-keyring
apt-get install liblzo2-2
apt-get install openvpn

Если менеджер пакетов aptitude не установлен в системе, то делаем:

apt-get update
apt-get install aptitude

Создаем папку для работы с ключами и копируем в нее стандартные утилиты.

mkdir /etc/openvpn/easy-rsa/
cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/

Если easy-rsa нет (для версий openvpn старше 2.3), то устанавливаем и копируем необходимые файлы из другой директории:

aptitude install easy-rsa
cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa/

Переходим в директорию /etc/openvpn/easy-rsa/ и вводим свои данные в последние 5 строк файла vars:
Настройки в файле vars

IP-телефон Yealink W52P использует алгоритм шифрования SHA1, поэтому необходимо изменить следующие параметры в конфигурационном файле OpenSSL /etc/openvpn/easy-rsa/openssl-1.0.0.cnf:

[CA_default]
default_md=sha1
[req]
default_md=sha1

Создаем сертификаты в директории /etc/openvpn/easy-rsa/:

source ./vars
./clean-all
./build-ca
./build-key-server server
./build-key user
./build-dh
openvpn --genkey --secret keys/ta.key

Последняя строка не обязательна, но позволяет усилить безопасность. При создании сертификата отвечаем утвердительно на запрос подписи.

Примечание от 26.07.2019. Easy-RSA версии 3 содержит только один скрипт easyrsa. Файл vars можно не использовать. Следующие команды необходимо выполнить для Easy-RSA v.3:

cd /etc/openvpn/easyrsa
./easyrsa init-pki
./easyrsa build-ca nopass
./easyrsa gen-req server nopass
./easyrsa sign-req server server
./easyrsa gen-req user nopass
./easyrsa sign-req client user
./easyrsa gen-crl
mkdir /etc/openvpn/ssl -p
openssl dhparam -out /etc/openvpn/ssl/dh.pem 2048
cd /etc/openvpn/ssl
openvpn --genkey --secret ta.key

Ключи созданы. Серверные ключи server.crt, server.key, server.csr, ca.crt, ca.key, dh1024.pem (dh2048.pem) кидаем в папку /etc/openvpn/.
Пользовательские ключи user.crt, user.key, ca.crt понадобятся для настройки IP-телефона.

Копируем файл настроек server.conf из /usr/share/doc/openvpn/examples/sample-config-files в /etc/openvpn/ и меняем настройки на следующие:

port 1194
proto udp
dev tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
client-to-client
keepalive 10 120
comp-lzo no
persist-key
persist-tun
status /etc/openvpn/openvpn-status.log
log /etc/openvpn/openvpn.log
verb 3

Если VPN-сервер находится в локальной сети, то необходимо добавить соответствующие маршруты командой push route.

Примечание: для блокирования подключений пользователей с отозванными сертификатами (revoke-full user) добавить в конфиг:

crl-verify /etc/openvpn/easy-rsa/keys/crl.pem

При этом желательно подправить переменные default_days, default_crl_days в конфиге /etc/ssl/openssl.cnf в сторону увеличения, например, 3650 дней. Чтобы не возникала ошибка "CRL has expired".

Включаем форвардинг:

sysctl net.ipv4.ip_forward=1

Запоминаем настройку в /etc/sysctl.conf.

Запускаем VPN-сервер:

/etc/init.d/openvpn start

Если не появился сетевой интерфейс tun (проверка командой ifconfig -a), то помогает перезагрузка сервера.

Настройка IP-телефона Yealink W52P

IP-phone Yealink w52p

Копируем файл настроек VPN-клиента:

mkdir /etc/openvpn/client/
cp -r /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/client/vpn.cnf

Меняем настройки клиента на следующие:

client
setenv SERVER_POLL_TIMEOUT 4
dev tun
dev-type tun
proto udp
# VPN-server IP
remote 00.00.00.00 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca /config/openvpn/keys/ca.crt
cert /config/openvpn/keys/user.crt
key /config/openvpn/keys/user.key
ns-cert-type server
comp-lzo no
verb 3
reneg-sec 604800
sndbuf 100000
rcvbuf 100000
auth-retry nointeract

В директорию /etc/openvpn/client/keys/ закидываем следующие файлы, созданные ранее:
ca.crt
user.crt
user.key

Все готово для архивирования файлов, которые будут загружены на телефон:

cd /etc/openvpn/client/
tar -cvpf openvpn.tar *

Полученный архив openvpn.tar закидываем на телефон.
yealink w52p set vpn
После импорта файла необходимо нажать кнопку "Confirm" внизу страницы.

После перезагрузки на экране телефона должен появиться значок "VPN". Аналогичным образом настраивается любое количество телефонов с отдельными клиентскими сертификатами.

С телефона на телефон можно звонить по IP-адресу устройства, например, 10.8.0.6. IP-адрес выдает VPN-сервер. Список контактов телефона Yealink W52P редактируется через веб-морду: Contacts - экспорт/импорт.

Дополнительная информация по настройке VPN-сервера и клиентов в инструкции OpenVPN features Yealink IP Phones.

Примечания:
Вместо IP-телефонов Yealink можно использовать более дешевые мобильные смартфоны и дополнительный софт: OpenVPN, CSIPSimple, SA Контакты (для импорта контактов в смартфон).

Для точечных настроек пользователя используем профиль в директории /etc/openvpn/ccd. Например,

#дать клиенту статический IP-адрес
ifconfig-push 10.8.0.6 10.8.0.7
#обязательно для софт-клиентов (смартфоны)
push "redirect-gateway def1 bypass-dhcp"

---
IP-телефоны Yealink моделей W52P, W56P имеют функцию удаленной записной книги. Удаленная записная книга представляет собой XML-файл, доступ к которому осуществляется по протоколу HTTP. На сервере OpenVPN можно поднять веб-сервис (Apache) для работы с удаленными записными книгами.

Пример пути к удаленной записной книге: http://10.8.0.1/test.xml

Формат файла XML:

<?xml version="1.0" encoding="utf-8"?>
<YealinkIPPhoneBook>
<Title>Контакты</Title>
<Menu Name="ИмяГруппы">
<Unit Name="ИмяКонтакта" default_photo="" Phone3="" Phone2="" Phone1="10.8.0.4"/>
<Unit Name="ИмяКонтакта2" default_photo="" Phone3="" Phone2="" Phone1="10.8.0.8"/>
</Menu>
</YealinkIPPhoneBook>

Для ограничения доступа к контактам меняем настройки Apache-сервера в файле ports.conf:

Listen 10.8.0.1:80

---
Данная технология прекрасно работает на смартфонах с помощью программы CSIPSimple (скачать apk-файл надо с apkpure), но только на смартфонах с Android 8 и ниже. Для синхронизации контактов с удаленной адресной книгой используется программа ContactsXML.

Создание защищенного канала голосовой связи (IP-телефония с VPN): 2 комментария

  1. Здравствуйте как организовать через IP VPN громкоговорящая связь по тч каналу

    • Что такое «тч»? И насколько громко? Иногда достаточно включить динамик на телефоне.

Добавить комментарий для Кайрат Отменить ответ

Ваш адрес email не будет опубликован.

Confirm that you are not a bot - select a man with raised hand: