
OpenVPN это программный комплекс с открытым исходным кодом, который является одним из самых популярных и простых решений для реализации безопасной VPN. OpenVPN позволяет объединить сервер и клиентов (даже находящихся за NAT или брандмауэром) в единую сеть или соединить сети удаленных офисов. Серверную часть OpenVPN можно развернуть практически во всех доступных операционных системах, включая Linux, Windows, MacOS и *BSD. Вы можете установить сервер OpenVPN на Windows Server 2022/20119/2016/2012R2 или даже на компьютер под управлением настольной версии Windows (Windows 10 или 11).
В этой статье мы покажем, как установить и настроить OpenVPN-сервер на компьютере под управлением Windows 10, установить OpenVPN-клиент на другом Windows-устройстве и установить безопасное VPN-соединение.
Как установить серверную службу OpenVPN на Windows
Загрузите установщик OpenVPN MSI для вашей версии Windows с официального сайта (https://openvpn.net/community-downloads/). В нашем случае это OpenVPN-2.5.7-I602-amd64.msi (https://swupdate.openvpn.org/community/releases/OpenVPN-2.5.7-I602-amd64.msi).
Запустите установку и выберите Служба OpenVPN установить. Если вы хотите, чтобы ваш сервер OpenVPN запускался автоматически, вы можете не устанавливать OpenVPN GUI.
OpenVPN 2.5 (и более новые версии) поддерживает WinTun драйвер от разработчиков WireGuard. Этот драйвер работает быстрее, чем стандартный драйвер TAP OpenVPN. Мы рекомендуем установить драйвер Wintun вместо TAP-Windows6.
Установите Скрипты управления сертификатами EasyRSA Утилита OpenSSL.
Завершите установку.
После завершения установки вы увидите новый сетевой адаптер Туннель пользовательского пространства Wintun. Этот адаптер отключается, если служба OpenVPN не запущена.
Создание ключей и сертификатов шифрования OpenVPN
OpenVPN основана на шифровании OpenSSL. Это означает, что для установления сетевого соединения между клиентом и VPN-сервером необходимо использовать ключи и сертификаты RSA3.
Откройте командную строку и перейдите в каталог easy-rsa:
cd "C:\Program Files\OpenVPN\easy-rsa"
Создайте копию файла:
copy vars.example vars
Откройте файл vars файл в любом текстовом редакторе. Проверьте пути к рабочим папкам OpenVPN и EaseRSA.
Обязательно отредактируйте переменную EASYRSA_TEMP_DIR, как показано ниже:
set_var EASYRSA_TEMP_DIR "$EASYRSA_PKI/temp"
Вы можете заполнить поля сертификата (необязательно):
set_var EASYRSA_REQ_COUNTRY "DE" set_var EASYRSA_REQ_PROVINCE "BY" set_var EASYRSA_REQ_CITY "MUN" set_var EASYRSA_REQ_ORG "WOSHUB-Com" set_var EASYRSA_REQ_EMAIL "[email protected]" set_var EASYRSA_REQ_OU "IT dept"
Установите дату истечения срока действия сертификата:
set_var EASYRSA_CA_EXPIRE 3650 set_var EASYRSA_CERT_EXPIRE 825
Сохраните файл и выполните команду:
EasyRSA-Start.bat
Все следующие команды должны быть запущены в оболочке EasyRSA:
Инициализировать PKI:
./easyrsa init-pki
Вы должны увидеть это сообщение:
init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: C:/Program Files/OpenVPN/easy-rsa/pki
Затем создайте корневой ЦС:
./easyrsa build-ca
Введите пароль ЦС дважды:
CA creation is complete and you may now import and sign cert requests.
Команда выше создала:
- Корневой сертификат центра сертификации:
C:\Program Files\OpenVPN\easy-rsa\pki\ca.crt
- Ключ центра сертификации: C
:\Program Files\OpenVPN\easy-rsa\pki\private\ca.key
Затем сгенерируйте запрос на сертификат и ключ для вашего сервера OpenVPN:
./easyrsa gen-req server nopass
Инструмент сгенерирует два файла:
req: C:/Program Files/OpenVPN/easy-rsa/pki/reqs/server.req
ключ: C:/Program Files/OpenVPN/easy-rsa/pki/private/server.key
Подпишите запрос на выпуск сертификата сервера с помощью вашего центра сертификации:
./easyrsa sign-req server server
Подтвердите данные, набрав да.
Затем введите пароль корневого центра сертификации.
Файл server.crt появится в папке выдан папка (C:\Program Files\OpenVPN\easy-rsa\pki\issued\server.crt
).
Затем вы можете сгенерировать ключи Диффи-Хеллмана (это займет много времени):
./easyrsa gen-dh
Чтобы обеспечить дополнительную защиту вашего VPN-сервера, рекомендуется включить tls-auth. Эта функция позволяет использовать HMAC-подписи в рукопожатии SSL/TLS, тем самым инициируя дополнительную проверку целостности. Пакеты без такой подписи будут отбрасываться VPN-сервером. Это защитит вас от сканирования портов VPN-сервера, DoS-атак, переполнения буфера SSL/TLS и т. д.
Сгенерируйте ключ tls-auth:
cd C:\Program Files\OpenVPN\bin
openvpn --genkey secret ta.key
[C:\Program Files\OpenVPN\bin\ta.key
появится файл. Переместите его в C:\Program Files\OpenVPN\easy-rsa\pki папка.
Затем вы можете сгенерировать ключи для ваших клиентов OpenVPN. У каждого клиента, подключающегося к вашему VPN-серверу, должна быть своя пара ключей.
Существует несколько способов генерировать ключи OpenVPN и распространять их среди клиентов.
В примере ниже мы создадим клиентский ключ на сервере и защитим его паролем (PEM pass phrase):
./easyrsa gen-req testuser1
./easyrsa sign-req client testuser1
Скопируйте файл ключа (C:\Program Files\OpenVPN\easy-rsa\pki\private\testuser1.key
) на компьютер клиента сообщите пользователю пароль (голосом, по электронной почте, SMS). Клиент может отключить защиту ключа паролем:
openssl rsa -in "C:\Program Files\OpenVPN\easy-rsa\pki\private\testuser1.key"-out "C:\Program Files\OpenVPN\easy-rsa\pki\private\testuser1_use.key"
Если вы хотите сгенерировать ключ, не защищенный паролем, выполните команду:
./easyrsa gen-req testuser2 nopass
Вы можете создать любое количество ключей и сертификатов для пользователей на вашем VPN-сервере. Аналогичным образом создайте ключи и сертификаты для других клиентов.
Вы можете отзывать скомпрометированные сертификаты клиентов:
cd C:\Program Files\OpenVPN\easy-rsa
EasyRSA-Start.bat
./easyrsa revoke testuser2
Итак, мы сгенерировали набор ключей и сертификатов для сервера OpenVPN. Теперь вы можете настроить и запустить свою службу VPN.
Файл конфигурации сервера OpenVPN для Windows
Скопируйте шаблон файла конфигурации для сервера OpenVPN:
copy "C:\Program Files\OpenVPN\sample-config\server.ovpn" "C:\Program Files\OpenVPN\config-auto\server.ovpn"
Откройте файл server.ovpn в любом текстовом редакторе и выполните настройки. Я использую следующую конфигурацию OpenVPN:
# Specify a port, a protocol and a device type port 1194 proto udp dev tun # Specify paths to server certificates ca "C:\\Program Files\\OpenVPN\\easy-rsa\\pki\\ca.crt" cert "C:\\Program Files\\OpenVPN\\easy-rsa\\pki\\issued\\server.crt" key "C:\\Program Files\\OpenVPN\\easy-rsa\\pki\\private\\server.key" dh "C:\\Program Files\\OpenVPN\\easy-rsa\\pki\\dh.pem" # Specify the settings of the IP network your VPN clients will get their IP addresses from server 10.24.1.0 255.255.255.0 # If you want to allow your clients to connect using the same key, enable the duplicate-cn option (not recommended) # duplicate-cn # TLS protection tls-auth "C:\\Program Files\\OpenVPN\\easy-rsa\\pki\\ta.key" 0 cipher AES-256-GCM # Other options keepalive 20 60 persist-key persist-tun status "C:\\Program Files\\OpenVPN\\log\\status.log" log "C:\\Program Files\\OpenVPN\\log\\openvpn.log" verb 3 mute 20 windows-driver wintun
Сохраните файл.
Не забудьте открыть порты в брандмауэре для указанного вами номера порта OpenVPN на клиенте и сервере. Вы можете открыть порт в Windows Defender с помощью PowerShell.
Правило брандмауэра для сервера OpenVPN:
New-NetFirewallRule -DisplayName "AllowOpenVPN-In" -Direction Inbound -Protocol UDP –LocalPort 1194 -Action Allow
Правило для клиента:
New-NetFirewallRule -DisplayName "AllowOpenVPN-Out" -Direction Outbound -Protocol UDP –LocalPort 1194 -Action Allow
Затем запустите службу OpenVPN и измените тип ее запуска на автоматический. Используйте PowerShell для включения службы:
Set-Service OpenVPNService –startuptype automatic –passthru
Get-Service OpenVPNService| Start-Service
Откройте диалоговое окно сетевых подключений (ncpa.cpl
) и убедитесь, что виртуальный адаптер OpenVPN Wintun теперь включен. Если это не так, проверьте файл журнала C:\Program Files\OpenVPN\log\server.log
.
Options error: In C:\Program Files\OpenVPN\config-auto\server.ovpn:1: Maximum option line length (256) exceeded, line starts with…
Измените символ перевода строки на CRLF в Windows (в Notepad++ выберите Edit -> EOL Conversion -> Windows CR LF) в файле server.ovpn. Сохраните файл и перезапустите службу OpenVPNS.
Эта конфигурация OpenVPN позволяет удаленным клиентам получать доступ только к ресурсам сервера. Другие компьютеры и службы в локальной сети сервера недоступны для удаленных клиентов. Чтобы разрешить клиентам OpenVPN доступ к внутренней локальной сети, включите опцию IPEnableRouter параметр в реестре (включает IP-маршрутизацию в Windows, включая маршрутизацию между сетями Hyper-V, и позволяет использовать переадресацию портов):
reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v IPEnableRouter /t REG_DWORD /d 1 /f
Добавьте маршруты к локальной IP-сети в файл конфигурации сервера:
push "route 10.24.1.0 255.255.255.0" push "route 192.168.31.0 255.255.255.0"
При необходимости назначьте клиенту адреса DNS-серверов:
push "dhcp-option DNS 192.168.31.10" push "dhcp-option DNS 192.168.31.11"
Если вы хотите перенаправлять все запросы клиента (включая интернет-трафик) на ваш OpenVPN-сервер, добавьте опцию:
push "redirect-gateway def1"
Настройка клиента OpenVPN в Windows
Создайте шаблонный файл конфигурации VPN-клиента (на основе шаблона client.ovpn) на вашем сервере со следующими настройками (имя файла testuser1.ovpn):
client dev tun proto udp remote your_vpn_server_address 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert testuser1.crt key testuser1.key remote-cert-tls server tls-auth ta.key 1 cipher AES-256-GCM connect-retry-max 25 verb 3
Скачать и установить OpenVPN Connect для Windows (https://openvpn.net/downloads/openvpn-connect-v3-windows.msi).
Затем скопируйте следующие файлы с вашего сервера на компьютер с установленным клиентом OpenVPN:
- ca.crt
- testuser1.crt
- testuser1.key
- dh.pem
- ta.key
- testuser1.ovpn
Импорт *.ovpn
файл профиля и попробуйте подключиться к вашему VPN-серверу.
Если вы все настроили правильно, вы увидите изображение ниже:
Проверьте журнал соединений OpenVPN на клиенте: C:\Program Files\OpenVPN Connect\agent.log
Mon Jul 17 08:09:30 2022 proxy_auto_config_url Mon Jul 17 08:09:31 2022 TUN SETUP TAP ADAPTERS: guid='{25EE4A55-BE90-45A0-88A1-8FA8FEF24C42}' index=22 name="Local Area Connection" Open TAP device "Local Area Connection" PATH="\\.\Global\{25EE4A55-BE90-45A0-88A1-8FA8FEF24C42}.tap" SUCCEEDED TAP-Windows Driver Version 9.24 ActionDeleteAllRoutesOnInterface iface_index=22 netsh interface ip set interface 22 metric=1 Ok. netsh interface ip set address 22 static 10.24.1.10 255.255.255.252 gateway=10.24.1.5 store=active IPHelper: add route 10.24.1.1/32 22 10.24.1.5 metric=-1
Клиент успешно подключился к VPN-серверу и получил IP-адрес 10.24.1.10.
Теперь проверьте журнал OpenVpn на стороне сервера (C:\Program Files\OpenVPN\log\openvpn.log
). Здесь вы также можете увидеть, что клиент с testuser1 сертификат успешно подключился к серверу.
2022-07-17 08:09:35 192.168.13.20:55648 [tesuser1] Peer Connection Initiated with [AF_INET6]::ffff:192.168.13.20:55648 2022-07-17 08:09:35 tesuser1/192.168.13.20:55648 MULTI_sva: pool returned IPv4=10.24.1.10, IPv6=(Not enabled) 2022-07-17 08:09:35 tesuser1/192.168.13.20:55648 MULTI: Learn: 10.24.1.10 -> testuser1/192.168.13.20:55648 2022-07-17 08:09:35 tesuser1/192.168.13.20:55648 MULTI: primary virtual IP for tesuser1/192.168.13.20:55648: 10.24.1.10