Свободная реализация технологии (VPN) с открытым исходным кодом для создания зашифрованных каналов типа точка-точка или сервер-клиенты между компьютерами.
apt install openvpn
Для Debian 11 (Bullseye):
apt install -t bullseye-backports openvpn
Варианты управление ключами и сертификатами:
Настоятельно рекомендуется все операции с ключами производить на отдельном компьютере. Файл ca.key
позволяет создавать ключи и сертификаты поэтому должен быть только у Администратора!
TAP — эмулирует Ethernet устройство и работает на канальном уровне модели OSI, оперируя кадрами Ethernet. Используется для создания сетевого моста. Если же у вас стоит задача объединить удаленные сети в единое адресное пространство, например сделать и в офисе и в филиале единую сеть 192.168.10.0/24, то тогда бы мы использовали tap интерфейс и указывали бы на компьютерах в обоих сетях не пересекающиеся адреса из одной подсети.
TUN — сетевой туннель, работает на сетевом уровне модели OSI, оперируя IP пакетами. Используется для маршрутизации.
Установка и настройка openvpn на CentOS 7 Выбор устройства openvpn — TAP или TUN
Change passphrase for private key
Пример:
openssl rsa -des3 -in client.key -out client_new.key
Пример для MS Windows:
set OPENSSL="C:\Program Files\OpenVPN\bin\openssl" %OPENSSL% rsa -des3 -in "C:\Program Files\OpenVPN\config\old.key" -out "C:\Program Files\OpenVPN\config\new.key"
Корневой сертификат
Ключ шифрования начала сессии
Алгоритм обмена Диффи-Хеллмана (DH)
Параметры Диффи — Хеллмана для шифрования со стороны сервера
Сертификат сервера
Ключ сервера
Список отозванных сертификатов
Сертификат клиента
Ключ клиента
Ключ шифрования начала сессии
Запуск
systemctl start openvpn@server
Статус
systemctl status openvpn@server
Перезапуск
systemctl start openvpn@server
Останов
systemctl stop openvpn@server
Директива client-to-client
Путь к настройкам: /etc/openvpn/server
Пример: /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz
client01,192.168.168.22 client02,192.168.168.26 client03,192.168.168.30 client04,192.168.168.34
Особенности ipp.txt в OpenVPN версии 2.4.0
Для выдачи нужных адресов используем такую конструкцию:
N002,10.1.0.2 N003,10.1.0.3 Client-01,10.1.0.4 Client-02,10.1.0.5 Client-03,10.1.0.6 N007,10.1.0.7 N008,10.1.0.8 N009,10.1.0.9 N010,10.1.0.10 Client-04,10.1.0.11 Client-05,10.1.0.12 Client-06,10.1.0.13
где N002
, N003
, N007
, N008
, N009
и N010
это несуществующие клиенты для резервирования неиспользуемых адресов.
Скрипт для обновления /etc/openvpn/server/ipp.txt
, новый файл: /etc/openvpn/server/ipp.txt-new
#!/bin/bash systemctl stop openvpn@server sleep 3 cp /etc/openvpn/server/ipp.txt-new /etc/openvpn/server/ipp.txt sleep 3 systemctl start openvpn@server systemctl status openvpn@server
OpenVPN выделяет для каждого клиента подсеть с маской /30
для обеспечения совместимости с клиентами MS Windows из-за ограничения режима эмуляции TUN
драйвера TAP-Win32
.
Если к серверу OpenVPN не будут подключаться клиенты MS Windows, то можно отключить такой порядок выделения адресов указав в настройках сервера директиву ifconfig-pool-linear
192.168.1.4/30 |
|
192.168.1.4 | Сетевой адрес (network address) |
192.168.1.5 | Адрес виртуального маршрутизатора, шлюза, в качестве которого выступает сервер OpenVPN (virtual IP address in the OpenVPN Server) |
192.168.1.6 | Адрес выдаваемый клиенту (assigned to the client) |
192.168.1.7 | Широковещательный адрес (broadcast address) |
Драйвер TAP-Win32
включает DHCP-сервер, который назначает клиенту адрес 192.168.1.6
, а адрес 192.168.1.5
определяется как адрес DHCP-сервера.
Такой подход приводит к потере части IP-адресов, но это лучший способ обеспечения совместимости с всеми клиентами OpenVPN.
Нужно задать имя скрипта:
client-connect /etc/openvpn/client-connect.sh
Пример кода скрипта:
case ${common_name} in Client01) sudo /usr/sbin/etherwake 00:11:22:33:44:55 ;; Client02) sudo /usr/sbin/etherwake 55:44:33:22:11:00 ;; esac exit 0
Пример настройки sudo:
nobody ALL = (ALL) NOPASSWD:/usr/sbin/etherwake
Настройка ротации протокола с помощью logrotate:
/var/log/openvpn.log { daily rotate 8 compress delaycompress missingok copytruncate notifempty create 640 root }
Все настройки клиента в одном файле
Папка с ключами должна быть внутри папки config
Список ключей и сертификатов клиента:
Файл настроек клиента
Пример файла:
client dev tun proto udp remote vpn.domain.ru resolv-retry infinite nobind persist-key persist-tun ns-cert-type server comp-lzo verb 3 ca ca.crt cert client1.crt key client1.key tls-auth ta.key 1
Пример настройки sudo:
user ALL = (ALL) NOPASSWD:/usr/sbin/openvpn
Пример скрипта запуска:
sudo /usr/sbin/openvpn client.ovpn
Для того, чтобы использовать DNS сервер полученный от сервера OpenVPN нужно:
resolvconf
apt-get install resolvconf
client.ovpn
следующие строки:script-security 2 up /etc/openvpn/update-resolv-conf down /etc/openvpn/update-resolv-conf
Новый клиент не подключается с старому серверу из–за версии TLS, для решения проблемы нужно добавить в файл настройки клиента:
tls-cipher "DEFAULT:@SECLEVEL=0" tls-version-min 1.0
Старый клиент не подключается с новому серверу из–за версии TLS, в протоколе сервера ошибка:
TLS_ERROR: BIO read tls_read_plaintext error
Решение:
изменить в настройках OpenSSL версию TLS в параметре MinProtocol
[system_default_sect] MinProtocol = TLSv1.2
на
MinProtocol = TLSv1
Debian openvpn client TLS handshake failed - VPN - XG Firewall - Sophos Community
WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this
Нужно указать в client.ovpn
auth-nocache
Клиент для MS Windows 7/8 (2.4.4-i601)
Для версии OpenVPN 2.4.4 файлы настройки клиента размещаются в OpenVPN/config/
В версии OpenVPN 2.4.6 файлы размещаются аналогично в OpenVPN/config/
Клиент для MS Windows XP (2.3.18-i001)
Portable клиент для MS Windows XP (2.3.18-i001)
Файл с настройками:
/etc/openvpn/client.conf
Подготовка:
systemctl enable openvpn@client.service systemctl daemon-reload
Запуск openvpn
service openvpn start
Состояние:
systemctl status openvpn@client.service
Останов клиента:
systemctl stop openvpn@client.service
запуск клиента:
systemctl start openvpn@client.service
Guide: Configure OpenVPN to autostart on systemd Linux | SHB