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

OpenVPN – это набор open source инструментов, который заслуженно является одним из самых популярных и легких решений для организации корпоративной защищенной VPN сети. OpenVPN позволяет объединить в общую сеть сервер и клиентов (даже находящиеся за NAT или файерволами), или объединить сети удаленных офисов. Серверную часть OpenVPN можно развернуть практически на любой операционной системе (пример настройки OpenVPN на Linux), включая обычные компьютеры с десктопными редакциями Windows 11 и 10, или на Windows Server.

Этот гайд детальный гайд описывает развертывание и настройку OpenVPN сервера на Windows компьютере. Мы рассмотрели все важные аспекты включая управление сертификатами, управление конфигурацией сервера и клиента, настройки правил файервола, а также реализацию конфигураций с NAT, маршрутизацией и доступом к частным LAN, а также использование OpenVPN сервера для перенаправления всего интернет-трафика клиента.

OpenVPN чрезвычайно популярен в сегменте SOHO для организации доступа удаленных сотрудников: не нужно приобретать отдельное железо, лицензии для организации VPN сервера на базе Windows Server, или выставлять открытый RDP порт Windows в интернет, создавая дополнительные меры для защиты от подбора пароля по RDP.

Мы разворачиваем OpenVPN сервер в следующем окружении:

  • Локальная сеть: 192.168.13.0/24
  • IP адрес компьютера с Windows, на котором мы разворачиваем OpenVPN в локальной сети: 192.168.13.200
  • IP подсеть для VPN: 10.24.1.0/24
  • VPN порт и протокол: UDP 1194
  • Внешний IP адрес/DNS имя, к которому будут подключаться клиенты: myvpn.winitpro.ru 123.123.123.123 

Подразумеваем, что у Windows хоста нет белого IP адреса. На внешнем (WAN) интерфейсе роутера нужно настроить правило NAT трансляции трафика с порта 123.123.123.123:1194/UDP на IP адрес OpenVPN сервера в LAN 192.168.13.200:1194/UDP

Базовая схема и IP адрессация такой типовой реализации OpenVPN решения представлена ниже:

схема и ip адрессация нашаей openvpn сети на windows

Прежде, чем приступать убедитесь, что вы можете настроить правило NAT трансляции на своем внешнем роутере и понимаете, что это значит. Если же на сетевом интерфейсе вашего Windows хоста назначен белый IP адрес, то конфигурация еще больше упрощается за счет прямого подключения.

Установка службы OpenVPN сервера в Windows

Для развертывания OpenVPN сервера вам понадобится компьютер с Windows 10/11 с редакцией Pro или Enterprise (установка на Home редакции также возможно, но с рядом ограничений) или полноценный хост с Windows Server 2019/2022/2025 (если вы хотите планируете использовать сложную конфигурация с множеством правил маршрутизации и NAT трансляции).

Десктопные версии Windows 11/10 ограничивают максимально количество подключений 20 одновременными сессиями только при доступе к файлам и принтерам. Для OpenVPN подключений это ограничение не распространяется.

Скачайте MSI установщик OpenVPN Community Edition для вашей версии Windows с официального сайта (https://openvpn.net/community-downloads/). В нашем случае это версия OpenVPN-2.7.6-I001-amd64.msi (5.6 Мб). Установщик включает в себя и серверную и клиентские части.

Запустите установку. При выборе компонентов OpenVPN нужно обязательно установить:

  • OpenVPN Service + документацию и скрипты
  • Драйвер Data Channel Offload (оптимальный драйвер для Windows в версии OpenVPN 7 + )
  • OpenSSL Utilities (включая East RSA 3 скрипты)

Отключите установку компонентов OpenVPN GUI (это VPN клиент, который не нужен нам на сервере). Откажитесь от установки драйвера TAP-Windows6.

установка openvpn сервера на windows

До версии 2.7 в качестве драйвера рекомендовалось использовать сетевой адаптер типа Wintun Userspace Tunnel. Однако от него было решено отказаться в пользу более нового и быстрого драйвера OpenVPN Data Channel Offload for Windows ( ovpn-dco-win ), обрабатывающего трафика в ядре Windows. TAP-Windows6 еще более старый тип сетевого адаптера OpenVPN и рекомендуется к использованию только в целях совместимости).

Запустите установку.

По умолчанию OpenVPN устанавливается в каталог C:\Program Files\OpenVPN .

После окончания установки в панели управления адаптерами ncpa.cpl появится новый сетевой адаптер типа OpenVPN Data Channel Offload. Этот адаптер отключен, если служба OpenVPN не запущена.

сетевой адаптер OpenVPN Data Channel Offload

Создаем ключи шифрования и сертификаты для OpenVPN

В OpenVPN для реализации криптографических функций и обмена ключами используется open-source библиотека OpenSSL. Это означает, что для обмена трафиком между клиентом и сервером VPN нужно сгенерировать ключи и сертификаты с использованием RSA3. Скрипты Easy-RSA используются для создания вашей локальной инфраструктуры открытых ключей (PKI), включая центр сертификации, сертификаты сервера, клиента и их ключей.

Откройте командную строку и перейдите в каталог easy-rsa:

cd "C:\Program Files\OpenVPN\easy-rsa"

В файле vars можно задать глобальные переменные окружения PKI EasyRSA (опционально, можно пропустить этот шаг). Для этого, создайте копию файла:

copy vars.example vars

После этого можете отредактировать vars с помощью любого текстового редактора и изменить настройки. Например, я раскомментирую и заполню информационные поля DN для сертификатов (опционально):

set_var EASYRSA_REQ_COUNTRY "RU"
set_var EASYRSA_REQ_PROVINCE "MSK"
set_var EASYRSA_REQ_CITY "MSK"
set_var EASYRSA_REQ_ORG "IT-Company"
set_var EASYRSA_REQ_EMAIL " admin@server.vpn.ru "
set_var EASYRSA_REQ_OU " IT department "

конфигурационный файл vars при установке сертфикатов easyrsa

Срок действия сертификатов задается с помощью:

#set_var EASYRSA_CA_EXPIRE 3650
#set_var EASYRSA_CERT_EXPIRE 825

Сохраните файл и выполните команду:

.\EasyRSA-Start.bat
Следующие команды выполняются в оболочке EasyRSA Shell:
Инициализация 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 init-pki инициализация pki для openvpn

Для генерации сертификатов и ключей в easyrsa используется утилита OpenSSL. Если при запуске данных команд появится ошибка Missing or invalid OpenSSL, проверьте что на компьютере присутствует исполняемый файл библиотеки openssl.exe . В современных версиях OpenVPN он встроен в дистрибутив.

Теперь нужно сгенерировать корневой CA:

./easyrsa build-ca

Задайте дважды пароль для CA:

CA creation 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

Опция nopass указывает, что ключ создается без защиты паролем. Это упрощает конфигурацию, но менее безопасно.

Утилита сгенерирует два файла:

req: C:/Program Files/OpenVPN/easy-rsa/pki/reqs/server.req
key: C:/Program Files/OpenVPN/easy-rsa/pki/private/server.key

Подпишем запрос на выпуск сертификата сервера с помощью нашего CA:

./easyrsa sign-req server server

Подтвердите правильность данных, набрав yes.

Затем введите пароль CA от корневого CA.

В каталоге issued появится сертификат сервера ( C:\Program Files\OpenVPN\easy-rsa\pki\issued\server.crt )

сертификат сервера openvpn

Теперь можно создать ключи Диффи-Хеллмана (займет длительное время):
./easyrsa gen-dh

В OpenVPN (2.6/2.7) для дополнительной защиты управляющего TLS-трафика можно включать опцию tls-crypt (ранее использовалась опция tls-auth). Для этого нужно сгенерировать дополнительный ключ командой (в обычной командной строке):

cd "C:\Program Files\OpenVPN\bin"

./openvpn --genkey secret tc.key

Должен появиться файл C:\Program Files\OpenVPN\bin\tc.key

Теперь можно сформировать ключи для клиентов OpenVPN. Для каждого клиента, который будет подключаться к вашему серверу нужно создать собственные ключи.

Есть несколько способов генерации ключей и передачи их клиентам. В следующем примере, мы сгенерируем и подпишем ключ клиента с именем kbuldogov и защитим его паролем:

./easyrsa build-client-full kbuldogov

генерируем сертфикат для клиента easyrsa build-client-full

Данный ключ ( C:\Program Files\OpenVPN\easy-rsa\pki\private\kbuldogov.key ) нужно передать клиенту и сообщить пароль. Клиент может снять защиту паролем для ключа:

openssl rsa -in "C:\Program Files\OpenVPN\easy-rsa\pki\private\kbuldogov.key"-out "C:\Program Files\OpenVPN\easy-rsa\pki\private\kbuldogov_use.key"

снять защиту паролем с ключа клиента

Если вы хотите сгенерировать ключ, не защищенный паролем, нужно выполнить команду:

./easyrsa gen-req kbuldogov nopass

На сервере с OpenVPN вы можете создать неограниченное количество ключей и сертификатов для пользователей. Аналогичным образом сформируйте ключи и сертификаты для других клиентов.

Итак, мы сгенерировали набор ключей и сертификатов для OpenVPN сервера и одного клиента. Теперь можно настроить и запустить службу OpenVPN.

Конфигурационный файл OpenVPN сервера в Windows

Настройки OpenVPN сервера хранятся в конфигурационном файле C:\Program Files\OpenVPN\config-auto\server.ovpn . Можно создать новый чистый тестовый файл с этим именем, а можно скопировать готовый шаблон конфигурационного файл OpenVPN сервера:

copy "C:\Program Files\OpenVPN\sample-config\server.ovpn" "C:\Program Files\OpenVPN\config-auto\server.ovpn"

Скопируйте в каталог с конфигурацией сервера ( C:\Program Files\OpenVPN\config-auto ) следующие файлы ключей и сертификатов:

  • ca.crt из C:\Program Files\OpenVPN\easy-rsa\pki
  • dh.pem из C:\Program Files\OpenVPN\easy-rsa\pki
  • server.crt из C:\Program Files\OpenVPN\easy-rsa\pki\issued
  • server.key из C:\Program Files\OpenVPN\easy-rsa\pki\private
  • tc.key из C:\Program Files\OpenVPN\bin\
openvpn сервер конфигурационный файл и сертфикаты в папке config-auto

Откройте файл server.ovpn в любом текстовом редакторе и внесите свои настройки. Пример начального конфига для OpenVPN:

OpenVPN позволяет использовать как TCP, так и UDP для подключения. Рекомендуется использовать протокол UDP порт 1194, это оптимально как с точки зрения производительности, так и безопасности.
 # Указываем порт, протокол и устройство
port 1194
proto udp
dev tun
# Сертификаты и ключи сервера
ca ca.crt
cert server.crt
key server.key
dh dh.pem
# TLS защита
tls-crypt tc.key
# Указываем настройки IP сети (пул IP адресов), адреса из которой будет будут получать VPN клиенты. В тестовом файле можно создать резервации DHCP адресов для клиентов 
server 10.24.1.0 255.255.255.0
ifconfig-pool-persist ipp.txt
#если нужно разрешить клиентам подключаться под одним ключом, нужно включить опцию duplicate-cn (не рекомендуется)
#duplicate-cn
# Настройки криптографии (только современные шифры):
data-ciphers AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305
data-ciphers-fallback AES-256-GCM
# Отключение неактивных клиентов
keepalive 10 120
persist-key
persist-tun
# логи 
log-append server.log
status openvpn-status.log
verb 3
mute 20

Сохраните файл.

Если файлы сертификатов хранятся в других директориях, можно указать фиксированные пути к ним. Но при указании пути можно использовать двойной обратный слеш или прямой слеш как в Linux. Например:

ca "C:\\Program Files\\OpenVPN\\easy-rsa\\pki\\ca.crt"

cert "C:/Program Files/OpenVPN/easy-rsa/pki/issued/server.crt"

Не забудьте на сервере открыть на файерволе порты для указанного вами порта OpenVPN Можно открыть порты в Windows Defender с помощью PowerShell.
Правило для сервера:

New-NetFirewallRule -DisplayName "AllowOpenVPN-In" -Direction Inbound -Protocol UDP –LocalPort 1194 -Action Allow

Также, чтобы OpenVPN клиенты могли проверять доступность Windows сервера по ICMP:

Set-NetFirewallRule -Name CoreNet-Diag-ICMP4-EchoRequest-In -enabled True -RemoteAddress 10.24.1.0/24

Теперь нужно запустить службу OpenVPN и изменить тип ее запуска на автоматический. Воспользуйтесь таким командами PowerShell, чтобы включить службу:

Set-Service OpenVPNService –startuptype automatic –passthru
Get-Service OpenVPNService| Start-Service

запуск службы OpenVPNService

Откройте панель управления, и убедитесь, что виртуальный сетевой адаптер OpenVPN Data Channel Offload теперь активен. Если нет, смотрите лог C:\Program Files\OpenVPN\log\server.log .

активен openvpn адаптер, значит сервер запущен и ожидает подключений

Если при запуске OpenVPN вы видите в логе ошибку:

Options error: In C:\Program Files\OpenVPN\config-auto\server.ovpn:1: Maximum option line length (256) exceeded, line starts with..

Смените в файле server.ovpn символы переноса строки на Windows CRLF (в notepad++ нужно выбрать Edit -> EOL Conversion -> Windows CR LF). Сохраните файл, перезапустите службу OpevVPNService.

Разрешаем маршрутизацию и NAT через OpenVPN

Рассмотренный выше конфиг позволит удаленным клиентам получить доступ только к самому серверу OpenVPN и запущенным на нем службам, но другие компьютеры и сервисы в локальной сети сервера для них недоступны. Чтобы разрешить клиентам OpenVPN получить доступ ко всей внутренней сети, в которой расположен сервер и другим подсетям, доступных через него, нужно добавить в конфигурационный файл сервера OpenVPN ( server.ovpn ) маршруты до внутренних IP сети, которые должны быть доступны клиентам OpenVPN. Эти правила будут добавлены в таблицу маршрутизации клиента при подключении.

push "route 10.24.1.0 255.255.255.0"
push "route 192.168.13.0 255.255.255.0"

Можно назначить клиенту адреса DNS серверов для разрешения имен в сети OpenVPN:

push "dhcp-option DNS 192.168.100.11"
push "dhcp-option DNS 192.168.100.12"

Если нужно завернуть все запросы клиента (в том числе интернет-трафик) на ваш OpenVPN сервер, добавьте опцию:

push "redirect-gateway def1"

В этом случае весь трафик клиента будет идти через OpenVPN сервер (при доступе к Интернету на клиенте весь трафик будет заворачиваться на сервер).

Включить опцию IPEnableRouter в реестре (включает IP маршрутизацию в Windows, в том числе включает маршрутизацию меду сетями Hyper-V):

reg add HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v IPEnableRouter /t REG_DWORD /d 1 /f

Разрешаем пересылку пакетов между сетями:

Set-NetIPInterface -Forwarding Enabled

Теперь нужно включить NAT маскарадинг на Windows хосте, где запущен OpenVPN сервер. Это нужно, чтобы Windows подменял адреса VPN клиентов (10.24.1.X) на свой собственный физический IP из локальной сети. Чтобы создать правило маскировки для нашей VPN сети, выполните команду:

New-NetNat -Name "OpenVPN-NAT" -InternalIPInterfaceAddressPrefix "10.24.1.0/24"

New-NetNat создать правило NAT тарнсляции для OpenVPN

Указанная опция NAT маскарадинга доступна как в дестопной Windows 11, так и в Windows Server.

Если в качестве OpenVPN сервера у вас используется хост с Windows Server, то для более гибкой маршрутизации трафика и настройки правил NAT можно использовать роль Routing and Remote Access (RRAS). Включите роль в Windows Server с помощью PowerShell:

Install-WindowsFeature -Name Routing -IncludeManagementTools

Откройте консоль управления rrasmgmt.msc , создайте новую Custom configuration с поддержкой NAT и LAN routing.

rras настройка nat и маршутизации для openvpn

Запустите службу, затем перейдите в IPv4 -> NAT и добавьте новое правило в конфигурацию. Добавьте интерфейс локальной сети (LAN) и в его свойствах включите опции Public interface connected to the Internet и Enable NAT on this interface.

Включить NAT для OpenVPN клиентов в Windows Server RRAS

Настройка OpenVPN клиента в Windows

Теперь рассмотрим, как настроить OpenVPN клиент на Windows. Начнем с установки клиента OpenVPN, который устанавливается из того же самого дистрибутива, из которого мы разворачивали сервер.

При установке из MSI файла OpenVPN-2.7.6-I001-amd64.msi нужно выбрать только OpenVPN Gui+ и сетевой драйвер. Отключите установку службы OpenVPN и утилит OpenSSL, на клиенте они не нужны.

установка openvpn клиента в windows

Также можно установить клиент OpenVPN в Windows с помощью встроенного пакетного менеджера WinGet:

winget install OpenVPNTechnologies.OpenVPN

winget install OpenVPNTechnologies.OpenVPN

Конфигурационный файл OpenVPN клиента можно хранить в профиле текущего пользователя ( C:\Users\username\OpenVPN\config ) или в каталоге C:\Program Files\OpenVPN\config\ (в этом случае настроенное VPN подключение будет доступно всем пользователям Windows)

Скопируйте с OpenVPN сервера на клиента следующие ключи и сертификаты и поместите их в один из указанных выше каталогов:

  • ca.crt (корневой сертификат сервера) из C:\Program Files\OpenVPN\easy-rsa\pki
  • kbuldogov.crt (сертификат клиента) из C:\Program Files\OpenVPN\easy-rsa\pki\issued
  • kbuldogov.key (закрытый ключ клиента) из C:\Program Files\OpenVPN\easy-rsa\pki\private
  • tc.key (секретный ключ TLS-шифрования) из C:\Program Files\OpenVPN\bin\

Создайте в этой же папке конфигурационный файла для клиента OpenVPN со следующими параметрами (имя файла kbuldovov.ovpn):

client
dev tun
proto udp
remote myvpn.winitpro.ru 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert kbuldogov.crt
key kbuldogov.key
remote-cert-tls server
tls-crypt tc.key
data-ciphers AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305 
data-ciphers-fallback AES-256-GCM
connect-retry-max 25
verb 3
В директиве remote указывается публичный IP адрес или DNS имя вашего сервера OpenVPN.

Ключи и сертификаты можно зашить в файл конфигурации OVPN, и не отдавать в виде отдельных файлов. Для откройте по очереди все файлы текстовым редакторам и их содержимое прямо в файл kbuldovov.ovpn внутрь специальных тегов:

# ca ca.crt
# cert kbuldogov.crt
# key kbuldogov.key
# tls-crypt tc.key
<ca>
-----BEGIN CERTIFICATE-----
...содержимое файла ca.crt...
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
...содержимое kbuldogov.crt
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
...содержимое файла kbuldogov.key
-----END PRIVATE KEY-----
</key>
<tls-crypt>
-----BEGIN OpenVPN Static key V1-----
...содержимое файла tc.key...
-----END OpenVPN Static key V1-----
</tls-crypt>

файл ovpn клиента с вшитыми в него сертфикатами и ключами

Сохраните файл. Теперь можно подключиться к OpenVPN серверу. Щёлкните по значку OpenVPN GUI в трее и выберите Connect.

Подключиться к openvpn серверу в windows

Если все настроено правильно, появится сообщение об успешном подключении и IP адресе из VPN диапазона, назначенном клиенту.

openvpn gui клиент подключен

Откройте панель управления сетевыми адаптерами ( ncpa.cpl ) и проверьте что адаптер OpenVPN Data Channel Offload теперь активен.

openvpn адаптер активен на клиенте когда openvpn туннель поднят

Если что-то не работает, или появляются ошибки, логи OpenVPN клиента пишутся в файл %userprofile%\OpenVPN\log\client.log

Отзыв сертификатов клиентов в OpenVPN

OpenVPN позволяет отзывать выпущенные сертификаты клиентов с помощью списка отзыва сертификатов (Certificate Revocation List, CRL). Это может понадобится если пользователь, для которого выпущен сертификат уволен из компании или сертификат был скомпрометирован.

По умолчанию файл, в котором хранится список отзыва сертификатов имеет ограниченный срок действия — 180 дней. Чтобы OpenVPN-сервер не перестал пускать клиентов после этого срока с ошибкой (CRL has expired), нужно сначала увеличить срок его действия:

cd "C:\Program Files\OpenVPN\easy-rsa"

EasyRSA-Start.bat

export EASYRSA_CRL_DAYS=3650 (или внести изменения в файл vars)

./easyrsa gen-crl

easyrsa отозвать сертфикат клиента

Выполните команду отзыва, указав имя клиента:

./easyrsa revoke myclient01

Обновите список отзыва сертификатов:

./easyrsa gen-crl

Скопируйте файл C:\Program Files\OpenVPN\easy-rsa\pki\crl.pem в директорию с конфигурацией OpenVPN сервер ( C:\Program Files\OpenVPN\config-auto\ ).

Добавьте в конец файла server.ovpn строку:

crl-verify crl.pem

crl-verify настройка списка отзыва сертфикатов openvpn

Перезапустите службу OpenVPN Service. Теперь пользователь с отозванным сертификатом не сможет подключиться к серверу.


Предыдущая статья Следующая статья


Комментариев: 150 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)