Задача: создать защищенный канал голосовой связи "точка-точка".
Для реализации задачи используется IP-телефония через шифрованный канал VPN, что позволяет защититься от прослушивания.
Для связи понадобятся два IP-телефона с поддержкой VPN, подключенные к Интернет. В нашем случае используются IP-телефоны Yealink W52P. Необходимо отметить, что партии этих телефонов для некоторых стран не имеют функцию VPN.
Сердце системы - сервер VPN, который обеспечивает шифрование голосового трафика.
На рисунке выше приведена схема подключения IP-телефона, предлагаемая компанией Yealink. Можно использовать более простой вариант: VPN поднять на виртуальном сервере, размещенном на площадке хостера. Но в этом случае придется платить незначительную абонплату.
Установка и настройка OpenVPN сервера под Debian
VPN-сервер должен иметь две сетевые карты, (даже?) если он находится внутри локальной сети.
Проверяем доступность устройства TUN:
Ответ должен быть примерно таким:
Для установки OpenVPN сервера потребуются модули OpenSSL и LZO.
aptitude install debian-keyring debian-archive-keyring
apt-get install liblzo2-2
apt-get install openvpn
Если менеджер пакетов aptitude не установлен в системе, то делаем:
apt-get install aptitude
Создаем папку для работы с ключами и копируем в нее стандартные утилиты.
cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/
Если easy-rsa нет (для версий openvpn старше 2.3), то устанавливаем и копируем необходимые файлы из другой директории:
cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa/
Переходим в директорию /etc/openvpn/easy-rsa/ и вводим свои данные в последние 5 строк файла vars:
IP-телефон Yealink W52P использует алгоритм шифрования SHA1, поэтому необходимо изменить следующие параметры в конфигурационном файле OpenSSL /etc/openvpn/easy-rsa/openssl-1.0.0.cnf:
default_md=sha1
[req]
default_md=sha1
Создаем сертификаты в директории /etc/openvpn/easy-rsa/:
./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:
./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/ и меняем настройки на следующие:
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) добавить в конфиг:
При этом желательно подправить переменные default_days, default_crl_days в конфиге /etc/ssl/openssl.cnf в сторону увеличения, например, 3650 дней. Чтобы не возникала ошибка "CRL has expired".
Включаем форвардинг:
Запоминаем настройку в /etc/sysctl.conf.
Запускаем VPN-сервер:
Если не появился сетевой интерфейс tun (проверка командой ifconfig -a), то помогает перезагрузка сервера.
Настройка IP-телефона Yealink W52P
Копируем файл настроек VPN-клиента:
cp -r /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/client/vpn.cnf
Меняем настройки клиента на следующие:
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
Все готово для архивирования файлов, которые будут загружены на телефон:
tar -cvpf openvpn.tar *
Полученный архив openvpn.tar закидываем на телефон.
После импорта файла необходимо нажать кнопку "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. Например,
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:
<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:
---
Данная технология прекрасно работает на смартфонах с помощью программы CSIPSimple (скачать apk-файл надо с apkpure), но только на смартфонах с Android 8 и ниже. Для синхронизации контактов с удаленной адресной книгой используется программа ContactsXML.
Здравствуйте как организовать через IP VPN громкоговорящая связь по тч каналу
Что такое «тч»? И насколько громко? Иногда достаточно включить динамик на телефоне.