====== OpenVPN ====== {{:openvpn:openvpntech_logo_rounded_antialiased1.png?350|}} Свободная реализация технологии (VPN) с открытым исходным кодом для создания зашифрованных каналов типа точка-точка или сервер-клиенты между компьютерами. http://openvpn.net/ ====== Установка ====== apt install openvpn Для Debian 11 (Bullseye): apt install -t bullseye-backports openvpn ====== Настройка ====== Варианты управление ключами и сертификатами: - [[openvpn:easy-rsa|Стандартный вариант с использованием easy-rsa]] - [[xca:openvpn|Работа в XCA]] :!: Настоятельно рекомендуется все операции с ключами производить на отдельном компьютере. Файл **''[[#ca.key]]''** позволяет создавать ключи и сертификаты поэтому должен быть только у Администратора! **TAP** — эмулирует Ethernet устройство и работает на канальном уровне модели OSI, оперируя кадрами Ethernet. Используется для создания сетевого моста. Если же у вас стоит задача объединить удаленные сети в единое адресное пространство, например сделать и в офисе и в филиале единую сеть 192.168.10.0/24, то тогда бы мы использовали tap интерфейс и указывали бы на компьютерах в обоих сетях не пересекающиеся адреса из одной подсети. **TUN** — сетевой туннель, работает на сетевом уровне модели OSI, оперируя IP пакетами. Используется для маршрутизации. ---- [[https://serveradmin.ru/nastroyka-openvpn-na-centos-7/#_openvpn_8212_TAP_TUN|Установка и настройка openvpn на CentOS 7 Выбор устройства openvpn — TAP или TUN]] https://ru.wikipedia.org/wiki/TUN/TAP ===== Изменение пароля к клиентскому ключу ===== //Change passphrase for private key// Пример: openssl rsa -des3 -in client.key -out client_new.key Пример для [[ms_windows:ms_windows|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" ====== Файлы ====== ===== ca.crt ===== Корневой сертификат ===== ta.key ===== Ключ шифрования начала сессии ===== dh{n}.pem ===== [[encryption:encryption#dh|Алгоритм обмена Диффи-Хеллмана (DH)]] Параметры Диффи — Хеллмана для шифрования со стороны сервера ===== server.crt ===== Сертификат сервера ===== server.key ===== Ключ сервера ===== crl.pem ===== Список отозванных сертификатов ===== client.crt ===== Сертификат клиента ===== client.key ===== Ключ клиента ===== ta.key ===== Ключ шифрования начала сессии ====== Сервер ====== * ''[[#ca.crt]]'' * ''[[#ta.key]]'' * ''[[#dh{n}.pem]]'' * ''[[#server.crt]]'' * ''[[#server.key]]'' * ''[[#crl.pem]]'' * ''[[#server.conf]]'' Запуск systemctl start openvpn@server Статус systemctl status openvpn@server Перезапуск systemctl start openvpn@server Останов systemctl stop openvpn@server ===== server.conf ===== FIXME FIXME Директива ''client-to-client'' Путь к настройкам: ''/etc/openvpn/server'' Пример: ''/usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz'' local IP_АДРЕС_СЕРВЕРА port 1194 dev tun proto udp tun-mtu 1280 ca /etc/openvpn/server/ca.crt cert /etc/openvpn/server/server.crt key /etc/openvpn/server/server.key # This file should be kept secret dh /etc/openvpn/server/dh2048.pem crl-verify /etc/openvpn/server/crl.pem server 192.168.168.0 255.255.255.0 ifconfig-pool-persist /etc/openvpn/ipp.txt connect-retry-max 5 #auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env #script-security 3 system ;client-config-dir ccd ;route 192.168.40.128 255.255.255.248 push "route 192.168.168.0 255.255.255.0" push "route 10.1.0.0 255.255.255.0" push "dhcp-option DNS 192.168.168.1" push "dhcp-option DOMAIN domain.ru" keepalive 10 120 tls-auth /etc/openvpn/keys/ta.key 0 # This file is secret comp-lzo max-clients 5 user nobody group nogroup persist-key persist-tun status openvpn-status.log log-append /var/log/openvpn.log verb 3 mute 20 #client-connect /etc/openvpn/client-connect.sh ===== ipp.txt ===== FIXME client01,192.168.168.22 client02,192.168.168.26 client03,192.168.168.30 client04,192.168.168.34 {{anchor:ipptxt240}} Особенности 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'' это несуществующие клиенты для резервирования неиспользуемых адресов. ==== ipp-restart.sh ==== Скрипт для обновления ''/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 ==== Особенности работы с MS Windows клиентами ==== FIXME {{anchor:tunintapwin32}} OpenVPN выделяет для каждого клиента подсеть с маской ''/30'' для обеспечения совместимости с клиентами [[ms_windows:ms_windows|MS Windows]] из-за ограничения режима эмуляции ''TUN'' драйвера ''TAP-Win32''. Если к серверу OpenVPN не будут подключаться клиенты [[ms_windows:ms_windows|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:dhcp|DHCP]]-сервер, который назначает клиенту адрес ''192.168.1.**6**'', а адрес ''192.168.1.**5**'' определяется как адрес [[dhcp:dhcp|DHCP]]-сервера. Такой подход приводит к потере части IP-адресов, но это лучший способ обеспечения совместимости с всеми клиентами OpenVPN. ---- http://openvpn.net/index.php/open-source/faq/community-software-server/273-qifconfig-poolq-option-use-a-30-subnet-4-private-ip-addresses-per-client-when-used-in-tun-mode.html [[http://kb.justhost.ru/article/2077|Настройка OpenVPN клиента на Windows]] [[https://howitmake.ru/blog/win/194.html|Настройка OpenVPN клиента на Windows 10]] ===== Выполнение команд при подключении клиента ===== Нужно задать имя скрипта: 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:sudo|sudo]]: nobody ALL = (ALL) NOPASSWD:/usr/sbin/etherwake ===== logrotate ===== Настройка ротации протокола с помощью [[logrotate:logrotate|]]: /var/log/openvpn.log { daily rotate 8 compress delaycompress missingok copytruncate notifempty create 640 root } ====== Клиент ====== **[[openvpn:client_inline_config|Все настройки клиента в одном файле]]** Папка с ключами должна быть внутри папки ''config'' Список ключей и сертификатов клиента: * ''[[#ca.crt]]'' * ''[[#client.crt]]'' * ''[[#client.key]]'' * ''[[#ta.key]]'' * ''[[#client.ovpn]]'' ===== client.ovpn ===== Файл настроек клиента Пример файла: 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 ===== Пример настройки [[sudo:sudo|sudo]]: user ALL = (ALL) NOPASSWD:/usr/sbin/openvpn Пример скрипта запуска: sudo /usr/sbin/openvpn client.ovpn ===== update-resolv-conf ===== Для того, чтобы использовать DNS сервер полученный от сервера OpenVPN нужно: - Установить пакет ''resolvconf'' apt-get install resolvconf - Добавить в конец файла настроек клиента ''client.ovpn'' следующие строки: script-security 2 up /etc/openvpn/update-resolv-conf down /etc/openvpn/update-resolv-conf {{anchor:tls_problems}} ===== Проблемы с версией TLS ===== ==== Вариант 1 ==== Новый клиент не подключается с старому серверу из–за версии TLS, для решения проблемы нужно добавить в файл настройки клиента: tls-cipher "DEFAULT:@SECLEVEL=0" tls-version-min 1.0 ==== Вариант 2 ==== Старый клиент не подключается с новому серверу из–за версии TLS, в протоколе сервера ошибка: TLS_ERROR: BIO read tls_read_plaintext error Решение: изменить в настройках [[openssl:openssl|]] версию TLS в параметре ''MinProtocol'' [system_default_sect] MinProtocol = TLSv1.2 на MinProtocol = TLSv1 ---- [[https://community.sophos.com/products/xg-firewall/f/vpn/108514/debian-openvpn-client-tls-handshake-failed|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 ---- [[https://obu4alka.ru/resheno-auth-nocache-warning-v-openvpn.html|[РЕШЕНО] Auth-nocache - Warning в OpenVPN | Obu4alka]] ===== Клиенты для MS Windows ===== {{:openvpn:openvpn-install-2.4.4-i601.exe.zip|Клиент для MS Windows 7/8 (2.4.4-i601)}} Для версии OpenVPN 2.4.4 файлы настройки клиента размещаются в ''OpenVPN/config/'' В версии OpenVPN 2.4.6 файлы размещаются аналогично в ''OpenVPN/config/'' {{ :openvpn:openvpn-install-2.3.18-latest-winxp-i686.zip |Клиент для MS Windows XP (2.3.18-i001)}} {{:openvpn:openvpnportable_2.3.18.i001_32_64_bit_xp.paf.zip|Portable клиент для MS Windows XP (2.3.18-i001)}} ---- https://openvpn.net/index.php/open-source/downloads.html https://portapps.io/app/openvpn-portable/ ===== Автозапуск ===== Файл с настройками: \\ ''/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 ---- [[https://www.smarthomebeginner.com/configure-openvpn-to-autostart-linux/|Guide: Configure OpenVPN to autostart on systemd Linux | SHB]] ====== Zabbix ====== FIXME [[zabbix:zabbix|Zabbix]] [[https://serveradmin.ru/monitoring-openvpn-podklyucheniy-polzovateley-v-zabbix/|Мониторинг openvpn подключений пользователей в zabbix]] ====== Ссылки ====== * [[http://raspberrypi-hacks.com/wp-content/uploads/2013/06/openvpntech_logo_rounded_antialiased1.png|Логотип]] * [[https://raw.githubusercontent.com/OpenVPN/openvpn-gui/master/res/openvpn-gui.ico|Логотип (иконка)]] * [[http://debian-help.ru/articles/ustanovka-nastroika-openvpn-servera-debian-6/|Установка и настройка OpenVPN-сервера в Debian]] * [[http://tuxnotes.ru/articles.php?a_id=26|Описание команд и параметров OpenVPN]] * http://openvpn.net/index.php/open-source/documentation/howto.html#pki * [[http://blog.lisss.ru/archives/41|OpenVPN — не просто, а ОЧЕНЬ просто]] * [[http://blog.lisss.ru/archives/901|Клиент openVPN на Android]] * [[http://blog.lisss.ru/archives/930|Мобильное системное администрирование на Android]] * **[[http://wtf.hijacked.us/wiki/index.php/Building_a_tiered_access_OpenVPN_gateway_on_OpenBSD|Использование скриптов]]** * [[http://www.umgum.com/openvpn-installation|Установка OpenVPN]] * [[https://docs.openvpn.net/docs/openvpn-connect/openvpn-connect-android-faq.html|OpenVPN Connect Android FAQ]] * [[http://www.derefinko.net/en/linux-en/openvpn-and-systemd/|A bit of everything: OpenVPN and systemd]] * [[http://skeletor.org.ua/?p=1571|openvpn и авторизация по логину/паролю]] * [[https://wiki.debian.org/openvpn%20for%20server%20and%20client|Configure openvpn on a Debian server and client]] * [[http://nix-sa.blogspot.ru/2012/01/openvpn-x509.html|Настройка OpenVPN с использованием сертификатов X.509 (На примере FreeBSD и роутера на DD-WRT)]] * [[https://adw0rd.com/2013/1/10/openvpn/|Debian. Поднимаем свой OpenVPN сервер, настраиваем форвардинг и клиента / Мастерская интернет-разработчика]] * [[https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage|Openvpn24ManPage – OpenVPN Community]] {{tag>Network Encryption VPN}}