OpenVPN – это набор open source программ, который заслуженно является одним из самых популярных и легких решений для реализации защищенной VPN сети. OpenVPN позволяет объединить в единую сеть сервер и клиентов (даже находящиеся за NAT или файерволами), или объединить сети удаленных офисов. Серверную часть OpenVPN можно развернуть практически на всех доступных операционных системах (пример настройки OpenVPN на Linux). Вы можете установить OpenVPN сервер даже на обычный компьютер с десктопной редакцией Windows 10.
В этой статье, мы покажем, как установить OpenVPN сервер на компьютер с Windows 10, настроить OpenVPN клиент на другом Windows хосте и установить защищенное VPN подключение.
Содержание:
- Установка службы OpenVPN сервера в Windows
- Создаем ключи шифрования и сертификаты для OpenVPN
- Конфигурационный файл OpenVPN сервера в Windows
- Настройка OpenVPN клиента в Windows
Установка службы OpenVPN сервера в Windows
Скачайте MSI установщик OpenVPN для вашей версии Windows с официального сайта (https://openvpn.net/community-downloads/). В нашем случае это OpenVPN-2.5.5-I602-amd64.msi (https://swupdate.openvpn.org/community/releases/OpenVPN-2.5.5-I602-amd64.msi).
Запустите установку.
Если вы планируете, OpenVPN сервер работал в автоматическом режиме, можно не устанавливать OpenVPN GUI. Обязательно установите OpenVPN Services.
Начиная с версии OpenVPN 2.5, поддерживается драйвер WinTun от разработчиков WireGuard. Считается, что этот драйвер работает быстрее чем классический OpenVPN драйвер TAP. Установите драйвер Wintun, откажитесь от установки TAP-Windows6.
Установите OpenSSL утилиту EasyRSA Certificate Management Scripts.
Запустите установку.
По умолчанию OpenVPN устаналивается в каталог C:Program FilesOpenVPN.
После окончания установки появится новый сетевой адаптер типа Wintun Userspace Tunnel. Этот адаптер отключен, если служба OpenVPN не запущена.
Создаем ключи шифрования и сертификаты для OpenVPN
OpenVPN основан на шифровании OpenSSL. Это означает, что для обмена трафиком между клиентом и серверов VPN нужно сгенерировать ключи и сертификаты с использованием RSA3.
Откройте командную строку и перейдите в каталог easy-rsa:
cd C:Program FilesOpenVPNeasy-rsa
Создайте копию файла:
copy vars.example vars
Откройте файл vars с помощью любого текстового редактора. Проверьте пути к рабочим директориям.
Обязательно поправьте переменную EASYRSA_TEMP_DIR следующим образом:
set_var EASYRSA_TEMP_DIR "$EASYRSA_PKI/temp"
Можете заполнить поля для сертификатов (опционально)
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 " [email protected] " set_var EASYRSA_REQ_OU " IT department "
Срок действия сертификатов задается с помощью:
#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
Теперь нужно сгенерировать корневой CA:
./easyrsa build-ca
Задайте дважды пароль для CA:
CA creation complete and you may now import and sign cert requests.
Данная команда сформировала:
- Корневой сертификат центра сертификации: «C:Program FilesOpenVPNeasy-rsapkica.crt»
- Ключ центра сертификации «C:Program FilesOpenVPNeasy-rsapkiprivateca.key»
Теперь нужно сгенерировать запрос сертификата и ключ для вашего сервера OpenVPN:
./easyrsa gen-req server 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 FilesOpenVPNeasy-rsapkiissuedserver.crt»)
Теперь можно создать ключи Диффи-Хеллмана (займет длительное время):
./easyrsa gen-dh
Для дополнительной защиты VPN сервера желательно включить tls-auth. Данная технология позволяет использовать подписи HMAC к handshake-пакетам SSL/TLS, инициируя дополнительную проверку целостности. Пакеты без такой подписи будут отбрасываться VPN сервером. Это защитит вас от сканирования порта VPN сервера, DoS атак, переполнения буфера SSL/TLS.
Сгенерируйте ключ tls-auth:
cd C:Program FilesOpenVPNbin
openvpn --genkey secret ta.key
Должен появиться файл «C:Program FilesOpenVPNbinta.key». Переместите его в каталог C:Program FilesOpenVPNeasy-rsapki
Теперь можно сформировать ключи для клиентов OpenVPN. Для каждого клиента, который будет подключаться к вашему серверу нужно создать собственные ключи.
Есть несколько способов генерации ключей и передачи их клиентам. В следующем примере, мы создадим на сервере ключ клиента и защитим его паролем:
./easyrsa gen-req kbuldogov
./easyrsa sign-req client kbuldogov
Данный ключ («C:Program FilesOpenVPNeasy-rsapkiprivatekbuldogov.key») нужно передать клиенту и сообщить пароль. Клиент может снять защиту паролем для ключа:
openssl rsa -in "C:Program FilesOpenVPNeasy-rsapkiprivatekbuldogov.key"-out "C:Program FilesOpenVPNeasy-rsapkiprivatekbuldogov_use.key"
Если вы хотите сгенерировать ключ, не защищенный паролем, нужно выполнить команду:
./easyrsa gen-req имяклиента nopass
На сервере с OpenVPN вы можете создать неограниченное количество ключей и сертификатов для пользователей. Аналогичным образом сформируйте ключи и сертфикаты для других клиентов.
Вы можете отохвать скомпрометированные сертификаты клиентов:
cd C:Program FilesOpenVPNeasy-rsa
EasyRSA-Start.bat
./easyrsa revoke kbuldogov
Итак, мы сгенерировали набор ключей и сертификатов для OpenVPN сервера. Теперь можно настроить и запустить службу OpenVPN.
Конфигурационный файл OpenVPN сервера в Windows
Скопируйте типовой конфигурационный файл OpenVPN сервера:
copy "C:Program FilesOpenVPNsample-configserver.ovpn" "C:Program FilesOpenVPNconfig-autoserver.ovpn"
Откройте файл server.ovpn в любом текстовом редакторе и внесите свои настройки. Я использую следующий конфиг для OpenVPN:
# Указываем порт, протокол и устройство port 1194 proto udp dev tun # Указываем пути к сертификатам сервера 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" # Указываем настройки IP сети, адреса из которой будет будут получать VPN клиенты server 10.24.1.0 255.255.255.0 #если нужно разрешить клиентам подключаться под одним ключом, нужвно включить опцию duplicate-cn (не рекомендуется) #duplicate-cn # TLS защита tls-auth "C:\Program Files\OpenVPN\easy-rsa\pki\ta.key" 0 cipher AES-256-GCM # Другая параметры 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 позволяет использовать как TCP, так и UDP для подключения. В этом примере я запустил OpenVPN на 1194 UDP. Рекомендуется использовать протокол UDP, это оптимально как с точки зрения производительности, так и безопасности.
Не забудьте открыть на файерволе порты для указанного вами порта OpenVPN на клиенте и на сервере. Можно открыть порты в Windows Defender с помощью PowerShell.
Правило для сервера:
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
Откройте панель управления, и убедитесь, что виртуальный сетевой адаптер OpenVPN Wintun теперь активен. Если нет, смотрите лог «C:Program FilesOpenVPNlogserver.log»
Если при запуске OpenVPN вы видите в логе ошибку:
Options error: In C:Program FilesOpenVPNconfig-autoserver.ovpn:1: Maximum option line length (256) exceeded, line starts with..
Смените в файле server.ovpn символы переноса строки на Windows CRLF (в notepad++ нужно выбрать Edit -> EOL Conversion -> Windows CR LF). Сохраните файл, перезапустите службу OpevVPNService.
Данный конфиг позволит удаленным клиентам получить доступ только к серверу, но другие компьютеры и сервисы в локальной сети сервера для них недоступны. Чтобы разрешить клиентам OpenVPN получить доступ к внутренней сети нужно:
Включить опцию IPEnableRouter в реестре (включает IP маршрутизацию в Windows, в том числе включает маршрутизацию меду сетями Hyper-V): reg add «HKLMSYSTEMCurrentControlSetServicesTcpipParameters» /v IPEnableRouter /t REG_DWORD /d 1 /f
Добавьте в конфгурационный файл сервера OpenVPN маршруты до внутренней IP сети:
push "route 10.24.1.0 255.255.255.0" push "route 192.168.100.0 255.255.255.0"
Если нужно, назначьте клиенту адреса DNS серверов:
push "dhcp-option DNS 192.168.100.11" push "dhcp-option DNS 192.168.100.12"
Если нужно завернуть все запросы клиента (в том числе Интернет трафик) на ваш OpenVPN сервер, добавьте опцию:
push "redirect-gateway def1"
Настройка OpenVPN клиента в Windows
Создайте на сервере шаблонный конфигурационный файла для клиента VPN (на базе iшаблона client.ovpn) со следующими параметрами (имя файла kbuldovov.ovpn)
client dev tun proto udp remote your_vpn_server_address 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert kbuldogov.crt key kbuldogov.key remote-cert-tls server tls-auth ta.key 1 cipher AES-256-GCM connect-retry-max 25 verb 3
В директиве remote указывается публичный IP адрес или DNS имя вашего сервера OpenVPN.
Скачайте и установите клиент OpenVPN Connect для Windows (https://openvpn.net/downloads/openvpn-connect-v3-windows.msi).
Теперь на компьютер с клиентом OpenVPN нужно с сервера скопировать файлы:
- ca.crt
- kbuldogov.crt
- kbuldogov.key
- dh.pem
- ta.key
- kbuldogov.ovpn
Теперь импортируйте файл с профилем *.ovpn и попробуйте подключиться к вашему VPN серверу.
Если все настроено правильно, появится такая картинка.
Проверьте теперь лог OpenVPN на клиенте «C:Program FilesOpenVPN Connectagent.log»
Mon Dec 27 08:09:30 2021 proxy_auto_config_url Mon Dec 27 08:09:31 2021 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.6 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
Клиент успешно подключится к OpenVPN серверу и получил IP адрес 10.24.1.6.
Проверьте теперь лог на сервере («C:Program FilesOpenVPNlogopenvpn.log»). Здесь также видно, что клиент с сертификатом kbuldogov успешно подключится к вашему серверу.
2021-12-27 08:09:35 192.168.13.202:55648 [kbuldogov] Peer Connection Initiated with [AF_INET6]::ffff:192.168.13.202:55648 2021-12-27 08:09:35 kbuldogov/192.168.13.202:55648 MULTI_sva: pool returned IPv4=10.24.1.6, IPv6=(Not enabled) 2021-12-27 08:09:35 kbuldogov/192.168.13.202:55648 MULTI: Learn: 10.24.1.6 -> kbuldogov/192.168.13.202:55648 2021-12-27 08:09:35 kbuldogov/192.168.13.202:55648 MULTI: primary virtual IP for kbuldogov/192.168.13.202:55648: 10.24.1.6
Обновлено: 04.01.2023
Опубликовано: 25.01.2017
OpenVPN позволяет настроить VPN-сервер как на платформе Windows Server, так и версии для рабочего компьютера (Windows 10, 8, 7).
Установка сервера
Создание сертификатов
Настройка OpenVPN
Настройка клиента
Доступ к локальной сети
Решение проблем
Установка OpenVPN Server
Переходим на официальный сайт OpenVPN и скачиваем последнюю версию программы для соответствующей версии Windows:
Запускаем скачанный файл — нажимаем Next — I Agree — и выставляем галочку EasyRSA 2/3 Certificate Management Scripts (нужен для возможности сгенерировать сертификаты):
* интерфейсы для старой версии OpenVPN и новой немного различаются. Нам нужно выбрать для установки все пункты.
… снова Next и Install — начнется установка. В процессе мастер может выдать запрос на подтверждение установки виртуального сетевого адаптера — соглашаемся (Install/Установить).
После завершения нажимаем Next — снимаем галочку Show Readme — Finish.
Создание сертификатов
Новая версия OpenVPN позволяет создавать сертификаты на основе Easy RSA 3, старая работает на базе 2-й версии. Наши действия будут различаться в зависимости от данной версии. Рассмотрим процесс формирования сертификата с использованием как RSA3, так и RSA2.
а) Создание сертификатов с RSA 3
1. Переходим в папку установки OpenVPN (по умолчанию, C:Program FilesOpenVPN) и создаем каталог ssl.
2. После переходим в папку C:Program FilesOpenVPNeasy-rsa, переименовываем файл vars.example в vars, открываем его на редактирование и правим одну строку:
set_var EASYRSA_TEMP_DIR «$EASYRSA_PKI/temp»
* мы снимаем комментарий и добавляем temp в конце $EASYRSA_PKI. Если это не сделать, то при попытке сформировать корневого сертификата мы получим ошибку Failed create CA private key.
3. Запускаем командную строку от имени администратора:
4. Переходим в каталог easy-rsa:
cd %ProgramFiles%OpenVPNeasy-rsa
5. Запускаем команду:
EasyRSA-Start.bat
Мы окажемся в среде EasyRSA Shell.
6. Инициализируем PKI:
./easyrsa init-pki
Если система вернет ошибку, выходим из оболочки EasyRSA Shell:
exit
И заходим снова:
EasyRSA-Start.bat
Мы должны увидеть:
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: C:/Program Files/OpenVPN/easy-rsa/pki
7. Генерируем корневой сертификат (CA):
./easyrsa build-ca
… после ввода Enter обязательно задаем пароль дважды. На запрос ввести Common Name можно просто нажать ввод или написать свое имя:
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:
8. Создаем ключ Диффи-Хеллмана:
./easyrsa gen-dh
9. Для создания сертификата сервера необходимо сначала создать файл запроса:
./easyrsa gen-req cert nopass
* на запрос ввода Common Name просто вводим Enter.
… и на его основе — сам сертификат:
./easyrsa sign-req server cert
После ввода команды подтверждаем правильность данных, введя yes:
Confirm request details: yes
… и вводим пароль, который указывали при создании корневого сертификата.
10. Сертификаты сервера готовы и находятся в каталоге pki. Переносим в C:Program FilesOpenVPNssl следующие файлы:
- ca.crt
- issued/cert.crt
- private/cert.key
- dh.pem
б) Создание сертификатов с RSA 2 (для старых версий OpenVPN)
1. Переходим в папку установки OpenVPN (по умолчанию, C:Program FilesOpenVPN) и создаем каталог ssl.
2. После переходим в папку C:Program FilesOpenVPNeasy-rsa, создаем файл vars.bat, открываем его на редактирование и приводим к следующему виду:
set «PATH=%PATH%;%ProgramFiles%OpenVPNbin»
set HOME=%ProgramFiles%OpenVPNeasy-rsa
set KEY_CONFIG=openssl-1.0.0.cnf
set KEY_DIR=keys
set KEY_SIZE=2048
set KEY_COUNTRY=RU
set KEY_PROVINCE=Sankt-Petersburg
set KEY_CITY=Sankt-Petersburg
set KEY_ORG=Organization
set KEY_EMAIL=master@dmosk.ru
set KEY_CN=DMOSK
set KEY_OU=DMOSK
set KEY_NAME=server.domain.ru
set PKCS11_MODULE_PATH=DMOSK
set PKCS11_PIN=12345678
* в каталоге easy-rsa уже есть файл vars.bat.sample — можно переименовать и использовать его.
** значение HOME не меняем, если оставили путь установки программы по умолчанию; KEY_DIR — каталог, куда будут генерироваться сертификаты; KEY_CONFIG может быть разным — его лучше посмотреть в файле vars.bat.sample или по названию соответствующего файла в папке easy-rsa; KEY_NAME желательно, чтобы соответствовал полному имени VPN-сервера; остальные опции можно заполнить произвольно.
3. Запускаем командную строку от имени администратора:
4. Переходим в каталог easy-rsa:
cd %ProgramFiles%OpenVPNeasy-rsa
4. Запускаем vars.bat:
vars.bat
5. Чистим каталоги от устаревшей информации:
clean-all.bat
* данная команда выполняется один раз, когда на сервере нет информации по ранее созданным сертификатам.
6. Снова запускаем vars.bat (после clean переопределяются некоторые переменные):
vars.bat
Переходим к созданию ключей.
7. Генерируем последовательность центра сертификации:
build-ca.bat
На все запросы нажимаем Enter.
8. Запускаем build-dh.bat (сертификат с использованием алгоритма Диффи-Хеллмана):
openssl dhparam -out keysdh.pem 2048
* команда может выполняться долго — это нормально.
9. Генерируем сертификат для сервера:
build-key-server.bat cert
* где cert — имя сертификата; на все запросы нажимаем Enter. В конце подтверждаем два раза корректность информации вводом y.
10. После переносим из папки C:Program FilesOpenVPNeasy-rsakeys в C:Program FilesOpenVPNssl следующие файлы:
- ca.crt
- cert.crt
- cert.key
- dh.pem
Настройка сервера
Переходим в папку C:Program FilesOpenVPNconfig-auto (или для старой версии C:Program FilesOpenVPNconfig) и создаем файл server.ovpn. Открываем его на редактирование и приводим к следующему виду:
port 443
proto udp
dev tun
dev-node «VPN Server»
dh «C:\Program Files\OpenVPN\ssl\dh.pem»
ca «C:\Program Files\OpenVPN\ssl\ca.crt»
cert «C:\Program Files\OpenVPN\ssl\cert.crt»
key «C:\Program Files\OpenVPN\ssl\cert.key»
server 172.16.10.0 255.255.255.0
max-clients 32
keepalive 10 120
client-to-client
compress
fast-io
cipher AES-256-GCM
persist-key
persist-tun
status «C:\Program Files\OpenVPN\log\status.log»
log «C:\Program Files\OpenVPN\log\openvpn.log»
verb 4
mute 20
* где port — сетевой порт (443 позволит избежать проблем при использовании Интернета в общественных местах, но может быть любым из свободных, например 1194, занятые порты в Windows можно посмотреть командой netstat -a); dev-node — название сетевого интерфейса; server — подсеть, в которой будут работать как сам сервер, так и подключенные к нему клиенты.
** так как в некоторых путях есть пробелы, параметр заносится в кавычках.
*** при использовании другого порта необходимо проверить, что он открыт в брандмауэре или на время тестирования отключить его.
В сетевых подключениях Windows открываем управление адаптерами — TAP-адаптер переименовываем в «VPN Server» (как у нас указано в конфигурационном файле, разделе dev-node):
Теперь открываем службы Windows и находим «OpenVpnService». Открываем ее, настраиваем на автозапуск и включаем:
Если служба в запущенном состоянии, то перезапускаем ее.
Ранее переименованный сетевой интерфейс должен включиться:
VPN-сервер работает. Проверьте, что сетевой адаптер VPN Server получил IP 172.16.10.1. Если он получает что-то, на подобие, 169.254…, выключаем сетевой адаптер — перезапускаем службу OpenVpnService и снова включаем сетевой адаптер.
Если в нашей системе включен брандмауэр, необходимо открыть порт для OpenVPN. Это быстрее всего сделать из командной строки — открываем ее от администратора и вводим:
netsh advfirewall firewall add rule name=»ALLOW OpenVPN» dir=in action=allow protocol=UDP localport=443
* где 443 — наш порт, который мы решили задействовать под OpenVPN; UDP — протокол, который мы настроили в конфигурационном файле сервера.
Настройка клиента
На сервере
На сервере генерируем сертификат для клиента. Для этого сначала чистим файл index.txt в папке C:Program FilesOpenVPNeasy-rsakeys.
Затем запускаем командную строку от имени администратора:
Переходим в каталог easy-rsa:
cd %ProgramFiles%OpenVPNeasy-rsa
Далее наши действия зависят от версии RSA.
а) Создание сертификатов с RSA 3
Запускаем команду:
EasyRSA-Start.bat
Мы окажемся в среде EasyRSA Shell.
Создаем клиентский сертификат:
./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1
Мы должны увидеть запрос на подтверждение намерения выпустить сертификат — вводим yes:
Confirm request details: yes
* в данном примере будет создан сертификат для client1.
После вводим пароль, который указывали при создании корневого сертификата.
Теперь из папки pki копируем файлы:
- issued/client1.crt
- private/client1.key
- ca.crt
- dh.pem
… и переносим их на клиентский компьютер.
б) Создание сертификатов с RSA 2 (для очень старых версий OpenVPN)
Запускаем vars.bat:
vars.bat
И генерируем сертификат первого пользователя:
build-key.bat client1
* на все запросы наживаем Enter, кроме Common Name — в данном поле вводим имя клиента (в нашем случае, просто client1). В конце подтверждаем введенную информацию — y.
** На каждого клиента нужно сгенерировать свой сертификат, в противном случае, им будет присваиваться один и тот же IP-адрес, что будет приводить к конфликту.
Получиться, что-то на подобие:
Country Name (2 letter code) [RU]:
State or Province Name (full name) [Sankt-Petersburg]:
Locality Name (eg, city) [Sankt-Petersburg]:
Organization Name (eg, company) [Organization]:
Organizational Unit Name (eg, section) [DMOSK]:
Common Name (eg, your name or your server’s hostname) [DMOSK]:client1
Name [server.domain.ru]:
Email Address [master@dmosk.ru]:
По умолчанию, для Common Name будет подставляться значение из vars.bat — но с ним сертификат не будет создаваться. Необходимо при создании каждого ключа подставлять значение, равное имени сертификата. Например, как выше — подставлено client1.
Теперь из папки keys копируем файлы:
- client1.crt
- client1.key
- ca.crt
- dh.pem
… и переносим их на клиентский компьютер.
На клиенте
Заходим на официальную страницу загрузки openvpn и скачиваем клиента для Windows:
* по сути, это тот же файл, который скачивался для сервера.
Запускаем скачанный файл и устанавливаем программу, нажимая «Далее».
Переходим в папку C:Program FilesOpenVPNconfig. И копируем в нее сертификаты, которые перенесли с сервера.
Теперь открываем блокнот от имени администратора и вставляем следующие строки:
client
resolv-retry infinite
nobind
remote 192.168.0.15 443
proto udp
dev tun
compress
fast-io
cipher AES-256-GCM
ca ca.crt
cert client1.crt
key client1.key
dh dh.pem
float
keepalive 10 120
persist-key
persist-tun
verb 0
* где 192.168.0.15 443 — IP-адрес OpenVPN-сервера и порт, на котором он принимает запросы. Для боевой среды это будет внешний адрес.
Сохраняем файл с именем config.ovpn в папке C:Program FilesOpenVPNconfig.
Запускаем с рабочего стола программу «OpenVPN GUI» от имени администратора (это важно).
Нажимаем правой кнопкой по появившемуся в трее значку и выбираем «Подключиться»:
Произойдет подключение и значок поменяет цвет с серого/желтого на зеленый.
Доступ к локальной сети
По инструкции выше мы сможем получить доступ только к серверу, на котором установлен OpenVPN. Для получения доступа ко всей внутренней сети, выполним следующие шаги.
1. Настройка реестра
Для включения IP маршрутизации в Windows необходимо в ветке реестра HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters найти параметр IPEnableRouter и задать ему значение 1. Это можно сделать в утилите редактирования реестра (regedit) или командой:
reg add «HKLMSYSTEMCurrentControlSetServicesTcpipParameters» /v IPEnableRouter /t REG_DWORD /d 1 /f
* командную строку необходимо запускать от администратора.
2. Настройка OpenVPN Server
В конфигурационный файл OpenVPN добавим:
push «route 172.16.10.0 255.255.255.0»
push «route 192.168.2.0 255.255.255.0»
* где 172.16.10.0 — VPN сеть; 192.168.2.0 — локальная сеть, в которую необходимо «попасть» пользователям openvpn.
При необходимости использовать DNS внутренней сети также добавим:
push «dhcp-option DNS 192.168.0.15»
push «dhcp-option DNS 192.168.0.16»
push «dhcp-option DOMAIN dmosk.local»
* где 192.168.0.15 и 192.168.0.16 — внутренние DNS-серверы; dmosk.local — домен, который будет добавляться к узлам, обращение к которым идет по неполному имени.
Если нам нужно, чтобы все запросы клиента (в том числе, Интернет) ходили через сервер OpenVPN, добавляем:
push «redirect-gateway def1»
* в таком случае, нам не обязательно добавлять push route, который мы использовали выше.
Перезагружаем службу OpenVpnService.
3. Разрешаем доступ к локальной сети
Заходим в управление сетевыми подключениями (Панель управленияСеть и ИнтернетСетевые подключения). Кликаем правой кнопкой мыши по адаптеру локальной сети — Свойства:
На вкладке Доступ ставим галочку Разрешить другим пользователям сети использовать подключение к Интернету данного компьютера:
… и сохраняем настройки.
Возможные проблемы
Большая часть проблем решается при помощи логов, которые находятся в папке C:Program FilesOpenVPNlog. Уровень детализации лога контролируется параметром verb в конфигурационном файле сервера или клиента.
Также возможны следующие часто возникающие проблемы:
- Проблема: клиент постоянно пытается подключиться к серверу, но соединения не происходит или подключение зависает.
Причина: сервер блокирует подключения по настроенному порту VPN (в нашем примере, 443).
Решение: на сервере необходимо добавить 443 порт в исключения брандмауэра или отключить последний.
- Проблема: при попытке подключиться к серверу выскакивает ошибка «Не удалось подключиться к config».
Причина: ошибка в настройках.
Решение: перепроверьте каждую строчку файла конфигурации. Проверьте наличие всех файлов, на которые ссылаетесь в настройках.
- Проблема: клиенты получают одинаковые IP-адреса.
Причина: подключение выполняется под одним и тем же пользователем.
Решение: сервер выдает одинаковые адреса одинаковым клиентам. Необходимо настроить авторизацию на сервере и выдать каждому клиенту индивидуальные настройки.
- Проблема: соединение происходит, но через несколько минут связь прерывается.
Причина: дублирование IP-адресов.
Решение: данная проблема описана выше (пункт 3).
Возможно, Вы это тоже захотите попробовать
- Настройка OpenVPN-сервера с аутентификацией через LDAP (Active Directory) на Ubuntu Server
- Установка и настройка OpenVPN на Linux CentOS 7
Установим и настроим OpenVPN сервер. На сервере используется операционная система Windows Server 2019.
OpenVPN — бесплатная реализация технологии виртуальной частной сети (VPN) для создания зашифрованных каналов связи между компьютерами типа точка-точка или сервер-клиенты за NAT и Firewall.
Установка OpenVPN Server
Скачиваем дистрибутив для установки OpenVPN:
Прокручиваем вниз, выбираем стабильную версию. Я буду использовать версию 2.4.9.
Для операционной системы Windows доступны два пакета:
- WINDOWS 7/8/8.1/SERVER 2012R2 INSTALLER (NSIS)
- WINDOWS 10/SERVER 2016/SERVER 2019 INSTALLER (NSIS)
Для Windows Server 2019 подходит второй вариант, скачиваю.
Запускаем инсталлятор OpenVPN.
Открывается мастер установки. Next.
Принимаем лицензионное соглашение. I Agree.
Выбираем компоненты. Выделите EasyRSA 2 Certificate Management Scripts. Для сервера OpenVPN GUI можно не устанавливать, если вы планируете запускать OpenVPN в качестве службы. Next.
Выбираем путь установки, я оставляю по умолчанию C:Program FilesOpenVPN. Install.
Начинается процесс установки OpenVPN.
Установка успешно завершена. Next.
Finish.
Установка выполнена в директорию C:Program FilesOpenVPN.
После установки у нас появляется новый сетевой адаптер TAP-Windows Adapter V9.
Адаптер отключён. Если по каким-то причинам нужно добавить несколько таких адаптеров, то загляните в папку C:Program FilesTAP-Windowsbin.
Здесь есть скрипты для установки адаптера, добавления адаптера и удаления всех адаптеров.
Пример установки адаптера. В командной строке под администратором:
cd "C:Program FilesTAP-Windowsbin"
"C:Program FilesTAP-Windowsbintapinstall.exe" install "C:Program FilesTAP-WindowsdriverOemVista.inf" tap0901
В большинстве случаев дополнительно настраивать сетевой адаптер не требуется.
Создание ключей и сертификатов
Запускаем командную строку под администратором и переходим в рабочую директорию C:Program FilesOpenVPNeasy-rsa.
cd C:Program FilesOpenVPNeasy-rsa
В этой папке есть всё необходимое для генерации сертификатов.
Выполняем:
init-config.bat
copy vars.bat.sample vars.bat
Создаётся файл vars.bat с настройками и примером готовых параметров для создания CSR запроса сертификатов. Заполним его. Открываем vars.bat блокнотом.
notepad vars.bat
Открывается vars.bat.
Здесь стоит обратить внимание на пути к рабочим директориям. Например, вы можете указать свой путь к openssl.exe, если установили OpenVPN в другую директорию. Здесь же можно изменить длину ключей шифрования.
Заполняем переменные в нижней части файла, указываем:
- KEY_COUNTRY — страна
- KEY_PROVINCE — область
- KEY_CITY — город
- KEY_ORG — организация
- KEY_EMAIL — e-mail
- KEY_CN — (Common Name) имя сервера
- KEY_NAME — (Name) имя сервера
- KEY_OU — (Organization Unit) отдел
- PKCS11_MODULE_PATH — для токенов двухфакторной аутентификации, нам не требуется, укажу имя сервера
- PKC11_PIN — ПИН для токенов двухфакторной аутентификации, нам не требуется, укажу 1234
Для каждого сертификата нужно будет указывать свои NAME и COMMON NAME, можно их не указывать в vars.bat, потому как при генерации все параметры будут запрашивать.
Обращаем внимание на строку:
set KEY_KONFIG=openssl-1.0.0.cnf
Это имя конфигурационного файла. Находим его в рабочей директории.
Откроем блокнотом.
Внутри есть параметр default_days, в котором можно указать срок действия будущих сертификатов. По умолчанию у меня стоит 3650 дней, это 10 лет. Меня устраивает. Вероятно, кому-то при генерации клиентских сертификатов может понадобиться уменьшить этот срок.
Сохраняем все изменения и возвращаемся к командной строке. Подгружаем утверждённые нами переменные:
vars.bat
Очищаем директорию с ключами:
clean-all.bat
Сертификаты, которые мы будем создавать, появятся в папке C:Program FilesOpenVPNeasy-rsakeys. Сейчас эта папка очистилась, в ней два файла: index.txt и serial.
Генерируем ключ и сертификат центра сертификации:
build-ca.bat
В процессе генерации сертификата нас будут спрашивать все те же параметры, которые мы указали в vars.bat. Если параметр нас устраивает (а он нас устраивает), просто нажимаем ввод и переходим к следующему вопросу. После завершения работы скрипта в папке C:Program FilesOpenVPNeasy-rsakeys появляется два файла:
- ca.crt — сертификат центра сертификации
- ca.key — ключ центра сертификации
Ключ секретный, никому не передавайте, он будет храниться на сервере.
Генерируем ключ Диффи-Хеллмана:
build-dh.bat
В папке C:Program FilesOpenVPNeasy-rsakeys появляется файл:
- dh2048.pem
Генерируем ключ и сертификат сервера, назовём сервер именем «server«:
build-key-server.bat server
В процессе генерации серверного сертификата нас будут спрашивать те же параметры, которые мы указали в vars.bat. Если параметр нас устраивает (а он нас снова устраивает), просто нажимаем ввод и переходим к следующему вопросу. На вопрос Sign the certificate отвечаем y. На вопрос 1 out of 1 certificate requests certified, commit отвечаем y.
После завершения работы скрипта в папке C:Program FilesOpenVPNeasy-rsakeys появляется четыре файла:
- 01.pem — не понадобится
- server.crt — сертификат сервера
- server.csr — запрос сертификата сервера, не понадобится
- server.key — ключ сервера
Ключ секретный, никому не передавайте, он будет храниться на сервере.
Генерируем ключ и сертификат первого клиента. Для каждого клиента нужно указывать своё имя файла, Name и Common Name. Назовём первого клиента именем «client«:
build-key.bat client
В процессе генерации клиентского сертификата нас будут спрашивать те же параметры, которые мы указали в vars.bat. Нас устраивают все параметры кроме NAME и COMMON NAME, на них отвечаем client. Помним, что для другого клиента имя должно быть другим. На вопрос Sign the certificate отвечаем y. На вопрос 1 out of 1 certificate requests certified, commit отвечаем y.
После завершения работы скрипта в папке C:Program FilesOpenVPNeasy-rsakeys появляется четыре файла:
- 02.pem — не понадобится
- client.crt — сертификат первого клиента
- client.csr — запрос сертификата первого клиента, не понадобится
- client.key — ключ первого клиента
Для каждого нового клиента, который будет подключаться к серверу OpenVPN необходимо сгенерировать свой клиентский сертификат. Но это можно сделать позже, пока добьёмся подключения хотя бы одного клиента.
В настройках сервера можно потом включить настройку duplicate-cn, которая позволяет подключаться всем клиентам по одному общему сертификату, но это небезопасно и не рекомендуется. Используйте только в тестовых целях.
# Uncomment this directive if multiple clients
# might connect with the same certificate/key
# files or common names. This is recommended
# only for testing purposes. For production use,
# each client should have its own certificate/key
# pair.
#
# IF YOU HAVE NOT GENERATED INDIVIDUAL
# CERTIFICATE/KEY PAIRS FOR EACH CLIENT,
# EACH HAVING ITS OWN UNIQUE «COMMON NAME»,
# UNCOMMENT THIS LINE OUT.
;duplicate-cn
Я на сервере собираюсь использовать tls-auth для дополнительной проверки целостности, это обеспечит дополнительный уровень безопасности протокола SSL/TLS при создании соединения:
- Сканирование прослушиваемых VPN-сервером портов
- Инициация SSL/TLS-соединения несанкционированной машиной на раннем этапе
- DoS-атаки и флуд на порты OpenVPN
- Переполнение буфера SSL/TLS
При использовании tls-auth на клиенте не понадобится ключ Диффи-Хеллмана, но пусть будет. Генерируем ключ tls-auth:
openvpn --genkey --secret keys/ta.key
В папке C:Program FilesOpenVPNeasy-rsakeys появляется файл:
- ta.key
Минимальный набор сертификатов сгенерирован.
Настройка OpenVPN сервера
Чтобы случайно всё не удалить, создадим папку C:Program FilesOpenVPNssl и скопируем в неё сертификаты. Это будет рабочая папка сервера.
mkdir "C:Program FilesOpenVPNssl"
copy "C:Program FilesOpenVPNeasy-rsakeys" "C:Program FilesOpenVPNssl"
Создадим конфигурационный файл сервера C:Program FilesOpenVPNconfigserver.ovpn:
copy "C:Program FilesOpenVPNsample-configserver.ovpn" "C:Program FilesOpenVPNconfigserver.ovpn"
Открываем блокнотом и редактируем:
notepad "C:Program FilesOpenVPNconfigserver.ovpn"
Лучше изучить конфигурационный файл, я предлагаю свой вариант конфига:
port 1194
proto udp
dev tun
ca "C:\Program Files\OpenVPN\ssl\ca.crt"
cert "C:\Program Files\OpenVPN\ssl\server.crt"
key "C:\Program Files\OpenVPN\ssl\server.key" # This file should be kept secret
dh "C:\Program Files\OpenVPN\ssl\dh2048.pem"
server 10.8.0.0 255.255.255.0
tls-auth "C:\Program Files\OpenVPN\ssl\ta.key" 0 # This file is secret
keepalive 10 120
comp-lzo
persist-key
persist-tun
cipher AES-256-CBC
status "C:\Program Files\OpenVPN\log\status.log"
log "C:\Program Files\OpenVPN\log\openvpn.log"
verb 4
mute 20
Указываем параметры сервера, пути к ключам и сертификатам. Здесь же пути к логам. Для тестирования можно использовать tcp протокол:
proto tcp
Переходим к службам:
services.msc
Находим службу OpenVPNService.
Настраиваем на автоматический запуск при загрузке сервера.
Запускаем службу.
Согласно настройкам сервера в папке C:Program FilesOpenVPNlog должны появиться логи. Это один из инструментов администратора OpenVPN сервера.
Активировался сетевой адаптер TAP-Windows Adapter V9.
Согласно настройкам сервера IP адрес 10.8.0.1.
Проверяем поднялся ли порт tcp 1194:
netstat -tan | find "1194"
Порт должен прослушиваться.
Теперь нужно настроить firewall. Открываем Windows Defender Firewall with Advanced Security.
Переходим в Inbound Rules.
Создаём правило — New Rule…
Тип правила — Port. Next.
Протоколы и порты — UDP 1194. Как в настройках сервера. Next.
Действия — Allow the connection. Next.
Для всех сетей. Next.
Указываем название правила — OpenVPN. Next.
Правило создано, теперь firewall не блокирует входящие UDP соединения на 1194 порту.
Настройка OpenVPN клиента
На компьютере клиента устанавливаем OpenVPN точно также как на сервер. Галку EasyRSA 2 Certificate Management Scripts не указываем. Галку OpenVPN GUI указываем.
Я устанавливаю OpenVPN на клиенте в папку по умолчанию. C:Program FilesOpenVPN.
Копируем в отдельную папку for_client (её содержимое отправим потом на компьютер клиента) на сервере файлы для клиента:
- ca.crt
- client.crt
- client.key
- dh2048.pem
- ta.key
Туда же из папки C:Program FilesOpenVPNsample-config копируем client.ovpn
Переименовываю client.ovpn в config.ovpn. Можно использовать любое имя, лучше созвучное с названием организации. Вот такой получился набор.
Редактируем файл config.ovpn.
client
dev tun
proto udp
remote internet-lab.ru 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca "C:\Program Files\OpenVPN\config\ca.crt"
cert "C:\Program Files\OpenVPN\config\client.crt"
key "C:\Program Files\OpenVPN\config\client.key"
tls-auth "C:\Program Files\OpenVPN\config\ta.key" 1
#dh "C:\Program Files\OpenVPN\config\dh2048.pem"
cipher AES-256-CBC
comp-lzo
verb 0
connect-retry-max 25
Здесь указываем пути к ключам и сертификатам клиента. Не забываем про адрес и порт сервера, куда подключаться, для примера я указал internet-lab.ru UDP 1194.
Отправляем подготовленные файлы на компьютер клиента и копируем в C:Program FilesOpenVPNconfig.
На клиента запускаем OpenVPN GUI.
В трее появляется значок OpenVPN.
Правой кнопкой — подключиться.
Устанавливается соединение.
Значок позеленел, назначен адрес 10.8.0.6.
Можно подключаться к серверу, если есть доступы.
Для второго и последующего клиента генерируем свой набор клиентских сертификатов.
Отзыв сертификата
Иногда нужно отозвать сертификат, выданный клиенту. Кто-то увольняется, кто-то палит сертификаты.
cd "C:Program FilesOpenVPNeasy-rsa"
vars.bat
revoke-full client
Где client — это имя клиента.
В папке C:Program FilesOpenVPNkeys появляется файл:
- crl.pem
Копируем его с заменой в рабочую директорию сервера C:Program FilesOpenVPNssl.
Добавляем строчку в конфигурационный файл сервера:
crl-verify "C:\Program Files\OpenVPN\keys\crl.pem"
Перезапускаем службу OpenVPN сервера.
net stop OpenVPNService
net start OpenVPNService
Если в конфигурационном файле уже был ранее указан путь к crl.pem, то службу можно не перезапускать, OpenVPN перечитывает CRL один раз в час. Но в течении этого часа клиенты с отозванными сертификатами смогут продолжать подключаться и работать.
Для клиента с отозванным сертификатом процесс подключения будет «зависать». В логе можно увидеть:
TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity) TLS Error: TLS handshake failed
Чтобы клиент не стучался постоянно на сервер, у него в конфиге есть опция:
connect-retry-max 25
Передать эту опцию при отзыве сертификата нельзя, поэтому указывайте её всем клиентам заранее.
Ссылки
OpenVPN 2.5.1 сервер на Windows
Автор: Decker
OpenVPN — свободная реализация технологии Виртуальной Частной Сети (VPN) с открытым исходным кодом для создания зашифрованных каналов типа точка-точка или сервер-клиенты между компьютерами. Она позволяет устанавливать соединения между компьютерами, находящимися за NAT-firewall, без необходимости изменения их настроек. OpenVPN была создана Джеймсом Йонаном (James Yonan) и распространяется под лицензией GNU GPL.
В этой статье в простой и доступной форме мы попытаемся рассказать вам о том как поднять собственный OpenVPN сервер. Мы не ставим своей целью, чтобы по окончании прочтения этой статьи вы досконально понимали все принципы «как это работает» или разбирались в тонкостях организации сетей, но хотим, чтобы в результате — вы могли настроить OpenVPN сервер «с нуля». Так что можно считать эту статью неким пошаговым руководством для пользователей. На самом деле в сети масса документации, мануалов, посвященных развертыванию OpenVPN, но они либо ориентированы на подготовленных пользователей или системных администраторов, либо же в качестве примера для демонстрации используются Linux-системы. Мы же пойдем другим путем и расскажем как настроить OpenVPN на компьютере среднестатического пользователя, т.е. рабочей станции с установленной ОС Windows. Зачем вам может пригодиться эта информация? Ну например вы хотите поиграть с друзьями в игру, которая не поддерживает игру через интернет, а только по локальной сети, или же, например, вы занимаетесь удаленной поддержкой пользователей, но по каким-то причинам использовать программное обеспечение вроде TeamViewer или Ammyy Admin не желаете, т.к. не хотите чтобы в процессе передачи ваших данных или установки соединения участвовали сервера сторонних компаний. В любом случае практический опыт организации собственной виртуальной частной сети (VPN) окажется для вас полезным.
Содержание
- Настройка сервера
- Настройка клиента
- Полезные ссылки
- F.A.Q.
- Можно ли раздавать интернет с помощью OpenVPN?
Настройка сервера
Итак, начнем. В нашем примере в качестве сервера OpenVPN будет выступать машина с установленной ОС Windows XP Professional SP3 (x86), в качестве клиентов — несколько машин с Windows 7 x64 и Windows 7 x86 (хотя на самом деле описываемая в статье схема заработает и на других конфигурациях). Предположим, что ПК который будет выступать в роли OpenVPN сервера имеет белый статический IP адрес в сети интернет (в случае если IP адрес, предоставляемый вашим провайдером динамический, то вам необходимо зарегистрироваться в DynDNS или No-IP), если это условие выполняется, но ПК находится за роутером или аппаратным firewall’ом — вам придется пробросить необходимые порты (об этом мы расскажем чуть ниже, когда перейдем непосредственно к настройке сервера), если вы не представляете что это такое и для чего это используется, то мы рекомендуем вам ознакомиться со статьей Port Forwarding. Как настроить и что это такое? на нашем сайте.
- Идем на официальный сайт проекта OpenVPN, в раздел Downloads — http://openvpn.net/index.php/open-source/downloads.html. Скачиваем оттуда, соответствующий вашему релизу ОС Windows дистрибутивай (32-bit или 64-bit Installer). На момент написания этой статье для 32-х битных ОС был доступен дистрибутив openvpn-install-2.3_rc1-I002-i686.exe, а для 64-х битных — openvpn-install-2.3_rc1-I002-x86_64.exe соответственно. Т.к. мы определились, что сервер мы будем поднимать на WinXP x86, т.е. на 32-битной ОС, то скачиваем дистрибутив по первой ссылке.
- Запускаем скачанный инсталлятор. На этапе где выбирается путь для установки вводим C:OpenVPN (см. скриншот), это упростит нам настройку в дальнейшем: После чего нажимаем «Next» до тех пор, пока установка не будет завершена. Если в процессе установки, на этапе выбора компонент для установки у вас было «пустое окно», например, такое: То по всей видимости вы скачали «не тот» дистрибутив, в таком случае попробуйте скачать последнюю релизную версию openvpn-2.2.2-install.exe (она устанавливается как на x86, так и на x64 системы). При «правильной установке» окно выбора компонентов должно выглядеть так: Все галочки в нем при установке по-умолчанию стоят, менять дополнительно ничего не нужно. Если установка прошла успешно, то в Панели управления -> Сетевые подключения (или, если вы устанавливаете сервер на Windows 7 или Windows Vista, в Центр управления сетями и общим доступом -> Изменение параметров адаптера) у вас должен появиться TAP-Win32 Adapter V9, который будет называться «Подключение по локальной сети X» (X — автоматически присваиваемый системой номер): Состояние у него будет «Сетевой кабель не подключен», т.к. мы еще не конфигурировали наш сервер.
- Создаем в папке OpenVPN подпапку SSL, в ней будут храниться выданные сервером ключи и сертификаты. Далее запускаем блокнот и копируем в него следующий текст:
#dev tun dev tap #dev-node "VPN" proto tcp-server #proto udp port 7777 tls-server server 10.10.10.0 255.255.255.0 comp-lzo # route-method exe # маршрут для сервера, чтобы видеть сети за клиентом # route 192.168.x.0 255.255.255.0 10.10.10.x # маршрут добавляемый в таблицу маршрутизации каждого клиента, чтобы видеть сеть за сервером # push "route 192.168.x.0 255.255.255.0" # разрешает vpn-клиентам видеть друг-друга, в противном случае все vpn-клиенты будут видеть только сервер client-to-client # каталог с описаниями конфигураций каждого из клиентов client-config-dir C:\OpenVPN\config\ccd # файл с описанием сетей между клиентом и сервером ifconfig-pool-persist C:\OpenVPN\config\ccd\ipp.txt # пути для ключей и сертификатов сервера dh C:\OpenVPN\ssl\dh1024.pem ca C:\OpenVPN\ssl\ca.crt cert C:\OpenVPN\ssl\Server.crt key C:\OpenVPN\ssl\Server.key #persist-key tls-auth C:\OpenVPN\ssl\ta.key 0 tun-mtu 1500 tun-mtu-extra 32 mssfix 1450 keepalive 10 120 status C:\OpenVPN\log\openvpn-status.log log C:\OpenVPN\log\openvpn.log verb 3
На параметрах которые здесь описаны, мы остановимся чуть позже. После чего сохраняем его в файл C:OpenVPNConfigServer.ovpn, обратите внимание файл должен получиться именно с расширением .ovpn, для этого в диалоге сохранения опции должны стоять именно так, как показано на картинке: Если вы работаете под Windows 7 / Windows Vista и блокнот не дает вам сохранить файл Server.ovpn в папку C:OpenVPNConfig, значит его нужно запустить с правами администратора. Для этого щелкните в меню Пуск по ярлыку Блокнота правой кнопкой мыши и выберите «Запуск от имени администратора»: Теперь также с помощью блокнота создадим файл C:OpenVPNeasy-rsavars.bat, скопировав в него нижеследующий текст:
@echo off set path=%path%;c:OpenVPNbin set HOME=c:OpenVPNeasy-rsa set KEY_CONFIG=openssl.cnf set KEY_DIR=c:OpenVPNssl set KEY_SIZE=1024 set KEY_COUNTRY=RU set KEY_PROVINCE=Kaluga set KEY_CITY=Kaluga set KEY_ORG=CompKaluga set [email protected]
А также файл C:OpenVPNeasy-rsaopenssl.cnf:
# # OpenSSL example configuration file. # This is mostly being used for generation of certificate requests. # # This definition stops the following lines choking if HOME isn't # defined. HOME = . RANDFILE = $ENV::HOME/.rnd # Extra OBJECT IDENTIFIER info: #oid_file = $ENV::HOME/.oid oid_section = new_oids # To use this configuration file with the "-extfile" option of the # "openssl x509" utility, name here the section containing the # X.509v3 extensions to use: # extensions = # (Alternatively, use a configuration file that has only # X.509v3 extensions in its main [= default] section.) [ new_oids ] # We can add new OIDs in here for use by 'ca' and 'req'. # Add a simple OID like this: # testoid1=1.2.3.4 # Or use config file substitution like this: # testoid2=${testoid1}.5.6 #################################################################### [ ca ] default_ca = CA_default # The default ca section #################################################################### [ CA_default ] dir = $ENV::KEY_DIR # Where everything is kept certs = $dir # Where the issued certs are kept crl_dir = $dir # Where the issued crl are kept database = $dir/index.txt # database index file. new_certs_dir = $dir # default place for new certs. certificate = $dir/ca.crt # The CA certificate serial = $dir/serial # The current serial number crl = $dir/crl.pem # The current CRL private_key = $dir/ca.key # The private key RANDFILE = $dir/.rand # private random number file x509_extensions = usr_cert # The extentions to add to the cert # Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs # so this is commented out by default to leave a V1 CRL. # crl_extensions = crl_ext default_days = 3650 # how long to certify for default_crl_days= 30 # how long before next CRL default_md = md5 # which md to use. preserve = no # keep passed DN ordering # A few difference way of specifying how similar the request should look # For type CA, the listed attributes must be the same, and the optional # and supplied fields are just that :-) policy = policy_match # For the CA policy [ policy_match ] countryName = match stateOrProvinceName = match organizationName = match organizationalUnitName = optional commonName = supplied emailAddress = optional # For the 'anything' policy # At this point in time, you must list all acceptable 'object' # types. [ policy_anything ] countryName = optional stateOrProvinceName = optional localityName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional #################################################################### [ req ] default_bits = $ENV::KEY_SIZE default_keyfile = privkey.pem distinguished_name = req_distinguished_name attributes = req_attributes x509_extensions = v3_ca # The extentions to add to the self signed cert # Passwords for private keys if not present they will be prompted for # input_password = secret # output_password = secret # This sets a mask for permitted string types. There are several options. # default: PrintableString, T61String, BMPString. # pkix : PrintableString, BMPString. # utf8only: only UTF8Strings. # nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings). # MASK:XXXX a literal mask value. # WARNING: current versions of Netscape crash on BMPStrings or UTF8Strings # so use this option with caution! string_mask = nombstr # req_extensions = v3_req # The extensions to add to a certificate request [ req_distinguished_name ] countryName = Country Name (2 letter code) countryName_default = $ENV::KEY_COUNTRY countryName_min = 2 countryName_max = 2 stateOrProvinceName = State or Province Name (full name) stateOrProvinceName_default = $ENV::KEY_PROVINCE localityName = Locality Name (eg, city) localityName_default = $ENV::KEY_CITY 0.organizationName = Organization Name (eg, company) 0.organizationName_default = $ENV::KEY_ORG # we can do this but it is not needed normally :-) #1.organizationName = Second Organization Name (eg, company) #1.organizationName_default = World Wide Web Pty Ltd organizationalUnitName = Organizational Unit Name (eg, section) #organizationalUnitName_default = commonName = Common Name (eg, your name or your server's hostname) commonName_max = 64 emailAddress = Email Address emailAddress_default = $ENV::KEY_EMAIL emailAddress_max = 40 # SET-ex3 = SET extension number 3 [ req_attributes ] challengePassword = A challenge password challengePassword_min = 4 challengePassword_max = 20 unstructuredName = An optional company name [ usr_cert ] # These extensions are added when 'ca' signs a request. # This goes against PKIX guidelines but some CAs do it and some software # requires this to avoid interpreting an end user certificate as a CA. basicConstraints=CA:FALSE # Here are some examples of the usage of nsCertType. If it is omitted # the certificate can be used for anything *except* object signing. # This is OK for an SSL server. # nsCertType = server # For an object signing certificate this would be used. # nsCertType = objsign # For normal client use this is typical # nsCertType = client, email # and for everything including object signing: # nsCertType = client, email, objsign # This is typical in keyUsage for a client certificate. # keyUsage = nonRepudiation, digitalSignature, keyEncipherment # This will be displayed in Netscape's comment listbox. nsComment = "OpenSSL Generated Certificate" # PKIX recommendations harmless if included in all certificates. subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer:always # This stuff is for subjectAltName and issuerAltname. # Import the email address. # subjectAltName=email:copy # Copy subject details # issuerAltName=issuer:copy #nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem #nsBaseUrl #nsRevocationUrl #nsRenewalUrl #nsCaPolicyUrl #nsSslServerName [ server ] # JY ADDED -- Make a cert with nsCertType set to "server" basicConstraints=CA:FALSE nsCertType = server nsComment = "OpenSSL Generated Server Certificate" subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer:always [ v3_req ] # Extensions to add to a certificate request basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment [ v3_ca ] # Extensions for a typical CA # PKIX recommendation. subjectKeyIdentifier=hash authorityKeyIdentifier=keyid:always,issuer:always # This is what PKIX recommends but some broken software chokes on critical # extensions. #basicConstraints = critical,CA:true # So we do this instead. basicConstraints = CA:true # Key usage: this is typical for a CA certificate. However since it will # prevent it being used as an test self-signed certificate it is best # left out by default. # keyUsage = cRLSign, keyCertSign # Some might want this also # nsCertType = sslCA, emailCA # Include email address in subject alt name: another PKIX recommendation # subjectAltName=email:copy # Copy issuer details # issuerAltName=issuer:copy # DER hex encoding of an extension: beware experts only! # obj=DER:02:03 # Where 'obj' is a standard or added object # You can even override a supported extension: # basicConstraints= critical, DER:30:03:01:01:FF [ crl_ext ] # CRL extensions. # Only issuerAltName and authorityKeyIdentifier make any sense in a CRL. # issuerAltName=issuer:copy authorityKeyIdentifier=keyid:always,issuer:always
Поздравляю! Вы только что создали основные конфигурационные файлы вашего сервера. Продолжим его настройку.
- Для дальнейшей настройки сервера нам будут необходимы некоторые навыки работы в командной строке. Прежде всего давайте разберемся, как ее запустить? Существует несколько способов, например, нажать Пуск -> Выполнить (или комбинацию кнопок Win+R) на клавиатуре и в появившемся поле ввести cmd и нажать кнопку Ок. Однако, пользователям Windows 7 / Windows Vista понадобится запустить консоль с правами администратора, для этого проще всего на рабочем столе создать соответствующий ярлык. Щелкаем правой кнопкой мыши по любому пустому месту рабочего стола и выбираем пункт «Создать ярлык», в поле «месторасположение объекта» просто указываем три буквы — cmd и называем ярлык cmd, либо командная строка. Далее, пользователи Windows XP просто запускают его, а пользователи Windows Vista и Windows 7 запускают его от имени администратора, так, как это делалось выше с блокнотом.
- Далее последовательно вводим в консоли строки:
cd C:OpenVPNeasy-rsa vars clean-all
При этом на экране это должно выглядеть так: Далее не закрывая это окно вводим последовательно команды генерации ключей:
openvpn --genkey --secret %KEY_DIR%ta.key build-dh build-ca
Последняя команда (build-ca) создаст сертификат и ключ центра сертификации (CA), в процессе, правда, она задаст вам несколько вопросов, ответить на которые надо по-умолчанию нажатием кнопки Enter: Теперь создадим ключ сервера:
build-key-server server
Обратите внимание, вторым аргументом в команде идет имя ключа (server), это же имя вы должны ввести при ответе на вопрос Common Name (eg, your name or your server’s hostname), на остальные вопросы можно ответить по-умолчанию нажатием кнопки Enter. Если вы все сделали правильно команда предложит подписать сертификат и подтвердить запрос, на оба вопроса нужно ответить Y (см. скриншот): Если вы все сделали правильно, то картинка у вас будет идентичной скриншоту, а в последних строчках вывода команды будет сообщение об успешном добавлении одной записи в базу данных.
- После этого идем в оснастку «Службы и приложения» консоли управления, сделать это можно щелкнув по ярлыку Компьютер (Мой компьютер) правой кнопкой мыши и выбрав пункт меню Управление, либо набрав в консоли команду services.msc, находим там службу «OpenVPN Service» и в меню по правой кнопки мыши выбираем «Пуск». Если до этого вы все сделали правильно, то служба перейдет в состояние «Работает». Теперь можно изменить ей тип запуска на «Авто», вместо «Вручную», который был там по-умолчанию. В результате должно получиться так: На этом настройка самого сервера закончена, осталось только сконфигурировать клиентов. Для этого необходимо также выдать им ключи и сертификаты, делается это практически аналогично серверу, только для сервера мы использовали команду build-key-server, а для клиентов будем использовать команду build-key.
- Предположим что у нас два клиента, назовем их client1 и client2. Выполним последовательно команды:
build-key client1 build-key client2
При этом на вопрос Common Name (eg, your name or your server’s hostname) вы также должны указать имя клиента используемое в команде, т.е. если вы вводили команду build-key client1, то на вопрос Common Name отвечаем client1, если client2, то client2. На остальные вопросы можно ответить нажатием Enter, в конце вас также попросят подписать сертификат и подтвердить запрос, на оба пункта отвечаем утвердительно — Y. Теперь перезапускаем службу OpenVPN для того чтобы изменения вступили в силу, в оснастке управления службами, в меню по правой кнопке мыши «Перезапуск», либо же в консоли последовательно вводим:
net stop openvpnservice net start openvpnservice
- Теперь если мы зайдем в папку, то увидим там сгенерированные нами файлы ключей и сертификатов: Каждому клиенту необходимы будут его файлы:
ca.crt <clientname>.crt <clientname>.key ta.key
Т.е. для клиента 1 мы собираем файлы ca.crt, client1.crt, client1.key и ta.key, для клиента 2 — ca.crt, client2.crt, client2.key и ta.key соответственно и т.п. И тем или иным образом отправляем ему их (имеется ввиду по почте, в архиве с паролем, или на флешке), файлы ключей и сертификатов должны быть переданы по надежным каналам связи и не должны попасть в «третьи руки», т.к. фактически с помощью них клиент может получить доступ в вашу виртуальную подсеть. В следующем разделе мы рассмотрим настройку клиента, при этом будет предполагаться что файлы ключей и сертификатов от вас он уже получил.
- Если на ПК используемом в качестве сервера используется firewall / брандмауэр, то необходимо добавить OpenVPN в список исключений. Для встроенного брандмауэра Windows в консоли это можно сделать следующей командой:
netsh firewall add allowedprogram program = C:OpenVPNbinopenvpn.exe name = "OpenVPN Server" ENABLE scope = ALL profile = ALL
Настройка клиентов
Настройка клиента значительно проще, чем настройка сервера, у клиента нам не нужно генерировать ключи, сертификаты и т.п., так как все необходимое уже было сгенерировано нами на сервере и передано клиенту. Поэтому инструкция в случае для клиента получается значительно короче.
- Ориентируясь на инструкцию по настройке сервера скачиваем дистрибутив OpenVPN с официального сайта, устанавливаем его и создаем в папке C:OpenVPN подпапку SSL.
- Помещаем в нее файлы ca.crt, client1.crt, client1.key и ta.key, переданные нам владельцем сервера.
- Запускаем блокнот и создаем файл Client1.ovpn следующего содержания:
# decker OpenVPN Config File (c) Decker, [email protected] dev tap # dev-node "OpenVPN" proto tcp remote x.x.x.x 7777 route-delay 3 client tls-client ns-cert-type server ca C:\OpenVPN\ssl\ca.crt cert C:\OpenVPN\ssl\client1.crt key C:\OpenVPN\ssl\client1.key tls-auth C:\OpenVPN\ssl\ta.key 1 comp-lzo tun-mtu 1500 tun-mtu-extra 32 mssfix 1450 ping-restart 60 ping 10 status C:\OpenVPN\log\openvpn-status.log log C:\OpenVPN\log\openvpn.log verb 3
Обратите внимание, здесь client1.crt и client1.key — это названия файлов полученные вами от владельца сервера. x.x.x.x — это IP адрес или доменное имя OpenVPN сервера, 7777 — номер порта сервера.
- Заходим в оснастку «Службы и приложения», так, как это описано в разделе настроек сервера и запускаем службу OpenVPN, если она успешно запустилась, то выставляем ей тип запуска в «Авто».
- Одновременно обращаем внимание на свойства нашего OpenVPN адаптера, если вы все настроили правильно, то через несколько секунд после запуска службы OpenVPN адаптер получит сетевой адрес от сервера:
Полезные ссылки
- Официальная документация по OpenVPN — http://openvpn.net/index.php/open-source/documentation.html
- OpenVPN man-pages — http://openvpn.net/index.php/open-source/documentation/manuals.html
- OpenVPN HOWTO (на русском) — http://lithium.opennet.ru/articles/openvpn/openvpn-howto.html
F.A.Q.
Вы можете присылать возникшие у вас вопросы на email указанный в разделе контактов, либо обсудить эту статью на нашем форуме.
А можно ли таким способом раздавать интернет?
Наверное большинство из вас хочет спросить «А можно ли посредством OpenVPN раздавать интернет, например, через локальную сеть провайдера?» и ответ скорее всего порадует вас. Можно! Рассмотрим пример. Допустим провайдер выдает всем «серые» адреса в своей локальной сети, а подключение к интернет идет через VPN или PPPoE, при этом пользователи локальной сети провайдера «видят» друг-друга в ней и могут свободно обмениваться файлами и т.п. напрямую через локальную сеть провайдера без подключения к интернет. Рассмотрим пример, как можно «поделиться» своим интернетом с друзьями (обращаем ваше внимание на то, что у большинства провайдеров перепродажа, равно как и другие способы передачи траффика интернет третьим лицам запрещены условиями договора, поэтому прежде чем настраивать подобную схему — убедитесь в ее легитимности в вашем случае). Допустим у пользователя у которого установлен OpenVPN сервер подключение к интернет и локальной сети провайдера осуществляется через роутер (!) IP адрес которого 172.31.1.1, также роутер выдает адреса для ПК подключенных к нему из диапазона 172.31.1.0/24. Таким образом для ПК с OpenVPN сервером получаем два интерфейса, один из них WAN (интерфейс подключенный к роутеру, на котором доступна локальная сеть провайдера и интернет), а другой — VPN, т.е. интерфейс OpenVPN сервера. Намомним, что в этом случае для корректной работы OpenVPN сервера (если вы настраивали все согласно приведенной выше инструкции) на роутере необходимо пробросить порт TCP 7777 из локальной сети провайдера (именно по этому IP к вам будут подключаться удаленные клиенты) на машину с OpenVPN-сервером.
- Переименуем интерфейс подключенный к роутеру в WAN, а интерфейс OpenVPN сервера в VPN:
- В конфигах OpenVPN сервера, в файле C:OpenVPNconfigServer.ovpn добавим строки:
dev-node "VPN" # имя интерфейса openvpn в системе push "route 0.0.0.0 0.0.0.0" # правило маршрутизации для КАЖДОГО клиента, основным шлюзом будет наш openvpn-сервер push "dhcp-option DNS 8.8.8.8" # DNS-сервера выдающиеся КАЖДОМУ клиенту push "dhcp-option DNS 8.8.4.4"
- В свойствах интерфейса WAN на закладке «Дополнительно», включим общий доступ для подключения к интернет: Внимание! После того как вы сделаете это система автоматически пропишет в свойства адаптера VPN в свойства протокола TCP/IP IP адрес 192.168.0.1 и маску подсети 255.255.255.0 (!) Это неверно! Необходимо зайти в свойства протокола TCP/IP адаптера OpenVPN и выбрать там значение «Получить IP адрес автоматически», либо, если подсеть у вас такая же, как и в приведенных в инструкции по настройке сервера конфигах (10.10.10.0/255.255.255.0) прописать там IP адрес — 10.10.10.1 и маску подсети 255.255.255.0. Галочку общего доступа на подключении WAN больше не трогать (в тот момент когда мы ее установили, мы включили маршрутизацию пакетов в системе, что вообщем-то эквивалентно установке ключа реестра HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters IPEnableRouter в значение 1), именно благодаря этому будет возможен общий доступ к интернет через VPN-соединение.
- После этого обязательно отключаем брэндмауэр Windows на интерфейсе VPN, т.е. снимаем соответствующую галочку в настройках бранлмауэра:
- После чего перезапускаем службу OpenVPN и удаленный клиент может попытаться подключиться к нам. Если все настроено верно, то в свойствах интерфейса OpenVPN на клиенте мы увидим следующее: Т.е. клиент в нашей виртуальной частной сети получил IP адрес 10.10.10.2, основным шлюзом для него является OpenVPN сервер — 10.10.10.1, и DNS серверы именно те, которые мы задавали. Если посмотреть трассировку маршрута до нашего сайта c клиента, то мы увидим что траффик идет именно через наш OpenVPN сервер: Чего собственно и требовалось добиться. Кстати, решение с OpenVPN универсальное, в отличие от обычного PPTP VPN. Многие провайдеры блокируют протокол GRE, используемый в PPTP VPN. OpenVPN сервер же работает только используя TCP или UDP протокол, причем номер порта вы определяете сами, получая таким образом крайне неприхотливый к «агрессивной среде провайдера» туннель
От автора
Данную статью разрешается размещать на любых ресурсах, копировать полностью или частично, без ограничений, при условии сохранения ссылки на оригинал. Ссылка должна содержать название нашего ресурса Скорая Компьютерная Помощь г. Калуга оформленное в виде ссылки, а также содержать псевдоним автора статьи. Примером оформления подобной ссылки может быть:
Настройка OpenVPN сервера © Скорая Компьютерная Помощь г. Калуга // Decker
Примечание
В последнее время к нам на электронную почту приходит большое количество вопросов в стиле «Вопрос по Вашей статье http://compkaluga.ru/articles/172/ на шаге 5 после команды clean-all в результате у Вас копируется какой-то файл. У меня этого не происходит. команда openvpn —genkey —secret %KEY_DIR%ta.key создает мне ключ а вот далее build-dh иbuild-ca не дают результата (cmd.exe пишет, что команда не является внутренней или внешней… или исполняемым файлом) файл ca.key не создается. Что я мог сделать не так?«.
Основной смысл которых сводится к вашей же невнимательности. Проблема при запуске clean-all, build-key и других команд заключается в том, что при установке OpenVPN вы не поставили галочки OpenSSL Utilities и OpenVPN RSA Certificate Management Scripts (их нужно ставить обязательно!). Обратите внимание на скриншот с окном выбора компонентов в начале статьи, там эти галочки стоят!
В этой статье кратко и без лишнего описано, то, как быстро настроить OpenVPN сервер в Windows и сконфигурировать OpenVPN клиента.
Бывает необходимо построить защищенную, шифрованную связь между компьютерами без лишних затрат на оборудование и ПО.
В этом поможет такая бесплатная и известная программа, как OpenVPN — свободная реализация технологии виртуальной частной сети (VPN).
Содержание
- 1 Установка OpenVPN Server на Windows
- 2 Создание сертификатов и ключей OpenVPN
- 3 Создаем конфигурационные файлы для OpenVPN
- 3.1 Конфигурационный файл сервера OpenVPN
- 3.2 Конфигурация клиента OpenVPN
- 3.3 Ошибка «WARNING: can’t open config file: /etc/ssl/openssl.cnf «
- 4 Описание команд и параметров OpenVPN
- 4.1 Опции в режиме сервера
- 4.2 Команды и параметры при работе с сертификатами x509 и параметрами шифрования
- 4.3 Команды для управления маршрутизацией
- 4.4 Команды для управления туннелем
- 4.5 Методы аутентификации
- 4.6 Работа с прокси
- 4.7 Скриптинг
- 4.8 Команды отладки и поиска неисправностей
- 4.9 Чем отличаются виртуальные устройства tun и tap?
- 5 Полезные ссылки:
Установка OpenVPN Server на Windows
- Качаем инсталлятор OpenVPN: openvpn.net/index.php/open-source/downloads
- Устанавливаем: обязательно отметьте все пункты птичками, на предложение установить драйвер отвечаем утвердительно.
Создание сертификатов и ключей OpenVPN
- Запускаем консоль (командную строку) из под администратора
- Переходим в папку куда установили OpenVPN: cd «C:Program FilesOpenVPNeasy-rsa»
- Запускаем: init-config.bat
- В папке «C:Program FilesOpenVPNeasy-rsa» появится файл vars.bat, открываем его в блокноте.
Вот содержимое файла, которое вышло у меня:
@echo off rem Edit this variable to point to rem the openssl.cnf file included rem with easy-rsa. set HOME=%ProgramFiles%OpenVPNeasy-rsa set KEY_CONFIG=openssl-1.0.0.cnf rem Edit this variable to point to rem your soon-to-be-created key rem directory. rem rem WARNING: clean-all will do rem a rm -rf on this directory rem so make sure you define rem it correctly! set KEY_DIR=keys rem Increase this to 2048 if you rem are paranoid. This will slow rem down TLS negotiation performance rem as well as the one-time DH parms rem generation process. set KEY_SIZE=1024 rem These are the default values for fields rem which will be placed in the certificate. rem Change these to reflect your site. rem Don't leave any of these parms blank. set KEY_COUNTRY=UA set KEY_PROVINCE=Kiev set KEY_CITY=Kiev set KEY_ORG=OpenVPN set KEY_EMAIL=elims@pochta.com set KEY_CN=server set KEY_NAME=server set KEY_OU=ouou set PKCS11_MODULE_PATH=changeme set PKCS11_PIN=1234
В следующих строках указал вот такие данные:
set KEY_COUNTRY=UA set KEY_PROVINCE=Kiev set KEY_CITY=Kiev set KEY_ORG=OpenVPN set KEY_EMAIL=elims@pochta.com set KEY_CN=server set KEY_NAME=server set KEY_OU=ouou
Укажите что-либо свое, в строках где есть «server» ничего не меняйте.
В этой же папке открываем файл «openssl-1.0.0.cnf» и ищем строчку default_days 365, ставим 3650: теперь сертификаты будут действительны на протяжении 10 лет.
Снова переходим в командную строку которая запущена от имени администратора и выполняем команды:
- cd «C:Program FilesOpenVPNeasy-rsa»
- vars
- clean-all — в ответ должно написать два раза «Скопировано файлов: 1». Значит, все хорошо
- build-dh — создаст ключ Диффи-Хельмана.
- build-ca — создаст основной сертификат. Будут заданы вопросы, просто нажимаем Enter пока работа команды не завершится.
- build-key-server server — опять таки будут вопросы: жмем Enter, когда увидим два вопроса «Sign the certificate?» и «1 out of 1 certificate requests certified, commit?», жмем Y. Сертификаты для сервера созданы.
- build-key client — создаем сертификат клиента.
- Жмем Enter, но…
- При вопросе Common Name (eg, your name or your server’s hostname) нужно ввести client.
- В конце также два раза Y.
- Для каждого клиента создается новый сертификат, только с другим именем, например, build-key client1 и также указывать его в common name.
- Из папки C:OpenVPNeasy-rsakeys копируем файлы: ca.crt, dh1024.pem, server.crt, server.key в папку C:OpenVPNconfig.
Создаем конфигурационные файлы для OpenVPN
Конфигурационный файл сервера OpenVPN
В папке «C:Program FilesOpenVPNconfig», создаем текстовой документ server.ovpn — это будет конфиг сервера, вставляем в файл текст:
dev tun # Поднимаем L3-туннель proto udp # Протокол port 12345 # Порт который слушает впн # Ключи и сертификаты: ca ca.crt cert server.crt key server.key dh dh1024.pem topology subnet # Грубо говоря экономим адреса server 10.9.0.0 255.255.255.0 # Пул адресов cipher AES-128-CBC # Метод шифрования comp-lzo # Сжатие mssfix # Немного улучшит пинг keepalive 10 120 # Время жизни клиентов, если не откликнулся — отключает verb 3 # Уровень отладки
Пробуем запустить сервер: Кликаем на рабочем столе по ярлыку OpenVPN Gui или запускаем файл «C:Program FilesOpenVPNbinopenvpn-gui.exe».
В панели задач возле к появится серый значок, кликаем по нему дважды, если через 10-20 секунд он загорелся зеленым, значит, все хорошо, если нет, тогда смотрим лог в папке log.
Конфигурация клиента OpenVPN
На компьютере клиента тоже устанавливаем OpenVPN, все галочки можно не отмечать.
Копируем из папки «C:Program FilesOpenVPNeasy-rsa» на компьютере с сервером файлы:
- ca.crt
- client.crt
- client.key
на компьютер с OpenVPN клиентом в папку C:Program FilesOpenVPNconfig. В этой же папке создаем файл client.ovpn, в котором прописываем:
client dev tun proto udp remote АДРЕС_СЕРВЕРА 12345 # Адрес и порт сервера ca ca.crt cert client.crt key client.key cipher AES-128-CBC nobind comp-lzo persist-key persist-tun verb 3
На клиентском компьютере запускаем OpenVPN Gui или client.ovpn.
Если подключились, пробуем проверить связь: в командной строке набираем ping 10.9.0.1. Если пинг проходит, значит все настроено верно.
На OpenVPN сервере можно настроить автоматический запуск OpenVPN службы:
- переходим в Панель Управления — Администрирование — Службы
- Ищем OpenVPN Service и выставляем тип запуска «Автоматически»
Ошибка «WARNING: can’t open config file: /etc/ssl/openssl.cnf «
Если при попытке создать сертификат для OpenVpn вы видите эту ошибку, то скорее всего вы не запустили перед этим действием bat-файл OpenVPNeasy-rsavars.bat.
Описание команд и параметров OpenVPN
Команды без — (двумя знаками дефиса) перед командой должны быть использованы в конфигурационном файле, команды с — в начале используются только из командной строки.
- remote < host > — определяет удаленный конец туннеля. Могут использоваться записи IP и DNS.
- local < host > — определяет локальный ip или имя хоста, на котором будет работать OpenVPN. Актуально, если на локальной машине несколько адресов.
- dev < device > — определяет какой использовать тип устройства tun или tap. Например: dev tun или dev tap. Так же можно явно указывать номер виртуального интрефейса, например tun0.
- port < port number > — указывает на каком порту будет работать OpenVPN (локально и удаленно).
- proto < proto > — какой протокол будет использоваться. Возможные значения: udp, tcp, tcp-client, tcp-server.
- tcp-client — сам пытается установить соединение
- tcp-server — только ждет подключений
- Использование протокола udp VPN будет работать чуть быстрее, чем tcp. Но в плане стабильности работы лучше выбирать tcp (как показывает практика, VPN-соединение более устойчиво)
- remote-random — если указана данная опция и в random перечисленно несколько удаленных хостов, то OpenVPN в случайном порядке будет к ним подключаться. Применяется для балансировки нагрузки.
- float — позволяет удаленному хосту изменять IP во время работы туннеля. Соединение при этом не разрывается.
- ipchange < cmd > — выполняет скрипт или команду указанную в < cmd >, если IP сменился. Пример: ipchange script-ip.sh
- connect-retry < seconds > — пробует переподключиться через указанное время в секундах, если соединение было разорвано.
- connect-retry-max < n > — максимальное количество повторов если соединение было разорвано
- resolv-retry < seconds > — если OpenVPN не удалось узнать имя удаленного хоста по DNS, то через указанное количество секунд попытаться переподключиться.
- lport < port > — указывает на локальный порт для использования OpenVPN
- rport < port > — аналогично для удаленного порта. Пример: rport 8000 — OpenVPN будет пытаться подключится к удаленному порту 8000
- nobind — использовать динамический порт для подключения (только для клиента)
- shaper < bytes > — указывает скорость передачи данных в байтах для исходящего трафика (только для клиента)
- tun-mtu < mtu size > — устанавливает максимальный размер MTU. По умолчанию tun-mtu равен 1500. Использование: tun-mtu 1200
- dev-node < interface name > — устанавливает имя виртуального интерфейса. Например: dev-node openvpn1
- ifconfig — устанавливает локальный IP и маску подсети для туннельного интерфейса. Например: ifconfig 10.3.0.1 255.255.255.0
- server < network > < mask > — автоматически присваивает адреса всем клиентам (DHCP) в указанном диапазоне с маской сети. Данная опция заменяет ifconfig и может работать только с TLS-клиентами в режиме TUN, соответственно использование сертификатов обязательно. Например: server 10.3.0.0 255.255.255.0 . Подключившиеся клиенты получат адреса в диапазоне между 10.3.0.1 и 10.3.0.254.
- server-bridge < gateway > < mask > < pool > — сервер в режиме моста для TAP устройств. Пример: server bridge 10.3.0.1 255.255.255.0 10.3.0.128 10.3.0.254 Клиентам будут выданы адреса в диапазоне 10.3.0.128 — 10.3.0.254, в качестве шлюза будет указан 10.3.0.1.
- mode server — переключает OpenVPN в режим сервера (начиная с 2-й версии)
- mode p2p — данная опция идет по умолчанию.
Опции в режиме сервера
- push < options > — передача клиенту конфигурационных параметров. Пример: push «route 192.168.0.0 255.255.255.0». Аналогично с помощью push клиенту могут передаваться следующие параметры: route, route-gateway, route-delay, redirect-gateway, inactive, ping, ping-exit, ping-restart, persist-key, persist-tun, comp-lzo, dhcp-option, ip-win32. Последние две опции применимы только для Window-клиентов. Например передадим Windows-клиенту адрес DNS-сервера 11.11.11.11: push «dhcp-option DNS 11.11.11.11»
- ifconfig-pool-persist ipp.txt — в файле ipp.txt назначаем клиентам статические IP-адреса. В файле в каждой строке пишем «название_сертификата,айпи_адрес», например: «demyanovich,172.16.25.10»
- comp-lzo — параметр сжатия трафика, идущего через виртуальный туннель. Может принимать значения yes, no, adaptive. Последнее используется по умолчанию.
- comp-lzo yes — принудительно включить сжатие
- comp-lzo no — принудительно отключить сжатие
- comp-lzo adaptive — адаптивный режим.
Команды и параметры при работе с сертификатами x509 и параметрами шифрования
- cipher < alg > — указываем алгоритм шифрования. Например: cipher AES-256-CBC. Рекомендуется использование шифров в режиме CBC (Cipher Block Chaining).
- keysize < n > — размер ключа в битах. Например: keysize 128
- auth < alg > — алгоритм хэширования. Пример: auth SHA1
- df < file > — файл с ключем Диффи-Хелмана
- ca < file > — файл сертификата для CA
- cert < file > — сертификат локальной машины
- key < file > — локальный ключ машины
- tls-server — явно указывает, что данный хост является tls-server
- tls-client — соответственно tls-client
- pkcs12 < file > — указываем файл (PKCS12), который содержит в себе сертификат, ключ и CA в одном файле. Пример: pkcs12 /file
- crl-verify < file > — список отозванных сертификатов, т.е. blacklist.
- no-replay — отключает защиту OpenVPN от атаки повторного воспроизведения (replay attack). Крайне не рекомендуется отключать!
- no-iv — отключает использование вектора инициализации шифра (IV). Крайне не рекомендуется отключать!
- secret < file > — включает режим шифрования и аутентификации на статических ключах. В качестве параметра использует заранее сгенерированный, командой —genkey, файл. Например: secret key.txt
- Все доступные алгоритмы шифрования можно просмотреть выполнив из командной строки: openvpn —show-ciphers
- Алгоритмы хэширования: openvpn —show-digests
- Показать все доступные TLS-шифры (TLS используется только для шифрования канала управления): openvpn —show-tls
- Показать все доступные крипто-устройства в системе (если такие имеются): openvpn —show-engines
Команды для управления маршрутизацией
Обозначение: VPN-хост — удаленная сторона (удаленный хост)
- route < network > — устанавливает указанную маршрутизацию на VPN-хосте, после успешного запуска туннеля. Пример: route 10.0.10.0 255.255.255.252
- route-gateway < IP > — устанавливает шлюз на VPN-хосте. Пример: route-gateway 192.168.0.22. После успешного запуска виртуального туннеля клиенту будет задан шлюз 192.168.0.22
- route-delay < seconds > — указывает подождать n-секунд перед установкой маршрутов. Пример: route-delay 5 — через 5 секунд после установки туннеля будут заданы маршруты.
- route-up < cmd > — выполнить скрипт или программу < cmd > после установки маршрутов. Пример: route-up /script.sh
- redirect-gateway — установить шлюзом по умолчанию удаленный сервер. Т.е. когда удаленный пользователь подключается к нашему серверу, то ему будет задан шлюз по умолчанию на наш сервер.
Команды для управления туннелем
- ping < seconds > — указывает отсылать ping на удаленный конец тунеля после указанных n-секунд, если по туннелю не передавался никакой трафик. Пример:
ping 10 - ping-restart < seconds > — если за указанное время не было получено ни одного пакета с удаленной стороны, то перезапускать туннель. Пример: ping-restart 60 — если в течении 60 секунд не было получено ни одного пакета, то туннель будет перезапущен.
- ping-timer-rem — позволяет перезапускать туннель, только когда указан удаленный адрес.
- persist-tun — данная опция оставляет без изменения устройства tun/tap при перезапуске OpenVPN.
- persist-key — указывает не перечитавать файлы ключей при перезапуске туннеля.
- resolv-retry < seconds > — устанавливает время в секундах для запроса об удаленном имени хоста. Актуально только если используется DNS-имя удаленного хоста. Пример: resolv-retry 86400
- inactive < seconds > — после n-секунд неактивности устройство TUN/TAP автоматически отключется. Пример: inactive 120
- ping-exit < seconds > — если за указанные n-секунд не было получено ни одного пакета, то отключать OpenVPN. Пример: ping-exit 120
- keepalive < seconds > < seconds > — является совмещением сразу двух команд — ping и ping-restart. Использует сразу два параметра в секундах, перечисленных через пробел. Пример: keepalive 10 180 — каждые 10 секунд посылать ping на удаленный хост, и, если за 180 секунд не было получено ни одного пакета — то перезапускать туннель.
- persist-local-ip < IP > — оставлять неизменными локальный IP адрес и номер порт, если туннель был перезапущен.
- persist-remote-ip < IP > — оставлять неизменными удаленный IP адрес и номер порт, если туннель был перезапущен. persist-remote-ip 192.168.50.1
Методы аутентификации
- auth-user-pass-verify < script > < method > — указывается только на серверной стороне.
- < script > — путь к скрипту, который будет производить авторизацию. Скрипт должен возвращать 0 если авторизация успешна, и соответственно, 1 если авторизация не успешна.
- < method > — метод авторизации, может быть двух типов: via-env и via-file
- auth-user-pass < file >- указывается на клиентской стороне. Параметр не обязателен, если он отсутствует то будет предложено ввести пару логин/пароль. должен содержать имя пользователя и пароль в двух строчках: username и password
- client-cert-not-required — отключает авторизацию по сертификатам
Работа с прокси
OpenVPN без проблем может работать через http и socks прокси.
- http-proxy < server port [auth] > — указываем адрес и порт прокси-сервера. http-proxy 192.168.0.12 8080
- Если требуется авторизация на прокси-сервере: http-proxy < server port authfile > — где authfile — файл содержащий две строки (имя пользователя и пароль) или stdin (будет запрошено имя пользователя и пароль). Так же после authfile требуется указать метод авторизации. Можно оставить auto для автоматического выбора метода авторизации или указать явно через auth-method. auth-method может быть трех видов «none», «basic» или «ntlm».
- http-proxy-retry — переподключаться, если соединение было разорвано.
- http-proxy-timeout < seconds > — считать соединение с прокси-сервером разорванным после n-секунд неактивности. Например: http-proxy-timeout 5
- socks-proxy < server port > — указываем сокс-прокси сервер. Пример: socks-proxy 192.168.0.12 8080
- socks-proxy-retry — переподключаться, если соединение было разорвано.
- auto-proxy — автоматически определять прокси-сервер.
Скриптинг
- up < command >- выполнить команду после запуска устройства TUN/TAP. Пример: up script-up.sh
- up-delay < seconds > — подождать n-секунд перед запуском команды указанной в up. Пример: up-delay 5
- down < command > — выполнить команду когда интерфейс TUN/TAP выключится. Пример: down script-down.sh
- down-pre — выполнить команду, указанную в down перед выключением интерфейса TUN/TAP
- up-restart < command > — выполнить команду после каждого реконнекта
- route-up < command > — выполнить команду после установки сетевых маршрутов. Пример: route-up script.sh
- learn-address < command > — выполнить указанную команду, если ip удаленной стороны изменился.
- ipchange < command > — выполнить команду, если ip сервера изменился.
- client-connect < command > — выполнить команду, когда клиент подключился.
- client-disconnect < command > — выполнить команду, когда клиент отключился.
Команды отладки и поиска неисправностей
- verb < verbosity level > — устанавливает уровень информативности отладочных сообщений. Может принимать параметр от 0 до 11. По умолчанию verb равен 1.
При уровне verb 5 и выше в логе будут встречаться подобные записи: RwrW. R (read), W (write) — соответственно чтение и запись. Большая буква обозначает, что пакет был считан (R) или записан (W) на виртуальном устройстве TUN/TAP, а маленькие — считан (r) и записан (w) в туннеле. - mute < number of messages > — если значение установлено в 10, то в лог будет записываться только по 10 сообщений из одной категории.
- log < file > — указываем лог-файл. Если данный параметр не указан, то весь вывод openvpn будет производиться в stdout.
- log-append < file > — дописывать сообщения в лог-файл, а не перезаписывать.
- status < file > — указывает путь к статус-файлу, в котором содержится информация о текущих соединениях и информация о интерфейсах TUN/TAP.
Чем отличаются виртуальные устройства tun и tap?
- TUN — туннель, соединение по которому указывается по типу: локальный IP < — > удаленный IP. Например, при явном указании ifconfig: —ifconfig 10.3.0.2 10.3.0.1. В этом примере 10.3.0.2 — локальный IP, 10.3.0.1 — удаленный IP
- TAP — эмулирует виртуальную ethernet карточку, для которой требуется указывать локальный IP и маску подсети. Например: —ifconfig 10.3.0.2 255.255.255.0
Полезные ссылки:
- geektimes.ru/post/197744 — оригинал этой статьи — «OpenVPN: создание сервера на Windows»
- interface31.ru — схожая статья «Организация каналов между офисами при помощи OpenVPN с дополнительной парольной защитой», с описанием полезных нюансов
- habrahabr.ru/post/273371 — Подробная инструкция по OpenVPN v2.3.8 на Windows server 2008R2
- Установка OpenVPN на Windows VPS
- Установка и настройка OpenVPN на Windows 2008
- habrahabr.ru/company/1cloud/blog/307280 — Немного о VPN: Краткий обзор программных реализаций
Понравилось? =) Поделись с друзьями:
В этой статье я рассмотрю процесс настройки OpenVPN клиента (client) и сервера (server) на примере версии 2.4.7. используемая операционная система — Windows 10, но таким же образом можно настроить OpenVPN на Windows 7.
OpenVPN – механизм реализации виртуальных частных сетей (Virtual Private Network, VPN) с открытым исходным кодом. Используется для создания защищенных (шифрованных) каналов связи между сервером и клиентом, а так же между двумя точками.
OpenVPN позволяет создавать безопасные соединения между компьютерами, которые находятся за пределами фаервола, при этом не требуется изменять настройки фаервола.
Создателем системы является Джеймсом Йонаном (James Yonan).
Что бы создать защищенный канал используется библиотека OpenSSL. Весь набор шифров доступный в библиотеке используется в системе.
Система предлагает пользователю несколько способов аутентификации:
- Аутентификация с помощью предустановленного ключа – наиболее простой метод.
- Серверная аутентификация – более сложный, но при этом более гибкий в настройках метод.
- При помощи ввода логина и пароля. Может использоваться без создания сертификата клиента, при этом сертификат сервера все равно необходим.
Давайте разберемся на примере. Я настрою OpenVPN на двух компьютерах под управлением Windows 10. Они будут находиться в одной локальной сети. Так как для настроек через интернет необходим хотя бы один статический IP-адрес.
На этом примере мы разберемся, как создавать ключи и сертификаты безопасности, а так же научимся настраивать конфигурационный файл VPN-сервера и VPN-клиента.
Установка и настройка OpenVPN
Один компьютер будет играть роль сервера. Второй – клиента. На сервере при установке OpenVPN нужно установить флажок EasyRSA – для генерации сертификатов и ключей.
Переходим на официальный сайт OpenVPN http://openvpn.net/community-downloads/ и скачиваем программу. В моем случае OpenVPN 2.4.7 для Windows 10 (openvpn-install-2.4.7-I607-Win10).
В теории можно скачать и более поздний релиз, но лучше скачивать проверенную версию. Так как я не настраивал последние версии. Если дойдут руки, то дополню статью.
После запуска программы установки включаем EasyRSA (на сервере) и устанавливаем. Программа устанавливается просто и не требует каких-либо специфических настроек при установке.
Затем устанавливаем программу втором компьютере который будет играть роль клиента.
Далее нужно настроить компьютеры, что бы они видели друг друга в сети. Этот процесс зависит от установленной у вас операционной системы. Фактически вам нужно включить сетевое обнаружение.
Создание сертификатов и генерация ключей
Ключи и сертификаты создаются на сервере OpenVPN. Для их создания необходимо выполнить следующие действия:
Запустите командную строку от имени администратора.
С помощью команды cd перейдите в папку C:Program FilesOpenVPNeasy-rsa и выполните команду init-config.bat, после чего в папке easy-rsa появиться файл vars.bat.
Откройте vars.bat с помощью блокнота или иного текстового редактора. Я открыл в Notepad++. Укажите свои данные.
Данные можно указывать в процессе работы с OpenVPN.
Вернитесь в командную строку и по очереди выполните команды vars и clean-all поочередно.
Выполните команду build-dh. Если у вас появиться ошибка «openssl» не является внутренней или внешней командой, исполняемой программой или пакетный файлом, то нужно добавить в переменные среды путь OpenVPNbin.
Для этого нужно в переменную среды Path создать путь C:Program FilesOpenVPNbin.
Затем заново откройте командную строку и выполните пункты 4-5 заново.
Подождите до завершения процесса. В результате в паке OpenVPNeasy-rsakeys появиться файл dh2048.pem.
Создайте новый сертификат Certificate Authority (CA) и ключ, для чего введите команду build-ca. После завершения процесса в папке keys появятся два файла ca.crt и ca.key.
Создайте сертификат и ключ сервера. Для этого введите команду build-key-server к которой нужно добавить [CommonName] (в моем случае abuzov-name), то есть моя команда будет build-key-server abuzov-name. В конце дайте положительный ответ (y) на два вопроса.
Создайте сертификат и ключ для клиента. Введите команду build-key [CommonNameClient], например build-key ClientVPN1.
Создайте ключ для аутентификации пакетов, для этого выполните команду openvpn —genkey —secret keys/ta.key. В результате в папке easy-rsakeys появится файл ta.key
Имя | Где применяется | Назначение | Секретность |
---|---|---|---|
ca.crt | Сервер + все клиенты | Корневой сертификат (Root CA certificate) | Нет |
ta.key | Сервер + все клиенты | Файл аутентификации пакетов | Да |
ca.key | Сервер | Корневой ключ (Root CA key) | Да |
dh2048.pem | Сервер | Файл параметров | Нет |
abuzov-name.csr | Сервер | Сертификат сервера | Нет |
abuzov-name.key | Сервер | Ключ сервера | Да |
ClientVPN1.csr | Только на ClientVPN1 | Сертификат клиента | Нет |
ClientVPN1.key | Только на ClientVPN1 | Ключ клиента | Да |
Теперь нужно скопировать соответствующие ключи на сервер и клиент в папку config (в моем случае это C:Program FilesOpenVPNconfig).
Создание и настройка файлов конфигурации OpenVPN
Конфигурация основывается на файлах типовой конфигурации, которые находятся в C:Program FilesOpenVPNsample-config.
Настройка конфигурации сервера
Копируете файл server.ovpn из папки sample-config в папку config. Открываете и редактируете его. Обратите внимание на двойные слеши.
- Найдите строку, которая начинается на ca и укажите путь к своему ca файлу. В моем случае это ca «C:\Program Files\OpenVPN\config\ca.crt».
- Найдите cert и отредактируйте соответственно, в моем случае это cert «C:\Program Files\OpenVPN\config\abuzov-name.crt».
- По аналогии с key — key «C:\Program Files\OpenVPN\config\abuzov-name.key».
- Аналогично с dh — dh «C:\Program Files\OpenVPN\config\dh2048.pem»
- Аналогично tls-auth — «C:\Program Files\OpenVPN\config\ta.key».
Я приведу полный код конфигурации сервера, на всякий случай, что бы его можно было просто скопировать. Так как знаю что такое первая настройка OpenVPN.
mode server port 1194 dev tap proto tcp-server tls-server tls-auth "C:\Program Files\OpenVPN\config\ta.key" 0 duplicate-cn auth MD5 tun-mtu 1500 tun-mtu-extra 32 mssfix 1450 ca "C:\Program Files\OpenVPN\config\ca.crt" cert "C:\Program Files\OpenVPN\config\abuzov-name.crt" key "C:\Program Files\OpenVPN\config\abuzov-name.key" # This file should be kept secret dh "C:\Program Files\OpenVPN\config\dh2048.pem" server 10.10.10.0 255.255.255.0 client-to-client keepalive 10 120 comp-lzo persist-key persist-tun verb 3 route-delay 10 route-method exe route 10.10.10.0 255.255.255.0 route 192.168.0.0 255.255.0.0 route-gateway 10.10.10.1
Сохраните файл конфигурации сервера.
Запустите OpenVPN от имени администратора (и сразу сделайте так, что бы он всегда запускался от имени администратора).
После этого подключитесь к северу как показано на рисунке.
Настройка конфигурации клиента
Копируете файл client.ovpn из папки sample-config в папку config. Открываете и редактируете его аналогии. В моем случае это:
- ca «C:\Program Files\OpenVPN\config\ca.crt»
- cert «C:\Program Files\OpenVPN\config\ClientVPN1.crt»
- key «C:\Program Files\OpenVPN\config\ClientVPN1.key»
- remote IP_адрес_сервера
Опять, лучше приведу полный код.
remote IP-адрес-вашего-сервера client port 1194 dev tap proto tcp-client tls-client tls-auth "C:\Program Files\OpenVPN\config\ta.key" 1 remote-cert-tls server route-delay 2 auth MD5 tun-mtu 1500 tun-mtu-extra 32 mssfix 1450 ca ca.crt cert ClientVPN.crt key ClientVPN.key pull cipher AES-128-CBC comp-lzo persist-key persist-tun verb 3 route-method exe route-delay 3
Единственное что нужно сделать — указать IP-адрес сервера.
Далее подключаем клиент OpenVPN.
Если клиент не подключается к серверу, тогда нужно на сервере необходимо запустить regedit.exe, затем перейти по адресу: «КомпьютерHKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters» и изменить IPEnableRouter на 1. После чего перезагрузить сервер и подключиться к OpenVPN заново.
После этого можно подключаться по защищенному соединению.