Openvpn windows генерация ключей

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 сервера в windows 10

Начиная с версии OpenVPN 2.5, поддерживается драйвер WinTun от разработчиков WireGuard. Считается, что этот драйвер работает быстрее чем классический OpenVPN драйвер TAP. Установите драйвер Wintun, откажитесь от установки TAP-Windows6.

Установите OpenSSL утилиту EasyRSA Certificate Management Scripts.

WinTun драйвер openvpn

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

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

После окончания установки появится новый сетевой адаптер типа Wintun Userspace Tunnel. Этот адаптер отключен, если служба OpenVPN не запущена.

сетевой адаптер Wintun Userspace Tunnel

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

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

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

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

Создайте копию файла:

copy vars.example vars

Откройте файл vars с помощью любого текстового редактора. Проверьте пути к рабочим директориям.

Обязательно поправьте переменную EASYRSA_TEMP_DIR следующим образом:

set_var EASYRSA_TEMP_DIR "$EASYRSA_PKI/temp"

EASYRSA_TEMP_DIR

Можете заполнить поля для сертификатов (опционально)

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 "

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

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

#set_var EASYRSA_CA_EXPIRE 3650
#set_var EASYRSA_CERT_EXPIRE 825

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

EasyRSA-Start.bat

Следующие команды выполняются в среде EasyRSA Shell:

Инициализация PKI:

./easyrsa init-pki

Должна появится надпись:

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: C:/Program Files/OpenVPN/easy-rsa/pki

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

./easyrsa build-ca

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

CA creation complete and you may now import and sign cert requests.

Данная команда сформировала:

  • Корневой сертификат центра сертификации: «C:\Program Files\OpenVPN\easy-rsa\pki\ca.crt»
  • Ключ центра сертификации «C:\Program Files\OpenVPN\easy-rsa\pki\private\ca.key»

Теперь нужно сгенерировать запрос сертификата и ключ для вашего сервера OpenVPN:

./easyrsa gen-req server nopass

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

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

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

./easyrsa sign-req server server

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

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

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

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

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

Для дополнительной защиты VPN сервера желательно включить tls-auth. Данная технология позволяет использовать подписи HMAC к handshake-пакетам SSL/TLS, инициируя дополнительную проверку целостности. Пакеты без такой подписи будут отбрасываться VPN сервером. Это защитит вас от сканирования порта VPN сервера, DoS атак, переполнения буфера SSL/TLS.

Сгенерируйте ключ tls-auth:

cd C:\Program Files\OpenVPN\bin
openvpn --genkey secret ta.key

Должен появиться файл «C:\Program Files\OpenVPN\bin\ta.key». Переместите его в каталог C:\Program Files\OpenVPN\easy-rsa\pki

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

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

./easyrsa gen-req kbuldogov
./easyrsa sign-req client kbuldogov

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

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

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

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

./easyrsa gen-req имяклиента nopass

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

Вы можете отохвать скомпрометированные сертификаты клиентов:
cd C:\Program Files\OpenVPN\easy-rsa
EasyRSA-Start.bat
./easyrsa revoke kbuldogov

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

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

Скопируйте типовой конфигурационный файл OpenVPN сервера:

copy "C:\Program Files\OpenVPN\sample-config\server.ovpn" "C:\Program Files\OpenVPN\config-auto\server.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

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

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

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

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

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

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

Включить опцию IPEnableRouter в реестре (включает IP маршрутизацию в Windows, в том числе включает маршрутизацию меду сетями Hyper-V): reg add «HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters» /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 connect в windows

Теперь на компьютер с клиентом OpenVPN нужно с сервера скопировать файлы:

  • ca.crt
  • kbuldogov.crt
  • kbuldogov.key
  • dh.pem
  • ta.key
  • kbuldogov.ovpn

Теперь импортируйте файл с профилем *.ovpn и попробуйте подключиться к вашему VPN серверу.

Если все настроено правильно, появится такая картинка.

Проверьте теперь лог OpenVPN на клиенте «C:\Program Files\OpenVPN Connect\agent.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 Files\OpenVPN\log\openvpn.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

OpenVPN - установка и настройка

В этой статье я рассмотрю процесс настройки 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 Files\OpenVPN\easy-rsa и выполните команду init-config.bat, после чего в папке easy-rsa появиться файл vars.bat.

Откройте vars.bat с помощью блокнота или иного текстового редактора. Я открыл в Notepad++. Укажите свои данные.

Данные можно указывать в процессе работы с OpenVPN.

Указание данных в процессе

Вернитесь в командную строку и по очереди выполните команды vars и clean-all поочередно.

Выполните команду build-dh. Если у вас появиться ошибка «openssl» не является внутренней или внешней командой, исполняемой программой или пакетный файлом, то нужно добавить в переменные среды путь OpenVPN\bin.

Изменение системных переменных сред

Для этого нужно в переменную среды Path создать путь C:\Program Files\OpenVPN\bin.

Переменная path

Затем заново откройте командную строку и выполните пункты 4-5 заново.

Подождите до завершения процесса. В результате в паке \OpenVPN\easy-rsa\keys появиться файл 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-rsa\keys появится файл 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 Files\OpenVPN\config).

Создание и настройка файлов конфигурации OpenVPN

Конфигурация основывается на файлах типовой конфигурации, которые находятся в C:\Program Files\OpenVPN\sample-config.

Настройка конфигурации сервера

Копируете файл server.ovpn из папки sample-config в папку config. Открываете и редактируете его. Обратите внимание на двойные слеши.

  1. Найдите строку, которая начинается на ca и укажите путь к своему ca файлу. В моем случае это ca «C:\\Program Files\\OpenVPN\\config\\ca.crt».
  2. Найдите cert и отредактируйте соответственно, в моем случае это cert «C:\\Program Files\\OpenVPN\\config\\abuzov-name.crt».
  3. По аналогии с key — key «C:\\Program Files\\OpenVPN\\config\\abuzov-name.key».
  4. Аналогично с dh — dh «C:\\Program Files\\OpenVPN\\config\\dh2048.pem»
  5. Аналогично 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 от имени администратора (и сразу сделайте так, что бы он всегда запускался от имени администратора).

После этого подключитесь к северу как показано на рисунке.

Подключение к серверу OpenVPN

Настройка конфигурации клиента

Копируете файл client.ovpn из папки sample-config в папку config. Открываете и редактируете его аналогии. В моем случае это:

  1. ca «C:\\Program Files\\OpenVPN\\config\\ca.crt»
  2. cert «C:\\Program Files\\OpenVPN\\config\\ClientVPN1.crt»
  3. key «C:\\Program Files\\OpenVPN\\config\\ClientVPN1.key»
  4. 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_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters» и изменить IPEnableRouter на 1. После чего перезагрузить сервер и подключиться к OpenVPN заново.

После этого можно подключаться по защищенному соединению.

Подключение openvpn

Данная инструкция предназначена для системных администраторов и IT-специалистов, которые планируют развернуть сервер OpenVPN для создания защищенного VPN-соединения. OpenVPN является одним из самых надежных и популярных решений для организации виртуальной частной сети, обеспечивающего высокий уровень безопасности и производительности.

Установка OpenVPN сервера в Windows

Запустите скачанный ранее MSI установщик. Нажмите Customize:

Установка OpenVPN Server на Windiws.

Рисунок 1 – Установка OpenVPN Server на Windiws.

OpenVPN GUI можно не устанавливать. Обязательно установите OpenVPN Services.

Wintun и OpenSSL

Рисунок 2 – Установка Wintun и OpenSSL.

Установите драйвер Wintun и OpenSSL утилиту EasyRSA 3 Certificate Management Scripts. От установки TAP-Windows6 можно отказаться:

Установка OpenVPN Services на Windiws

Рисунок 3 – Установка OpenVPN Services на Windiws.

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

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

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

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

Создайте копию файла vars:

Откройте файл vars в любом текстовом редакторе. Проверьте пути к рабочим директориям. Можете по желанию заполнить поля для сертификатов:

Редактирование файла vars

Рисунок 4 – Редактирование файла vars.

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

#set_var EASYRSA_CA_EXPIRE 3650
#set_var EASYRSA_CERT_EXPIRE 825

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

Следующие команды выполняются в среде EasyRSA Shell. Инициализация 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:

Задайте и повторите пароль для CA, должна появится надпись:

CA creation complete. Your new CA certificate is at:
* C:/Program Files/OpenVPN/easy-rsa/pki/ca.crt

Данная команда сформировала:

  • корневой сертификат центра сертификации: C:\Program Files\OpenVPN\easy-rsa\pki\ca.crt;
  • ключ центра сертификации C:\Program Files\OpenVPN\easy-rsa\pki\private\ca.key

Теперь нужно сгенерировать запрос сертификата и ключ для вашего сервера OpenVPN:

./easyrsa gen-req server nopass

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

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

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

./easyrsa sign-req server server

Подтвердите правильность данных, набрав yes. Затем введите пароль CA от корневого CA. В каталоге issued появится сертификат сервера C:\Program Files\OpenVPN\easy-rsa\pki\issued\server.crt

Теперь можно создать ключи Диффи-Хеллмана:

Далее желательно включить tls-auth.

cd C:\Program Files\OpenVPN\bin
openvpn --genkey secret ta.key

Должен появиться файл C:\Program Files\OpenVPN\bin\ta.key. Переместите его в каталог C:\Program Files\OpenVPN\easy-rsa\pki

Теперь можно сформировать ключи для клиентов OpenVPN.

./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1

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

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

Скопируйте типовой конфигурационный файл OpenVPN сервера:

copy "C:\Program Files\OpenVPN\sample-config\server.ovpn" "C:\Program Files\OpenVPN\config-auto\server.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"
# Указываем настройки сети
server 10.45.139.0 255.255.255.0
# 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

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

Теперь нужно перезапустить службу OpenVPNService. Откройте панель управления, и убедитесь, что виртуальный сетевой адаптер OpenVPN Wintun теперь активен.

Рисунок 5 – Настройка OpenVPN Server и сетевого адаптера.

После успешного выполнения всех шагов инструкции у вас должен быть работающий VPN-сервер, готовый к использованию.

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

Создайте из шаблона client.ovpn клиентский конфигурационный файл со следующим содержимым:

client
dev tun
proto udp
remote адрес вашего сервера 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-GCM
connect-retry-max 25
verb 3

На клиентском ПК скачайте и установите OpenVPN Connect. Скопируйте на клиента следующие файлы:

ca.crt
client1.crt
client1.key
dh.pem
ta.key
client1.ovpn

Запустите OpenVPN Connect, откройте вкладку UPLOAD FILE и перетащите туда файл client1.ovpn, после чего нажмите кнопку CONNECT:

Рисунок 6 – Настройка OpenVPN Connect, шаг 1.

Рисунок 7 – Настройка OpenVPN Connect, шаг 2.

Готово. Если все настроено правильно, то вы подключитесь к своему OpenVPN серверу.

Когда у нас появились сотрудники, работающие удаленно, пришлось думать над тем, как обеспечить им защищенный доступ к нашим хостинговым серверам, виртуальным выделенным серверам разработчиков Virtual Dedicated Server (VDS), сайтам обеспечения и сопровождения разработки и к другим ресурсам.

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

Выход нашелся довольно быстро — это использование технологии виртуальных частных сетей Virtual Private Network (VPN) и ее свободной реализации OpenVPN. Эта реализация доступна практически для всех распространенных платформ, в том числе для планшетов и смартфонов. История развития OpenVPN насчитывает уже 12 лет (компания OpenVPN Technologies, Inc. была создана Francis Dinha и James Yona в 2002 году), так что это надежное и проверенное временем решение.

В нашей компании сеть VPN позволила предоставить защищенный доступ сотрудников к VDS, играющей роль сервера OpenVPN. И уже для фиксированного IP этого сервера был разрешен доступ к другим ресурсам компании. Попутно на сервере OpenVPN был установлен прокси Squid, что решило все проблемы доступа сотрудников с динамическими IP к защищенным ресурсам компании.

Теме OpenVPN посвящены многочисленные статьи и сообщения на форумах. Тем не менее, нужную информацию мне пришлось собирать по частям из разных мест. Попутно приходилось разбираться с многочисленными терминами и технологиями. В качестве серверов OpenVPN были использованы VDS на базе FreeBSD и Debian Linux, в качестве клиентов — рабочие станции FreeBSD, Debian Linux, Ubuntu и Microsoft Windows.

Надеюсь, что эта статья будет полезна тем, кто впервые столкнулся с необходимостью создания сети VPN или уже использует ее для решения тех или задач, а также тем, кто ищет замену коммерческим реализациям VPN.

С благодарностью приму замечания и предложения по содержимому статьи.

Оглавление

  • Немного теории
  • Компоненты сети OpenVPN
  • Готовим оборудование для установки OpenVPN
  • Создание удостоверяющего центра CA
  • Установка утилиты Easy-RSA
  • Создание сервера OpenVPN
  • Установка и запуск ПО клиента OpenVPN
  • Установка прокси-сервера Squid
  • Особенности установки на FreeBSD
  • Особенности установки клиента OpenVPN в Microsoft Windows
  • Полезные ссылки

Немного теории

Если раньше для создания безопасного канала передачи данных крупным компаниям и организациям приходилось прокладывать (либо арендовать) кабели и защищать их от физического доступа злоумышленников, то теперь в этом нет необходимости. С помощью VPN можно создавать защищенные виртуальные каналы, работающие через безопасный «туннель» в Интернете. Такое решение может позволить себе любая, даже очень небольшая компания.

Конечно, если предъявляются повышенные требования к защите данных, необходимо применять сертифицированные средства и обращаться к специалистам. Однако уровень защиты, обеспечиваемый OpenVPN, позволяет использовать эту технологию для многих коммерческих приложений.

Почему сеть VPN называется виртуальной и частной?

Виртуальная она потому, что узлы сети объединяются не физическими линиями, а виртуальными соединениями, которые создаются программным обеспечением (ПО) VPN.

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

Таким образом, сеть VPN может объединять ресурсы (серверы и рабочие станции) компании в единую безопасную виртуальную сеть, созданную на базе Интернета. И теперь сотрудники, работающие удаленно (из дома или из другой страны) будут находиться как бы в общей сети своей компании. Сеть VPN подходит и для консолидации территориально разделенных офисов компании.

Обмен данными по сети

ПО OpenVPN передает данные по сети с помощью протоколов UDP или TCP с применением драйвера TUN/TAP. Протокол UDP и драйвер TUN позволяет подключаться к серверу OpenVPN клиентам, расположенным за NAT.

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

Безопасность и шифрование

Безопасность и шифрование в OpenVPN обеспечивается библиотекой OpenSSL и протоколом транспортного уровня Transport Layer Security (TLS). Вместо OpenSSL в новых версиях OpenVPN можно использовать библиотеку PolarSSL. Протокол TLS представляет собой усовершенствование протокола защищенной передачи данных уровня защищенных сокетов Secure Socket Layers (SSL).

В OpenSSL может использоваться симметричная и ассиметричная криптография.

В первом случае перед началом передачи данных на все узлы сети необходимо поместить одинаковый секретный ключ. При этом возникает проблема безопасной передачи этого ключа через небезопасный Интернет.

Во втором случае у каждого участника обмена данными есть два ключа — публичный (открытый) и приватный (секретный).

Публичный ключ используется для зашифрования данных, а приватный — для расшифрования. В основе шифрования лежит довольно сложная математика. Выбранный в SSL/TLS алгоритм зашифрования публичным ключом обеспечивает возможность расшифрования только с помощью приватного ключа.

Приватный ключ секретный, и должен оставаться в пределах узла, на котором он создан. Публичный ключ должен передаваться участникам обмена данными.

Для безопасной передачи данных необходимо идентифицировать стороны, принимающие участие в обмене данными. В противном случае можно стать жертвой так называемой «атаки посредника» (Man in the Middle, MITM). В ходе такой атаки злоумышленник подключается к каналу передачи данных и прослушивает его. Он также может вмешиваться, удалять или изменять данные.

Чтобы обеспечить аутентификацию (проверку подлинности пользователя) протокол TLS использует инфраструктуру публичных ключей (Public Key Infrastructure, PKI) и асимметричную криптографию.

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

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

Шифрование данных увеличивает трафик и замедляет обмен данными. Чем больше длина ключа, применяемого для шифрования данных, тем труднее будет его подобрать, но и тем заметнее получится замедление обмена данными.

Сертификаты и удостоверяющий центр CA

Как мы уже сказали, при ассиметричной криптографии открытый ключ используется для зашифрования данных, а закрытый — для расшифрования. Чтобы избежать подделки открытого ключа, какая-то третья сторона должна его заверить. В результате этой процедуры создается так называемый сертификат открытого ключа.

Сертификат должна заверить организация, которой доверяют. Эта организация играет роль удостоверяющего центра (Certification authority, CA).

Если создается открытый ключ для публичного использования, в качестве удостоверяющего центра должна выступать коммерческая или государственная организация с неоспоримой репутацией. Эта организация публикует собственный открытый ключ, доступный всем.

Существует немало коммерческих организаций, выпускающих сертификаты, пригодные, например, для создания HTTPS-сайтов, для цифровой подписи сообщений электронной почты или документов, для систем мгновенного обмена сообщениями, такими как Jabber. Эти сертификаты выдаются на ограниченный срок и стоят денег.

Но для сети VPN, создаваемой для своей компании, вы можете самостоятельно создать свой удостоверяющий центр CA и выпускать так называемые самоподписанные сертификаты. Конечно, доверие к таким сертификатам не будет выходить за рамки вашей компании, но во-первых, этого будет вполне достаточно, а во-вторых, самоподписанные сертификаты совершенно бесплатны.

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

Сертификаты создаются в соответствии со стандартом X.509. Этот стандарт определяет форматы данных и процедуры распределения открытых ключей с помощью сертификатов, снабженных электронными подписями.

Сертификат X.509 — это публичный ключ, содержащий такие данные, как субъект, владеющий сертификатом, имя узла, период действия, алгоритм и значение подписи сертификата, и т.д. Сертификат должен быть подписан приватным ключом удостоверяющего центра (Certification authority, CA).

Когда наш узел рабочей станции подключается к удаленному узлу (серверу) с использованием протокола TLS, сервер отправляет ему сертификат X.509. На нашем узле есть публичный ключ удостоверяющего центра CA, который подписал этот сертификат. Этот ключ используется для проверки подписи.

Таким образом, имеется способ проверки удаленного узла (сервера), к которому наш узел собирается подключиться, чтобы исключить «атаки посредника» MITM.

Список отзыва сертификатов

Иногда требуется блокировать доступ отдельных узлов к сети VPN компании, например, заблокировать доступ рабочей станции уволенного сотрудника.

Для упрощения этой процедуры в OpenVPN предусмотрен список отзыва сертификатов (Сertificate Revocation List, CRL) и простые средства для управления этим списком.

Список CRL создается в удостоверяющем центре CA и потом копируется на сервер OpenVPN. После внесения изменений в список CRL его необходимо повторно скопировать на сервер OpenVPN.

Файл Диффи-Хелмана

Файл Диффи-Хелмана (Diffie-Hellman) необходим для реализации одноименного протокола, позволяющего использовать небезопасный канал для получения общего секретного ключа. Этот ключ будет в дальнейшем использоваться для защищенного обмена данными с помощью алгоритмов симметричного шифрования.

В применении к OpenVPN файл Диффи-Хелмана нужен для обеспечения защиты трафика от расшифровки, если ключи были похищены. Здесь имеется в виду тот трафик, который был записан и сохранен еще до похищения ключей.

Файл Диффи-Хелмана создается на сервере OpenVPN.

Статический ключ HMAC

Статический ключ (хэш-код) аутентификации сообщений (Hash-based Message Authentication Code, HMAC) обеспечивает проверку подлинности информации, передаваемой между сторонами. Этот ключ создается на сервере OpenVPN с целью дополнительной защиты от DoS-атак и флуда.

Компоненты сети OpenVPN

Прежде чем мы перейдем от теории к практике, перечислим основные компоненты сети OpenVPN и объекты, с которыми нам придется иметь дело.

Удостоверяющий центр CA

Выдает сертификаты по запросу узлов сети VPN, подписанные сертификатом удостоверяющего центра. Предоставляет узлам сети VPN свой собственный сертификат для проверки удостоверяющей стороны. Управляет списком отзыва сертификатов CRL.

Сервер OpenVPN

ПО сервера OpenVPN создает туннель внутри незащищенной сети, например, Интернета. Этот туннель обеспечивает безопасный зашифрованный трафик между узлами — участниками обмена данными в сети OpenVPN.

Клиент OpenVPN

ПО клиента OpenVPN устанавливается на все узлы, которым необходим защищенный канал передачи данный с сервером OpenVPN. При соответствующей настройке сервера OpenVPN возможна защищенная передача данных между клиентами OpenVPN, а не только между клиентами и сервером OpenVPN.

Сертификаты (публичные ключи) X.509 

Сертификаты X.509 представляют собой публичные ключи, заверенные удостоверяющим центром CA. Они используются для зашифровывания данных. Факт заверения сертификата удостоверяющим центром CA позволяет идентифицировать сторону, передающую зашифрованные данные.

Файл запроса на сертификат создается на узлах сети, затем он переносится на узел удостоверяющего центра и там подписывается. Созданный в результате подписанный сертификат переносится обратно на запросивший его узел сети OpenVPN.

Приватные ключи

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

Приватные ключи создаются на узлах сети OpenVPN одновременно с файлом запроса на получение сертификата.

Список отзыва сертификатов CRL

Содержит список сертификатов, утративших доверие. Он создается и редактируется на узле удостоверяющего центра CA. Чтобы отключить узел от сети, достаточно занести его сертификат в список CRL.

После создания и каждого изменения список CRL переносится на серверы OpenVPN.

Файл Диффи-Хелмана

Используется, чтобы в случае похищения ключей исключить расшифрование трафика, записанного еще до этого похищения. Создается на сервере OpenVPN.

Статический ключ HMAC

Служит для проверки подлинности передаваемой информации. Обеспечивает защиту от DoS-атак и флуда. Создается на сервере OpenVPN.

Готовим оборудование для установки OpenVPN

Если вы впервые настраиваете сеть VPN, лучше всего экспериментировать на виртуальных машинах VDS. Это могут быть VDS, созданные локально на вашем компьютере или на сервере в вашей сети, либо арендованные у провайдера. Перед арендой VDS поинтересуйтесь, поддерживается ли драйвер TUN/TAP. Некоторые провайдеры требуют дополнительной оплаты для подключения TUN/TAP.

На рис. 1. мы показали схему стенда, на котором будем устанавливать компоненты и узлы OpenVPN (имена и адреса IP хостов могут быть другими).

Рис. 1. Стенд для изучения OpenVPN.

Здесь изображены три узла (хоста), для каждого из которых потребуется отдельный VDS:

  • сервер OpenVPN (vpnsrv, 192.168.0.54);
  • клиент OpenVPN (vpnclient, 192.168.0.55);
  • удостоверяющий центр CA (ca, 192.168.0.53)

Хосты клиента и сервера VPN соединены обычным, небезопасным каналом. В случае макета это может быть локальная сеть, в реальной жизни — канал сети Интернет. ПО OpenVPN создает в этой сети канал, обозначенный на рис. 1 красным цветом, внутри которого устанавливается безопасный шифрованный канал (обозначен зеленым цветом).

В макете хост удостоверяющего центра CA можно подключить к вашей локальной сети. Для реальной работы хост CA нужно отсоединить от сети, а обмен сертификатами и ключами осуществлять с помощью, например, USB флэш-диска.

Если к безопасности предъявляются повышенные требования, хост CA необходимо поместить в охраняемое помещение — расположенная на этой машине информация позволяет создавать ключи доступа к вашей сети VPN.

Мы проводили установку серверов OpenVPN в среде ОС Debian Linux и FreeBSD, клиентов OpenVPN в ОС Debian Linux, FreeBSD и Microsoft Windows.

Основная часть статьи посвящена установке компонентов OpenVPN для Debian Linux. Далее мы рассмотрим особенности установки для FreeBSD и Microsoft Windows.

По возможности на узлах сети OpenVPN используйте новые версии ОС. Перед тем как приступить к работе с OpenVPN, обновите пакеты Linux:

# apt-get update
# apt-get upgrade

Установите на всех узлах пакет пакет zip, если он не был установлен ранее:

# aptitude install zip

Этот пакет будет нужен для распаковки архива утилиты Easy-RSA, с помощью которой мы будем создавать ключи и сертификаты.

На всех узлах настройте обновление и синхронизацию времени.

# apt-get install ntpdate
# apt-get install -y ntp
# /etc/init.d/ntp stop
# ntpdate pool.ntp.org
# /etc/init.d/ntp start

Синхронизация времени необходима, т.к. сертификаты имеют период действия. Если часы, например, на хосте удостоверяющего центра CA и сервера OpenVPN не синхронны, может получиться так, что выданный удостоверяющим центром сертификат не будет действителен на узлах сети OpenVPN из-за ограничений по дате или времени.

Дальнейшие работы мы начнем с подготовки хоста удостоверяющего центра CA. Затем установим хосты сервера и клиента OpenVPN.

Создание удостоверяющего центра CA

Как мы уже говорили, задача удостоверяющего центра CA — выдача подписанных сертификатов для сервера и клиентов OpenVPN.

Чтобы получить сертификат, сервер или клиент на своем хосте генерирует файл запроса на сертификат. Этот файл запроса передается на хост CA, который создает сертификат и подписывает его. Далее подписанный сертификат передается на запросивший хост.

Одновременно с запросом сертификата создается приватный ключ. Приватные ключи создаются для всех узлов сети OpenVPN: для удостоверяющего центра CA, для сервера и всех клиентов OpenVPN.

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

На рис. 2 показан процесс получения подписанного сертификата для сервера OpenVPN.

Рис. 2. Получение сертификата для сервера OpenVPN

Сервер OpenVPN создает свой приватный ключ и файл запроса на получение сертификата. Файл запроса передается в удостоверяющий центр, например, на USB флеш-диске.

Удостоверяющий центр на основе запроса создает подписанный сертификат, который затем требуется перенести на сервер OpenVPN, также на USB флэш-диске.

Если к безопасности не предъявляется особых требований или вы только изучаете OpenVPN, можно подключить машину удостоверяющего центра к сети и передавать запросы и сертификаты, например, с помощью утилит SFTP или SCP. Можно даже совместить функции CA и, например, сервера OpenVPN в одном хосте.

Аналогичным образом необходимо получить сертификаты для всех клиентских узлов (рис. 3).

Рис. 3. Получение сертификата для клиента OpenVPN

Установка утилиты Easy-RSA

Все операции по созданию ключей и сертификатов можно выполнить с помощью утилиты openssl. Однако проще воспользоваться специально созданной для этого программой Easy-RSA, которая использует openssl для выполнения действий с ключами и сертификатами.

Ранее утилита Easy-RSA поставлялась вместе с OpenVPN, но теперь это отдельный проект.

Все операции с удостоверяющим центром и сертификатами можно (и нужно) проводить от имени непривилегированного пользователя.

Создайте пользователя с именем, например, ca и перейдите в его домашний каталог:

# adduser ca
# su ca
$ cd

Загрузите дистрибутив программы утилитой wget.

$ wget https://github.com/OpenVPN/easy-rsa/archive/master.zip

После загрузки распакуйте архив master.zip:

$ unzip master.zip

В табл. 1 перечислены файлы и каталоги, входящие в дистрибутив Easy-RSA.

Таблица 1. Состав дистрибутива Easy-RSA.

Мы рекомендуем ознакомиться с файлом README.quickstart.md, а также с файлами из папки Doc. Для создания ключей и сертификатов нужно перейти в каталог easyrsa3, где находится исполнимый файл программы Easy-RSA.

Создание инфраструктуры публичных ключей PKI

На первом шаге создайте инфраструктуру публичных ключей (Public Key Infrastructure, PKI):

$ cd /home/ca/easy-rsa-master/easyrsa3
$ ./easyrsa init-pki

Вы увидите сообщение:

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /home/ca/easy-rsa-master/easyrsa3/pki

В результате выполнения команды init-pki был создан каталог /home/ca/easy-rsa-master/easyrsa3/pki, где и находится инфраструктура публичных ключей PKI.

На втором шаге с помощью команды build-ca создайте удостоверяющий центр CA:

$ ./easyrsa build-ca

В ответ на эту команду вам будет предложено ввести пароль и так называемое имя Common Name:

Generating a 2048 bit RSA private key
.....+++
................................................................+++
writing new private key to '/home/ca/easy-rsa-master/easyrsa3/pki/private/ca.key'
Enter PEM pass phrase:********
Verifying - Enter PEM pass phrase:********
----You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value, 
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:ca.mydomain.ru>
CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/home/ca/easy-rsa-master/easyrsa3/pki/ca.crt

Пароль будет защищать приватный ключ удостоверяющего центра, созданный в формате PEM (Privacy Enhancement for Internet Electronic Mail). Этот пароль потребуется каждый раз, когда вы будете подписывать в удостоверяющем центре сертификаты для серверов и клиентов OpenVPN.

Чтобы избавиться от необходимости ввода пароля, можно при запуске команды build-ca задать опцию nopass:

$ ./easyrsa build-ca nopass

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

В качестве Common Name задайте, например, доменное имя, выделенное для удостоверяющего центра CA, имя пользователя или хоста сервера CA.

Для удостоверяющего центра команда build-ca создаст два файла:

/home/ca/easy-rsa-master/easyrsa3/pki/private/ca.key
/home/ca/easy-rsa-master/easyrsa3/pki/ca.crt

Файл ca.key представляет собой приватный ключ центра CA, он секретный, и его нельзя переносить на другие узлы вашей сети.

Файл сертификата удостоверяющего центра ca.crt, напротив, открытый, и он будет нужен на узлах серверов и клиентов OpenVPN. Запишите файл ca.crt на USB флэш-диск, чтобы перенести на другие узлы.

Смонтировать USB флэш-диск, можно, например, так:

# fdisk -l
# mkdir /mnt/flash
# mount -t vfat /dev/sdb1 /mnt/flash

Здесь мы предполагаем, что USB флэш-диск стал устройством /dev/sdb1, а его файловая система — FAT32.

Копируем файл сертификата CA:

# cp /home/ca/easy-rsa-master/easyrsa3/pki/ca.crt /mnt/flash/ca.crt

Для работы с USB флэш-диском с файловой системой NTFS сначала установите пакет ntfs-3g:

# aptitude install ntfs-3g

Смонтируйте диск следующим образом:

# mount -t ntfs-3g /dev/sdb1 /mnt/flash

После окончания копирования размонтируйте USB диск:

# umount /mnt/flash

Создание списка отзывов сертификатов

Если сотрудник уволился, необходимо заблокировать его доступ в сеть VPN компании. Специально для этой цели в OpenVPN предусмотрен список отзыва сертификатов CRL. Создайте его такой командой:

$ cd /home/ca/easy-rsa-master/easyrsa3
$ ./easyrsa gen-crl

У вас будет запрошен пароль доступа к приватному ключу ca.key удостоверяющего центра. Список отзыва сертификатов будет создан в файле /home/ca/easy-rsa-master/easyrsa3/pki/crl.pem.

Скопируйте этот файл на USB флэш-диск:

# cp /home/ca/easy-rsa-master/easyrsa3/pki/crl.pem /mnt/flash

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

$ ./easyrsa revoke developer5

Здесь мы отозвали сертификат для клиента developer5. Далее нужно скопировать новый файл CRL на сервер OpenVPN и перезапустить демон OpenVPN.

Созданные файлы и каталоги PKI

В табл. 2 мы привели краткое описание некоторых файлов и каталогов PKI, созданных в результате наших действий.

Таблица 2. Структура каталога PKI.

Справка по утилите Easy-RSA

Запустите утилиту Easy-RSA без параметров:

$ ./easyrsa

На экране появится список всех команд утилиты, а также полный путь к программе и к PKI.

Для того чтобы получить справку по нужной команде, добавьте опцию help. Например, так можно получить справку по команде build-ca:

$ ./easyrsa help build-ca

Создание сервера OpenVPN

Процесс создания сервера OpenVPN включает в себя установку пакета openvpn, подготовку файлов конфигурации, ключей и сертификатов.

Установка пакета openvpn

Установите пакет сервера OpenVPN следующим образом:

# apt-get install openvpn

Подготовка файлов конфигурации

Файлы конфигурации, сертификаты и ключи нужно поместить в каталог /etc/openvpn, который будет создан автоматически в процессе установки пакета openvpn.

Прежде всего, подготовим файлы конфигурации openssl.cnf и server.conf. Первый из этих файлов определяет конфигурацию OpenSSL, второй — конфигурацию сервера OpenVPN.

В комплекте с утилитой Easy-RSA поставляется пример файла конфигурации OpenSSL (предполагается, что мы установили утилиту в домашний каталог пользователя ca):

/home/ca/easy-rsa-master/easyrsa3/openssl-1.0.cnf

Мы, однако, рекомендуем использовать для начала упрощенную версию этого файла из нашей статьи.

В файле openssl.cnf указан абсолютный путь к каталогу с ключами и сертификатами, который вы только что создали.

Содержимое файла openssl.cnf

[ ca ]
default_ca = CA_default
[ CA_default ]
dir = /etc/openvpn
crl_dir = $dir
database = $dir/index.txt
new_certs_dir = $dir
certificate = $dir/ca.crt
serial = $dir
crl = $dir/crl.pem
private_key = $dir/server.key
RANDFILE = $dir/.rand
default_days = 3650
default_crl_days = 365
default_md = md5
unique_subject = yes
policy = policy_any
x509_extensions = user_extensions
[ policy_any ]
organizationName = match
organizationalUnitName = optional
commonName = supplied
[ req ]
default_bits = 2048
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
x509_extensions = CA_extensions
[ req_distinguished_name ]
organizationName = Organization Name (must match CA)
organizationName_default = Company
organizationalUnitName = Location Name
commonName = Common User or Org Name
commonName_max = 64
[ user_extensions ]
basicConstraints = CA:FALSE
[ CA_extensions ]
basicConstraints = CA:TRUE
default_days = 3650
[ server ]
basicConstraints = CA:FALSE
nsCertType = server

Пример файла openvpn.conf конфигурации сервера OpenVPN есть на сайте проекта по адресу openvpn.net/index.php/open-source/documentation/howto.html#server. Мы предлагаем начать с сокращенной версии этого файла из нашей статьи.

Содержимое файла server.conf

port 1194
proto udp
dev tun
user openvpn
group openvpn
cd /etc/openvpn
persist-key
persist-tun
tls-server
tls-timeout 120
dh /etc/openvpn/dh.pem
ca /etc/openvpn/ca.crt
cert /etc/openvpn/vpn-server.crt
key /etc/openvpn/server.key
crl-verify /etc/openvpn/crl.pem
tls-auth /etc/openvpn/ta.key 0
server 10.15.0.0 255.255.255.0
client-config-dir /etc/openvpn/ccd
client-to-client
topology subnet
max-clients 5
push "dhcp-option DNS 10.15.0.1"
route 10.15.0.0 255.255.255.0
comp-lzo
keepalive 10 120
status /var/log/openvpn/openvpn-status.log 1
status-version 3
log-append /var/log/openvpn/openvpn-server.log
verb 3
mute 20

Чтобы запуск сервера OpenVPN произошел успешно, необходимо создать каталоги, сертификаты и ключи, на которые есть ссылки в файлах openssl.cnf и server.conf, а также пользователя openvpn.

Создайте каталог для журнала сервера OpenVPN:

# mkdir /var/log/openvpn/

Создайте каталог для конфигураций клиентов (пока не используем):

# mkdir /etc/openvpn/ccd

Подготовка сертификата и ключа для сервера OpenVPN

Помимо openssl.cnf и openvpn.conf в каталоге /etc/openvpn/ нам потребуются файлы, перечисленные в табл. 3.

Таблица 3. Файлы для сервера OpenVPN.

Прежде всего мы создадим приватный ключ и файл запроса на сертификат для сервера OpenVPN, а также получим по созданному запросу в удостоверяющем центре CA подписанный сертификат. В результате у нас появятся файлы server.crt и server.key. Далее займемся остальными файлами, перечисленными в табл. 3.

Чтобы создать для сервера OpenVPN запрос на сертификат и приватный ключ, нам потребуется установить на сервер OpenVPN программу Easy-RSA, аналогично тому, как мы это делали для удостоверяющего центра CA.

Установку Easy-RSA, генерацию приватного ключа сервера OpenVPN и запроса на сертификат мы будем делать от имени пользователя vpnoperator, не имеющего привилегий администратора. Добавьте этого пользователя перед началом работ:

# adduser vpnoperator

Прежде всего, устанавливаем на сервере OpenVPN утилиту Easy-RSA и запускаем инициализацию инфраструктуры публичных ключей PKI:

$ cd /home/vpnoperator
$ wget https://github.com/OpenVPN/easy-rsa/archive/master.zip
$ unzip master.zip
$ cd /home/vpnoperator/easy-rsa-master/easyrsa3
$ ./easyrsa init-pki

После успешной инициализации PKI в консоли появится сообщение:

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /home/vpnoperator/easy-rsa-master/easyrsa3/pki

Так как наш сервер OpenVPN не будет играть роль удостоверяющего центра, то после инициализации PKI мы не будем создавать CA командой build-ca.

Инфраструктура PKI будет создана в каталоге /home/vpnoperator/easy-rsa-master/easyrsa3/pki.

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

$ ./easyrsa gen-req server

Этой командой будет создан файл запроса server.req и приватного ключа server.key. В процессе генерации у вас будет запрошен пароль, а также имя Common Name для сервера OpenVPN:

Generating a 2048 bit RSA private key
...............................................................................................................+++
....................................+++
writing new private key to '/home/vpnoperator/easy-rsa-master/easyrsa3/pki/private/server.key'
Enter PEM pass phrase:******
Verifying - Enter PEM pass phrase:******
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [server]: vpn-server
Keypair and certificate request completed. Your files are:
req: /home/vpnoperator/easy-rsa-master/easyrsa3/pki/reqs/server.req
key: /home/vpnoperator/easy-rsa-master/easyrsa3/pki/private/server.key

Первый из этих файлов нам нужно передать на сервер удостоверяющего центра CA, он не секретный. Второй файл — секретный, и он не должен покидать пределы сервера OpenVPN.

Как мы уже говорили, безопаснее всего передавать запрос на сертификат через USB флеш-диск, чтобы не подключать сервер CA к сети:

# fdisk -l
# mkdir /mnt/flash
# mount -t vfat /dev/sdb1 /mnt/flash
# cp /home/vpnoperator/easy-rsa-master/easyrsa3/pki/reqs/server.req /mnt/flash/server.req
# umount /mnt/flash

Заметим, что при генерации приватного ключа был запрошен пароль. Этот пароль обеспечивает защиту, если приватный ключ будет скомпрометирован (украден злоумышленником). Пароль приватного ключа OpenVPN будет запрашиваться с консоли каждый раз при загрузке сервера и запуске OpenVPN.

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

В этой ситуации можно создать приватный ключ без пароля с помощью опции nopass:

$ ./easyrsa gen-req server nopass

Итак, вы создали приватный ключ сервера OpenVPN и запрос на сертификат.

Смонтируйте USB флэш-диск на хосте удостоверяющего центра CA, а затем импортируйте от имени пользователя ca запрос в PKI:

# mount -t vfat /dev/sdb1 /mnt/flash
# su ca
$ cd /home/ca/easy-rsa-master/easyrsa3
$ ./easyrsa import-req /mnt/flash/server.req vpn-server

Здесь мы указали сокращенное имя запроса на сертификат как «vpn-server». Это сокращенное имя будет использовано в дальнейших операциях с сертификатом.

После удачного импорта запроса вы увидите следующее сообщение:

The request has been successfully imported with a short name of: vpn-server
You may now use this name to perform signing operations on this request.

Если ошибок нет, подписываем запрос на получение сертификата:

./easyrsa sign-req server vpn-server

В процессе создания подписанного сертификата будет запрошено подтверждение (ответьте на него «yes»), а также пароль приватного ключа удостоверяющего центра CA:

You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request has not been cryptographically verified. Please be sure it came from a trusted source or that you have verified the request checksum with the sender.
Request subject, to be signed as a server certificate for 3650 days:

subject=
    commonName                = server
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Using configuration from /home/ca/easy-rsa-master/easyrsa3/openssl-1.0.cnf
Enter pass phrase for /home/ca/easy-rsa-master/easyrsa3/pki/private/ca.key:******
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'server'
Certificate is to be certified until Jun 26 15:48:25 2024 GMT (3650 days)
Write out database with 1 new entries
Data Base Updated
Certificate created at: /home/ca/easy-rsa-master/easyrsa3/pki/issued/vpn-server.crt

Теперь сертификат получен, и он находится на сервере удостоверяющего центра в файле home/ca/easy-rsa-master/easyrsa3/pki/issued/vpn-server.crt. Этот файл нам нужно передать на сервер OpenVPN.

Скопируйте через USB флеш-диск файл сертификата /ca/easy-rsa-master/easyrsa3/pki/issued/vpn-server.crt с сервера удостоверяющего центра в файл на сервере OpenVPN /home/vpnoperator/vpn-server.crt:

# cp /home/ca/easy-rsa-master/easyrsa3/pki/issued/vpn-server.crt /mnt/flash/

Затем смонтируйте USB диск на VDS OpenVPN и скопируйте файлы ca.crt сертификата CA, список отзыва сертификатов crl.pem и сертификат vpn-server.crt сервера OpenVPN в каталог /etc/openvpn:

# mount -t vfat /dev/sdb1  /mnt/flash
# cp /mnt/flash/ca.crt /etc/openvpn
# cp /mnt/flash/crl.pem /etc/openvpn
# cp /mnt/flash/vpn-server.crt /etc/openvpn
# umount /mnt/flash

Файл приватного ключа скопируйте из каталога usr/home/vpnoperator/easy-rsa-master/easyrsa3/pki/private/ в каталог /etc/openvpn/:

# cp /home/vpnoperator/easy-rsa-master/easyrsa3/pki/private/server.key /etc/openvpn

Генерация файла Диффи-Хелмана

Создайте ключи Диффи-Хелмана следующей командой:

$ cd /home/vpnoperator/easy-rsa-master/easyrsa3
$ ./easyrsa gen-dh

Команда gen-dh работает довольно долго. По завершении вы увидите сообщение:

DH parameters of size 2048 created at /home/vpnoperator/easy-rsa-master/easyrsa3/pki/dh.pem

Скопируйте файл/home/vpnoperator/easy-rsa-master/easyrsa3/pki/dh.pem в каталог /etc/openvpn/ :

# cp /home/vpnoperator/easy-rsa-master/easyrsa3/pki/dh.pem /etc/openvpn

Создание статического ключа HMAC

Для создания ключа HMAC используйте команду openvpn с опциями —genkey и —secret:

# cd /etc/openvpn
# openvpn --genkey --secret ta.key

Запишите файл ta.key на USB диск:

# cp /etc/openvpn/ta.key /mnt/flash

Ревизия файлов перед запуском OpenVPN

Итак, мы получили из удостоверяющего центра подписанный сертификат сервера OpenVPN, сертификат самого удостоверяющего центра CA, список отзыва сертификатов, создали файл Диффи-Хелмана и ключ HMAC.

Перед тем как запустить демон OpenVPN, нам нужны в каталоге /etc/openvpn/ для Linux или /usr/local/etc/openvpn/ для FreeBSD следующие файлы:

  • openssl.cnf — файл конфигурации OpenSSL;
  • server.conf — файл конфигурации сервера OpenVPN;
  • ca.crt — cертификат удостоверяющего центра;
  • vpn-server.crt — cертификат сервера OpenVPN;
  • server.key — приватный ключ сервера OpenVPN, секретный;
  • crl.pem — cписок отзыва сертификатов;
  • dh.pem — файл Диффи-Хелмана для обеспечения защиты трафика от расшифровки;
  • ta.key — ключ HMAC для дополнительной защиты от DoS-атак и флуда

Добавление пользователя openvpn

Добавьте непривилегированного пользователя и группу openvpn, от имени которого будет работать демон сервера OpenVPN:

# adduser --system --no-create-home --home /nonexistent --disabled-login --group openvpn

Запуск демона OpenVPN

Запустите демон OpenVPN следующей командой:

# /etc/init.d/openvpn start

Проверка результата запуска демона OpenVPN

Если сервер OpenVPN стартовал без ошибок, убедитесь с помощью команды ifconfig в том, что появился интерфейс TUN:

# ifconfig 
...
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.15.0.1 P-t-P:10.15.0.1 Mask:255.255.255.0
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

Как мы уже говорили, использование TUN/TAP на арендованных VDS может потребовать дополнительной оплаты.

Если все хорошо, то в интерфейсе tun появился адрес IP 10.15.0.1. Это адрес сервера OpenVPN в нашем защищенном туннеле, заданный в файле конфигурации server.conf.

После проверки наличия интерфейса TUN убедитесь, что OpenVPN занял порт 1194:

# netstat -ltupn | grep 1194

Если демон запустился нормально и порт 1194 занят сервером OpenVPN, можно переходить к установке клиента OpenVPN, описанной в следующем разделе статьи. При возникновении ошибок проанализируйте журнал /var/log/openvpn/openvpn-server.log.

При установке OpenVPN на Linux с новыми ядрами, начиная с 2.6, интерфейс TUN может не появится. При этом в логах появляется ошибка:

Loading kernel module for a network device with CAP_SYS_MODULE (deprecated). Use CAP_NET_ADMIN and alias netdev-tun instead

Чтобы избавиться от проблемы, добавьте в файл /etc/modprobe.d/dist.conf строку:

alias netdev-tun tun

Если такого файла нет, его следует создать. После внесения изменений в файл /etc/modprobe.d/dist.conf перезагрузите ОС.

Степень детализации журнала зависит от параметра verb файла конфигурации server.conf. Параметр verb может принимать значения от 0 до 11, при этом 11 соответствует максимальной детализации, а значение по умолчанию равно 1. Если значение параметра verb равно 0, то в журнал будут записываться сообщения только о наиболее серьезных, фатальных ошибках.

Для отладки установите значение этого параметра, равным 5 или выше.

Установка и запуск ПО клиента OpenVPN

Процедура установки клиента OpenVPN аналогична процедуре установки сервера OpenVPN. Основные отличия в файлах конфигурации. Перед установкой не забудьте обновить пакеты и порты.

# apt-get install openvpn

Подготовка файлов конфигурации

Файлы конфигурации, ключи и сертификаты должны находится в каталоге /etc/openvpn.

Далее подготовьте файлы конфигурации openssl.cnf и server.conf.

Файл openssl.cnf, определяющий конфигурацию OpenSSL, используйте точно такой же, как и для сервера OpenVPN. Что касается файла server.conf для клиента OpenVPN, то для начала возьмите его из нашей статьи.

Содержимое файла server.conf для клиента OpenVPN

dev tun
proto udp
remote 192.168.0.54 1194
client
resolv-retry infinite
ca "/etc/openvpn/ca.crt"
cert "/etc/openvpn/developer1.crt"
key "/etc/openvpn/client.key"
tls-auth "/etc/openvpn/ta.key" 1
remote-cert-tls server
persist-key
persist-tun
comp-lzo
verb 3
status /var/log/openvpn/openvpn-status.log 1
status-version 3
log-append /var/log/openvpn/openvpn-client.log

Обратите внимание на параметр remote, в котором указан адрес IP сервера OpenVPN:

remote 192.168.0.54 1194

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

Создайте каталог для журнала клиента OpenVPN:

# mkdir /var/log/openvpn/

Создание инфраструктуры публичных ключей PKI

Подключитесь к хосту клиента OpenVPN (в нашем случае это хост разработчика ПО) с правами обычного пользователя developer1 и скачайте утилиту Easy-RSA с сайта github.com/OpenVPN/easy-rsa.

$ cd /home/developer1
$ wget https://github.com/OpenVPN/easy-rsa/archive/master.zip
$ unzip master.zip

Запустите инициализацию инфраструктуры публичных ключей PKI:

$ cd /home/developer1/easy-rsa-master/easyrsa3
$ ./easyrsa init-pki

В результате будет подготовлен каталог PKI:

/home/developer1/easy-rsa-master/easyrsa3/pki

Подготовка сертификата и ключа для клиента OpenVPN

Создайте запрос на сертификат и приватный ключ рабочей станции разработчика developer1:

$ ./easyrsa gen-req client nopass

Вам потребуется ввести имя Common Name для создания запроса на сертификат и приватного ключа рабочей станции:

Generating a 2048 bit RSA private key
..............................................................................................+sftp++
................................+++
writing new private key to '/home/developer1/easy-rsa-master/easyrsa3/pki/private/client.key'
-----
You are about to be asked to enter information that will be incorporated into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [client]:developer1
Keypair and certificate request completed. Your files are:
req: /home/developer1/easy-rsa-master/easyrsa3/pki/reqs/client.req
key: /home/developer1/easy-rsa-master/easyrsa3/pki/private/client.key

Если к защите данных предъявляются повышенные требования, создавайте приватный ключ с паролем, без использования опции nopass:

$ ./easyrsa gen-req client

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

Теперь вам потребуется перенести созданный запрос сертификата /home/developer1/easy-rsa-master/easyrsa3/pki/reqs/client.req на хост удостоверяющего центра CA и записать в файл /home/ca/client.req.

Сделайте это с помощью USB флэш-диска, если хост CA не подключен к сети.

Запишите запрос на USB диск:

# mkdir /mnt/flash
# mount -t vfat /dev/sdb1  /mnt/flash
# cp /home/developer1/easy-rsa-master/easyrsa3/pki/reqs/client.req /mnt/flash
# umount /mnt/flash

Импортируйте запрос в PKI, используя в качестве короткого имени developer1:

$ cd /home/ca/easy-rsa-master/easyrsa3
$ ./easyrsa import-req /mnt/flash/client.req developer1

Далее подпишите запрос на получение сертификата:

$ ./easyrsa sign-req client developer1

После ввода подтверждения и пароля приватного ключа CA будет создан сертификат:

/home/ca/easy-rsa-master/easyrsa3/pki/issued/developer1.crt

Запишите файл developer1.crt на USB флэш-диск, чтобы перенести его на хост клиента OpenVPN.

# cp /home/ca/easy-rsa-master/easyrsa3/pki/issued/developer1.crt /mnt/flash
# umount /mnt/flash

Скопируйте файл сертификата в каталог /etc/openvpn:

# mount -t vfat /dev/sdb1  /mnt/flash
# cp /mnt/flash/developer1.crt /etc/openvpn

Итак, теперь у нас есть файл приватного ключа рабочей станции client.key и файл сертификата developer1.crt, подписанного удостоверяющим центром CA.

Скопируйте файл ключа в каталог /etc/openvpn:

# cp /home/developer1/easy-rsa-master/easyrsa3/pki/private/client.key /etc/openvpn

Скопируйте в каталог /etc/openvpn клиента VPN следующие файлы, подготовленные на USB диске:

# cp /mnt/flash/ca.crt /etc/openvpn
# cp /mnt/flash/ta.key /etc/openvpn

Напомним, что файлы ca.crt и crl.pem были созданы на хосте удостоверяющего центра CA, а файл ta.key — на хосте сервера OpenVPN.

Запуск клиента OpenVPN

Запустите демон следующей командой:

# /etc/init.d/openvpn start

Если возникла проблема с запуском клиента, проверьте содержимое журнала /var/log/openvpn/openvpn-client.log

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

# ifconfig
...
 tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
 inet addr:10.15.0.2 P-t-P:10.15.0.2 Mask:255.255.255.0
 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
 RX packets:0 errors:0 dropped:0 overruns:0 frame:0
 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:100
 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

Проверьте также, что сервер OpenVPN откликается на команду ping по адресу 10.15.0.1:

# ping 10.15.0.1

Установка прокси-сервера Squid

Итак, у нас есть сеть VPN, и сотрудники, работающие удаленно, могут подключаться к VDS сервера OpenVPN с помощью безопасного туннеля. Теперь нам нужно организовать доступ сотрудников к защищенным ресурсам компании через прокси-сервер, установленный на сервер OpenVPN. В этом случае рабочие станции сотрудников с динамическими адресами IP смогут подключаться к ресурсам компании, для которых разрешен доступ с фиксированного адреса IP сервера OpenVPN.

В качестве прокси-сервера мы выбрали ПО с открытым исходным кодом Squid, который часто применяется, в частности, для кэширования Web-страниц в высоконагруженных проектах. Нам, однако, сейчас пригодится только его функция проксирования.

Установку Squid проще всего выполнить из пакета:

# apt-get install squid3

После завершения установки в каталоге /etc/squid3 будет создан файл конфигурации squid.conf внушительных размеров, который необходимо отредактировать. Впрочем, в нашем случае требуется внести лишь очень небольшие изменения.

Прежде всего, отыщите в файле squid.conf следующую строку:

http_access deny all

Перед этой строкой добавьте:

acl allowed_hosts src 10.15.0.0/24
http_access allow allowed_hosts
http_access deny manager

Первая из этих строк разрешает доступ к Squid из вашей сети OpenVPN.

Если требуется проксировать доступ к каким-либо нестандартным портам SSL, добавьте их к строке:

acl SSL_ports port 443

Например, здесь мы добавили нестандартный порт 7195:

acl SSL_ports port 443 7195

Убедитесь, что в файле squid.conf разрешен доступ из сети 10.0.0.0/8. По умолчанию там есть такая строка:

acl localnet src 10.0.0.0/8 # RFC1918 possible internal network

После завершения редактирования файла конфигурации перезапустите Squid:

# /etc/init.d/squid3 restart

Журналы Squid помогут при отладке, если что-то пойдет не так. Они находятся в каталоге /var/log/squid3. Это файлы access.log и cache.log.

После установки и запуска Squid пропишите в браузере прокси 10.15.0.1, порт 3128. Если все настроено правильно, браузер будет ходить в Интернет через ваш сервер OpenVPN. В этом можно убедиться, например, посетив сайт 2ip.ru, myip.ru или аналогичный, показывающий IP-адрес посетителя.

Особенности установки на FreeBSD

Перед началом работ обновите порты FreeBSD:

# portsnap fetch
# portsnap extract

Также позаботьтесь о настройке синхронизации времени на узлах сети OpenVPN. Однократная синхронизация выполняется так:

# ntpdate 1.pool.ntp.org

Вы можете добавить эту команду в задание cron. Также для синхронизации можно установить демон ntpd.

Установка утилиты Easy-RSA

Для загрузки дистрибутива используйте команду fetch:

$ fetch --no-verify-peer https://github.com/OpenVPN/easy-rsa/archive/master.zip

Опция —no-verify-peer позволяет избавиться от ошибки, которая возникает при проверке сертификата digicert.com в FreeBSD версии 10.0. FreeBSD версии 9.2 проверяет данный сертификат успешно, там эта опция не нужна.

В остальном приемы работы с утилитой Easy-RSA в среде FreeBSD ничем не отличаются от приемов работы в среде Debian Linux.

Установка сервера и клиента OpenVPN

Запустите установку OpenVPN на хосте сервера и клиентов OpenVPN из портов следующем образом:

# сd /usr/ports/security/openvpn
# make install clean

Файлы конфигурации OpenVPN

Файлы конфигурации сервера OpenVPN при его установке в ОС FreeBSD необходимо размещать в каталоге /usr/local/etc/openvpn.

Создайте этот каталог:

# mkdir /usr/local/etc/openvpn

Файлы конфигурации openssl.cnf и server.conf содержат путь к каталогу /usr/local/etc/openvpn.

Файл openssl.cnf

[ ca ]
default_ca = CA_default
[ CA_default ]
dir = /usr/local/etc/openvpn
crl_dir = $dir2
database = $dir/index.txt
new_certs_dir = $dir
certificate = $dir/ca.crt
serial = $dir
crl = $dir/crl.pem
private_key = $dir/server.key
RANDFILE = $dir/.rand
default_days = 3650
default_crl_days = 365
default_md = md5
unique_subject = yes
policy = policy_any
x509_extensions = user_extensions
[ policy_any ]
organizationName = match
organizationalUnitName = optional
commonName = supplied
[ req ]
default_bits = 2048
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
x509_extensions = CA_extensions
[ req_distinguished_name ]
organizationName = Organization Name (must match CA)
organizationName_default = Company
organizationalUnitName = Location Name
commonName = Common User or Org Name
commonName_max = 64
[ user_extensions ]
basicConstraints = CA:FALSE
[ CA_extensions ]
basicConstraints = CA:TRUE
default_days = 3650
[ server ]
basicConstraints = CA:FALSE
nsCertType = server 

Содержимое файла server.conf для сервера OpenVPN

port 1194
proto udp
dev tun
user openvpn
group openvpn
cd /usr/local/etc/openvpn
persist-key
persist-tun
tls-server
tls-timeout 120
dh /usr/local/etc/openvpn/dh.pem
ca /usr/local/etc/openvpn/ca.crt
cert /usr/local/etc/openvpn/server.crt
key /usr/local/etc/openvpn/server.key
crl-verify /usr/local/etc/openvpn/crl.pem
tls-auth /usr/local/etc/openvpn/ta.key 0
server 10.15.0.0 255.255.255.0
client-config-dir /usr/local/etc/openvpn/ccd
client-to-client
topology subnet
max-clients 5
push "dhcp-option DNS 10.15.0.1"
route 10.15.0.0 255.255.255.0
comp-lzo
keepalive 10 120
status /var/log/openvpn/openvpn-status.log 1
status-version 3
log-append /var/log/openvpn/openvpn-server.log
verb 3
mute 20

Содержимое файла server.conf для клиента OpenVPN

dev tun
proto udp
remote 192.168.0.54 1194
client
resolv-retry infinite
ca "/usr/local/etc/openvpn/ca.crt"
cert "/usr/local/etc/openvpn/developer1.crt"
key "/usr/local/etc/openvpn/client.key"
tls-auth "/usr/local/etc/openvpn/ta.key" 1
#ns-cert-type server
remote-cert-tls server
#ifconfig 10.15.0.0 255.255.255.0
persist-key
persist-tun
comp-lzo
verb 3
status /var/log/openvpn/openvpn-status.log 1
status-version 3
log-append /var/log/openvpn/openvpn-client.log

Создайте каталог для конфигураций клиентов:

# mkdir /usr/local/etc/openvpn/ccd

Работа с инфраструктурой PKI

Установите на сервере OpenVPN утилиту Easy-RSA и запустите инициализацию инфраструктуры публичных ключей PKI:

$ cd /home/vpnoperator
$ fetch https://github.com/OpenVPN/easy-rsa/archive/master.zip
$ unzip master.zip
$ cd /home/vpnoperator/easy-rsa-master/easyrsa3
$ ./easyrsa init-pki

В процессе передачи файлов запроса на сертификаты и подписанные сертификаты вы можете использовать USB флэш-диск. Ниже приведены команды для монтирования и размонтирования диска:

# ls  /dev/da*
# mount_msdosfs /dev/da1s1 /mnt
# umount /mnt

Здесь предполагается, что для USB флэш-диска выделено устройство /dev/da1s1.

Добавление пользователя openvpn

С помощью команды adduser добавьте пользователя openvpn. В качестве Shell для этого пользователя укажите nologin.

Запуск демона OpenVPN

Создайте каталог для записи журнала демона OpenVPN:

# mkdir /var/log/openvpn

Добавьте в файл /etc/rc.conf строки:

openvpn_enable="YES"
openvpn_configfile="/usr/local/etc/openvpn/server.conf"

Здесь указан путь к рабочему файлу конфигурации демона OpenVPN.

Запустите демон OpenVPN:

# /usr/local/etc/rc.d/openvpn start

При успешном запуске на сервере и клиенте OpenVPN должен появится интерфейс TUN. Убедитесь в этом с помощью команды ifconfig:

# ifconfig
 ...
 tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1500
 options=80000<LINKSTATE>
 inet6 fe80::20c:29ff:fe28:d4be%tun0 prefixlen 64 scopeid 0x3
 inet 10.15.0.1 --> 10.15.0.1 netmask 0xffffff00
 nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
 Opened by PID 493

Проверьте, что демон сервера OpenVPN занял порт 1194:

# sockstat | grep 1194

Если при запуске возникли ошибки, изучите журнал. Путь к файлу журнала задан в файле конфигурации демона OpenVPN.

Установка SQUID

В среде ОС FreeBSD мы выполнили установку Squid из портов:

# cd /usr/ports/www/squid33
# make install clean

Файл конфигурации Squid находится в каталоге /usr/local/etc/squid/ и называется squid.conf. В него надо внести такие же изменения, что и в случае установки для Debian Linux.

Для запуска добавьте в файл /etc/rc.conf строку:

squid_enable="YES"

Чтобы запустить Squid, используйте следующую команду:

/usr/local/etc/rc.d/squid start

Особенности установки клиента OpenVPN в Microsoft Windows

Для тех сотрудников, кто использует на своих рабочих станциях ОС Microsoft Windows, мы настроили доступ к серверу OpenVPN с помощью ПО OpenVPN-GUI. Дистрибутив OpenVPN-GUI можно скачать здесь.

Установка OpenVPN-GUI

Выберите вариант загрузки Windows Installer (64-bit) или Windows Installer (32-bit) в зависимости от разрядности вашей версии ОС Microsoft Windows. Далее запустите полученный файл и выполните установку по умолчанию. Файлы конфигурации, сертификаты и ключи необходимо записать в папку C:\Program Files\OpenVPN\config.

В папку C:\Program Files\OpenVPN\easy-rsa устанавливается версия программы Easy-RSA для Windows.

Краткую инструкцию по использованию Easy-RSA для Windows вы найдете в файле C:\Program Files\OpenVPN\easy-rsa\README.txt

Мы рассмотрим вариант, при котором запрос на сертификат создается на хосте Microsoft Windows, а затем передается через USB флэш-диск на хост удостоверяющего центра CA. Там на основании запроса создается подписанный файл сертификата и, опять же, через USB флэш-диск, передается на хост Microsoft Windows.

Создание запроса на сертификат

Перейдем к процедуре создания запроса на сертификат.

Прежде всего, запустите консоль с правами администратора. Для удобства вместо стандартной консоли Microsoft Windows мы использовали бесплатный эмулятор консоли ConEmu-Maximus5.

Запустив консоль, перейдите в каталог Easy-RSA и выполните команды:

cd C:\Program Files\OpenVPN\easy-rsa
init-config.bat
clean-all 

В результате будет создан каталог C:\Program Files\OpenVPN\easy-rsa\keys и файл vars.bat.

Отредактируйте в файле vars.bat строки по примеру, приведенному ниже, указав код своей страны KEY_COUNTRY и региона KEY_PROVINCE, название города KEY_CITY, компании KEY_ORG, адрес электронной почты KEY_EMAIL и название отдела KEY_OU:

set KEY_COUNTRY=RU
set KEY_PROVINCE=RU
set KEY_CITY=Moscow
set KEY_ORG=IT-Company
set KEY_EMAIL=develop@itcompany.ru
set KEY_CN=changeme
set KEY_NAME=changeme
set KEY_OU=IT

Создайте приватный ключ хоста и запрос на сертификат:

vars
build-ca
build-key client

Ответьте на вопросы, аналогичные тем, что задаются при создании ключей и сертификатов для узлов OpenVPN в Debian Linux или FreeBSD.

После этого в каталоге C:\Program Files\OpenVPN\easy-rsa\keys будет создан файл запроса сертификата client.csr, сертификат client.crt и файл приватного ключа клиента client.key.

Из этих файлов нам потребуются только два — запрос сертификата client.csr и приватный ключ client.key. Сертификат client.crt подписан приватным ключом хоста Microsoft Windows, созданным командой build-ca, и не подойдет для работы с нашим сервером OpenVPN. Тут необходим сертификат, созданный нашим удостоверяющим центром CA.

Получение сертификата от удостоверяющего центра CA

Скопируйте файл запроса сертификата client.csr через USB флэш-диск на хост удостоверяющего центра и создайте запрос, аналогично тому, как мы это делали для клиента OpenVPN на базе Debian Linux. Запишите полученный сертификат на USB флэш-диск, чтобы перенести его на хост Microsoft Windows.

Создание файла конфигурации клиента OpenVPN

Создайте файл конфигурации клиента OpenVPN в каталоге C:\Program Files\OpenVPN\config. Расширение имени этого файла должно быть ovpn. Вот пример нашего файла:

client
dev tun
proto udp
remote 192.168.0.54 1194
tls-client
ca "key/ca.crt"
cert "key/developer-w1.crt"
key "key/client.key"
tls-auth "key/ta.key" 1
comp-lzo
tun-mtu 1500
mssfix 1450
verb 3

Здесь предполагается, что мы скопировали в каталог C:\Program Files\OpenVPN\config\key следующие файлы:

  • ca.crt — сертификат удостоверяющего центра CA;
  • developer-w1.crt — сертификат хоста Microsoft Windows, подписанный удостоверяющим центром CA;
  • client.key — приватный ключ хоста Microsoft Windows;
  • ta.key — ключ HMAC для дополнительной защиты от DoS-атак и флуда, скопированный с сервера OpenVPN

Запуск OpenVPN-GUI

Запустите OpenVPN-GUI как обычное приложение Windows с помощью кнопки Пуск (существует также возможность запуска OpenVPN-GUI в качестве службы). В панели системных задач (в системном «трее», или в панели System Tray) появится значок OpenVPN-GUI в виде небольшого окна с замком.

Щелкните этот значок правой клавишей мыши и выберите имя файла конфигурации, который вы создали в каталоге C:\Program Files\OpenVPN\config. Если все настроено правильно, на экране появится окно соединения, в котором будут отображаться сообщения.

После успешного соединения изображение окна с замком станет зеленого цвета. Это означает, что канал VPN установлен. В случае возникновения проблем читайте сообщения в окне подключения, а также журнал сервера OpenVPN. В большинстве случаев проблемы связаны с ошибками при подготовке сертификатов и ключей.

Чтобы разъединить канал OpenVPN, щелкните значок OpenVPN-GUI правой клавишей мыши и выберите из меню строку Отключиться.

Полезные ссылки

Протокол Диффи — Хеллмана

HMAC

Шифрование

X.509

OpenVPN: создание сервера на Windows

Центр сертификации или удостоверяющий центр (Certification authority, CA)

Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку

Материал из Xgu.ru

Перейти к: навигация, поиск

Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.

Если вы считаете, что её стоило бы доработать как можно быстрее, пожалуйста, скажите об этом.

Автор: Сергей Черепенин

Короткий URL: openvpn/windows

Содержание

  • 1 Организация соединения с использованием статических ключей
  • 2 Создание сертификатов на Windows с использованием easy-rsa
  • 3 Создание сертификатов на Debian с использованием easy-rsa
  • 4 Настройка пула адресов для получения их клиентами
  • 5 Настройка парольной аутентификации системных пользователей для установки подключения
  • 6 Настройка OpenVPN для работы в качестве сервера
  • 7 Openvpn FreeBSD
  • 8 Дополнительная информация
  • 9 Материалы по OpenVPN на xgu.ru

[править] Организация соединения с использованием статических ключей

В данной главе рассматривается подготовка и организация vpn соединения с использованием статического ключа. В качестве сервера используется компьютер с операционной системой Debian GNU/Linux Etch на ядре 2.6.18-4-686, а в качестве клиента — Windows 2003 SP2.

Настройки сетевых интерфейсов сервера и клиента:

  • сервер
$ /sbin/ifconfig

eth0      Link encap:Ethernet  HWaddr 00:04:76:A1:EF:BB  
          inet addr:10.0.17.1  Bcast:10.255.255.255  Mask:255.0.0.0
          inet6 addr: fe80::204:76ff:fea1:efbb/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5663951 errors:0 dropped:0 overruns:1 frame:0
          TX packets:2928925 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1850432381 (1.7 GiB)  TX bytes:330532572 (315.2 MiB)
          Interrupt:169 

eth1      Link encap:Ethernet  HWaddr 00:60:08:20:7B:0B  
          inet addr:192.168.16.15  Bcast:192.168.16.255  Mask:255.255.255.0
          inet6 addr: fe80::260:8ff:fe20:7b0b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:104476 errors:0 dropped:0 overruns:0 frame:0
          TX packets:120582 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:19294593 (18.4 MiB)  TX bytes:48250297 (46.0 MiB)
          Interrupt:185 Base address:0xc400 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:64752 errors:0 dropped:0 overruns:0 frame:0
          TX packets:64752 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:43343011 (41.3 MiB)  TX bytes:43343011 (41.3 MiB)
  • клиент
C:\Documents and Settings\Administrator>ipconfig /all

Ethernet adapter Local Area Connection:

Connection-specific DNS Suffix  . : net.nt
Description . . . . . . . . . . . : 3Com EtherLink XL 10/100 PCI For Complete
PC Management NIC (3C905C-TX)
Physical Address. . . . . . . . . : 00-04-75-75-46-C1
DHCP Enabled. . . . . . . . . . . : Yes
Autoconfiguration Enabled . . . . : Yes
IP Address. . . . . . . . . . . . : 192.168.16.197
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.16.15
DHCP Server . . . . . . . . . . . : 192.168.16.15
DNS Servers . . . . . . . . . . . : 192.168.16.15
Lease Obtained. . . . . . . . . . : 12 июля 2011 г. 11:49:13
Lease Expires . . . . . . . . . . : 12 июля 2011 г. 11:59:13

Теперь необходимо проинсталлировать необходимое программное обеспечение принятым, для каждой операционной системы, способом.

На сервере под управлением ОС Debian GNU/Linux достаточно выполнить команду:

$ sudo apt-get install openvpn -y

Список файлов, входящих в состав пакета openvpn_2.0.9-4_i386.deb можно просмотреть с помощью команды:

$ sudo dpkg -L openvpn

Кроме этого, проверьте имеет ли Ваше ядро поддержку TUN/TAP устройств. Сделать это можно выполнив следующую команду:

$ grep CONFIG_TUN /boot/config-`uname -r`
CONFIG_TUN=m

Если Ваше ядро не поддерживает эти устройства:

$ grep CONFIG_TUN /boot/config-`uname -r`
# CONFIG_TUN is not set

то для продолжения Вам необходимо скомпилировать этот модуль.

На клиенте, под управлением ОС Windows 2003 SP2, необходимо в первую очередь получить инсталляционный файл. Скачать его можно с помощью ссылки. На момент написания статьи текущая версия OpenVPN — 2.0.9. Затем необходимо проинсталлировать полученное программное обеспечение обычным вызовом .exe файла. Во время инсталляции оставьте все значения по умолчанию.

После установки необходимо сгенерировать статический ключ на любом компьютере — сервере или клиенте, скопировать его на другой компьютер и отредактировать конфигурационные файлы сервера и клиента.

  • Для генерации статического ключа в ОС Debian необходимо выполнить следующую команду:
 
$ sudo openvpn --genkey --secret /etc/openvpn/static.key
  • Для генерации статического ключа в ОС Windows необходимо запустить следующую команду: Пуск -> Программы -> OpenVPN -> Generate a static OpenVPN key. В результате будет создан файл C:\Program Files\OpenVPN\config\key.txt. Затем необходимо скопировать этот ключ на другого участника соединения.

Далее отредактируйте конфигурационные файлы сервера и клиента:

  • конфигурационный файл сервера /etc/openvpn/sample.conf:
cat  /etc/openvpn/sample.conf 
dev tap
ifconfig 172.16.0.1 255.255.255.0
secret key.txt
comp-lzo
  • конфигурационный файл клиента C:\Program Files\OpenVPN\config\sample.ovpn:
remote 192.168.16.15
dev tap
ifconfig 172.16.0.2 255.255.255.0
secret key.txt
comp-lzo

Из указанных выше конфигурационных файлов видно, что различие серверного и клиентского конфигов очень мало, и сервером будет тот компьютер, у которого не указан параметр remote

Выполним команду на сервере:

sudo openvpn --config /etc/openvpn/sample.conf
Tue Jul  12 11:54:44 2011 OpenVPN 2.0.9 i486-pc-linux-gnu [SSL] [LZO] [EPOLL] built on Jan 21 2007
Tue Jul  12 11:54:44 2011 IMPORTANT: OpenVPN's default port number is now 1194, based on an official port number assignment by IANA.  OpenVPN 2.0-beta16 and earlier used 5000 as the default port.
Tue Jul  12 11:54:44 2011 WARNING: file 'key.txt' is group or others accessible
Tue Jul  12 11:54:44 2011 TUN/TAP device tap0 opened
Tue Jul  12 11:54:44 2011 /sbin/ifconfig tap0 172.16.0.1 netmask 255.255.255.0 mtu 1500 broadcast 172.16.0.255
Tue Jul  12 11:54:44 2011 UDPv4 link local (bound): [undef]:1194
Tue Jul  12 11:54:44 2011 UDPv4 link remote: [undef]
Tue Jul  12 11:54:57 2011 Peer Connection Initiated with 192.168.16.197:1194
Tue Jul  12 11:54:58 2011 Initialization Sequence Completed

Затем на windows:

Запустить сервис OpenVPN под Windows можно и из cmd:

C:\Documents and Settings\Administrator>cd "c:\Program Files\OpenVPN\config"
C:\Program Files\OpenVPN\config>openvpn --config sample.ovpn
Tue Jul 12 12:52:24 2011 us=640078 Current Parameter Settings:
Tue Jul 12 12:52:24 2011 us=640364   config = 'sample.ovpn'
Tue Jul 12 12:52:24 2011 us=640535   mode = 0
Tue Jul 12 12:52:24 2011 us=640688   show_ciphers = DISABLED
Tue Jul 12 12:52:24 2011 us=640852   show_digests = DISABLED
Tue Jul 12 12:52:24 2011 us=641022   show_engines = DISABLED
Tue Jul 12 12:52:24 2011 us=641192   genkey = DISABLED
Tue Jul 12 12:52:24 2011 us=641358   key_pass_file = '[UNDEF]'
Tue Jul 12 12:52:24 2011 us=641529   show_tls_ciphers = DISABLED
Tue Jul 12 12:52:24 2011 us=641706   proto = 0
Tue Jul 12 12:52:24 2011 us=641863 NOTE: --mute triggered...
Tue Jul 112 12:52:24 2011 us=642076 178 variation(s) on previous 10 message(s) su
ppressed by --mute
Tue Jul 12 12:52:24 2011 us=642346 OpenVPN 2.0.9 Win32-MinGW [SSL] [LZO] built o
n Oct  1 2006
Tue Jul 12 12:52:24 2011 us=643308 IMPORTANT: OpenVPN's default port number is n
ow 1194, based on an official port number assignment by IANA.  OpenVPN 2.0-beta1
6 and earlier used 5000 as the default port.
Tue Jul 12 12:52:24 2011 us=643684 WARNING: --ping should normally be used with
--ping-restart or --ping-exit
Tue Jul 12 12:52:24 2011 us=644588 Static Encrypt: Cipher 'BF-CBC' initialized w
ith 128 bit key
Tue Jul 12 12:52:24 2011 us=644902 Static Encrypt: Using 160 bit message hash 'S
HA1' for HMAC authentication
Tue Jul 12 12:52:24 2011 us=645257 Static Decrypt: Cipher 'BF-CBC' initialized w
ith 128 bit key
Tue Jul 12 12:52:24 2011 us=645528 Static Decrypt: Using 160 bit message hash 'S
HA1' for HMAC authentication
Tue Jul 12 12:52:24 2011 us=645839 LZO compression initialized
Tue Jul 12 12:52:24 2011 us=650456 TAP-WIN32 device [Local Area Connection 2] op
ened: \\.\Global\{59380ED2-2769-41B0-97F6-C4BC571471CA}.tap
Tue Jul 12 12:52:24 2011 us=650817 TAP-Win32 Driver Version 8.4
Tue Jul 12 12:52:24 2011 us=651030 TAP-Win32 MTU=1500
Tue Jul 12 12:52:24 2011 us=651244 Notified TAP-Win32 driver to set a DHCP IP/ne
tmask of 172.16.0.2/255.255.255.0 on interface {59380ED2-2769-41B0-97F6-C4BC5714
71CA} [DHCP-serv: 172.16.0.0, lease-time: 31536000]
Tue Jul 12 12:52:24 2011 us=687896 Successful ARP Flush on interface [65540] {59
380ED2-2769-41B0-97F6-C4BC571471CA}
Tue Jul 12 12:52:24 2011 us=694501 Data Channel MTU parms [ L:1577 D:1450 EF:45
EB:135 ET:32 EL:0 AF:3/1 ]
Tue Jul 12 12:52:24 2011 us=698395 Local Options String: 'V4,dev-type tap,link-m
tu 1577,tun-mtu 1532,proto UDPv4,ifconfig 172.16.0.0 255.255.255.0,comp-lzo,ciph
er BF-CBC,auth SHA1,keysize 128,secret'
Tue Jul 12 12:52:24 2011 us=704162 Expected Remote Options String: 'V4,dev-type
tap,link-mtu 1577,tun-mtu 1532,proto UDPv4,ifconfig 172.16.0.0 255.255.255.0,com
p-lzo,cipher BF-CBC,auth SHA1,keysize 128,secret'
Tue Jul 12 12:52:24 2011 us=710006 Local Options hash (VER=V4): '94889dd0'
Tue Jul 12 12:52:24 2011 us=712199 Expected Remote Options hash (VER=V4): '94889
dd0'
Tue Jul 12 12:52:24 2011 us=716063 Socket Buffers: R=[8192->8192] S=[8192->8192]
Tue Jul 12 12:52:24 2011 us=720016 UDPv4 link local (bound): [undef]:1194
Tue Jul 12 12:52:24 2011 us=722180 UDPv4 link remote: 192.168.16.15:1194
Tue Jul 12 12:52:30 2011 us=303168 Peer Connection Initiated with 192.168.16.15:
1194
Tue Jul 12 12:52:31 2011 us=54350 TEST ROUTES: 0/0 succeeded len=-1 ret=1 a=0 u/
d=up
Tue Jul 12 12:52:31 2011 us=58342 Initialization Sequence Completed

Теперь проверьте состояние интерфейсов при помощи команды /sbin/ifconfig на сервере:

/sbin/ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:04:76:A1:EF:BB  
          inet addr:10.0.17.1  Bcast:10.255.255.255  Mask:255.0.0.0
          inet6 addr: fe80::204:76ff:fea1:efbb/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5663951 errors:0 dropped:0 overruns:1 frame:0
          TX packets:2928925 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1850432381 (1.7 GiB)  TX bytes:330532572 (315.2 MiB)
          Interrupt:169 

eth1      Link encap:Ethernet  HWaddr 00:60:08:20:7B:0B  
          inet addr:192.168.16.15  Bcast:192.168.16.255  Mask:255.255.255.0
          inet6 addr: fe80::260:8ff:fe20:7b0b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:104476 errors:0 dropped:0 overruns:0 frame:0
          TX packets:120582 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:19294593 (18.4 MiB)  TX bytes:48250297 (46.0 MiB)
          Interrupt:185 Base address:0xc400 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:64752 errors:0 dropped:0 overruns:0 frame:0
          TX packets:64752 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:43343011 (41.3 MiB)  TX bytes:43343011 (41.3 MiB)

tap0      Link encap:Ethernet  HWaddr 86:FA:EC:53:C3:84  
          inet addr:172.16.0.1  Bcast:172.16.0.255  Mask:255.255.255.0
          inet6 addr: fe80::84fa:ecff:fe53:c384/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:83 errors:0 dropped:0 overruns:0 frame:0
          TX packets:63 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:10893 (10.6 KiB)  TX bytes:9344 (9.1 KiB)

И на windows-клиенте при помощи команды ipconfig /all:

C:\Documents and Settings\Administrator>ipconfig /all

Windows IP Configuration

Host Name . . . . . . . . . . . . : win0
Primary Dns Suffix  . . . . . . . :
Node Type . . . . . . . . . . . . : Unknown
IP Routing Enabled. . . . . . . . : No
WINS Proxy Enabled. . . . . . . . : No
DNS Suffix Search List. . . . . . : net.nt
Ethernet adapter Local Area Connection:

Connection-specific DNS Suffix  . : net.nt
Description . . . . . . . . . . . : 3Com EtherLink XL 10/100 PCI For Complete
PC Management NIC (3C905C-TX)
Physical Address. . . . . . . . . : 00-04-75-75-46-C1
DHCP Enabled. . . . . . . . . . . : Yes
Autoconfiguration Enabled . . . . : Yes
IP Address. . . . . . . . . . . . : 192.168.16.197
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.16.15
DHCP Server . . . . . . . . . . . : 192.168.16.15
DNS Servers . . . . . . . . . . . : 192.168.16.15
Lease Obtained. . . . . . . . . . : 12 июля 2011 г. 12:14:14
Lease Expires . . . . . . . . . . : 12 июля 2011 г. 12:24:14

Ethernet adapter Local Area Connection 2:
Connection-specific DNS Suffix  . :
Description . . . . . . . . . . . : TAP-Win32 Adapter V8
Physical Address. . . . . . . . . : 00-FF-59-38-0E-D2
DHCP Enabled. . . . . . . . . . . : Yes
Autoconfiguration Enabled . . . . : Yes
IP Address. . . . . . . . . . . . : 172.16.0.2
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . :
DHCP Server . . . . . . . . . . . : 172.16.0.0
Lease Obtained. . . . . . . . . . : 12 июля 2011 г. 12:15:23
Lease Expires . . . . . . . . . . : 12 июля 2011 г. 12:15:23

И проверьте только что установленный туннель :

ping 172.16.0.2 -c 4
PING 172.16.0.2 (172.16.0.2) 56(84) bytes of data.
64 bytes from 172.16.0.2: icmp_seq=1 ttl=128 time=4.57 ms
64 bytes from 172.16.0.2: icmp_seq=2 ttl=128 time=0.813 ms
64 bytes from 172.16.0.2: icmp_seq=3 ttl=128 time=0.950 ms
64 bytes from 172.16.0.2: icmp_seq=4 ttl=128 time=1.11 ms

--- 172.16.0.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3002ms
rtt min/avg/max/mdev = 0.813/1.863/4.578/1.571 ms

На этом организация vpn соединения с использованием статических ключей завершена.

[править] Создание сертификатов на Windows с использованием easy-rsa

В первую очередь необходимо создать каталог c:\Progam Files\OpenVPN\easy-rsa\keys и скопировать в него файлы serial.start и index.txt.start без суффикса .start. Сделать это можно при помощи следующей команды запущенной в cmd:

C:\Documents and Settings\Administrator>cd "c:\Program Files\OpenVPN\easy-rsa" && mkdir keys && copy serial.start keys\serial && copy index.txt.start keys\index.txt
        1 file(s) copied.
        1 file(s) copied.

Затем необходимо скопировать файлы vars.bat.sample и openssl.cnf.sample в vars.bat и openssl.cnf соответственно. Сделать это можно, выполнив batch файл C:\Program Files\OpenVPN\easy-rsa\init-config.bat при помощи следующей команды:

C:\Documents and Settings\Administrator>cd "c:\Program Files\OpenVPN\easy-rsa" && init-config.bat
C:\Program Files\OpenVPN\easy-rsa>copy vars.bat.sample vars.bat
        1 file(s) copied.
C:\Program Files\OpenVPN\easy-rsa>copy openssl.cnf.sample openssl.cnf
        1 file(s) copied.

Файл openssl.cnf — >>>>

Файл vars.bat ——>>>

Затем необходимо отредактировать файл vars.bat:

@echo off
set HOME=%ProgramFiles%\OpenVPN\easy-rsa\
set KEY_CONFIG=openssl.cnf
set KEY_DIR=keys
set KEY_SIZE=1024
set KEY_COUNTRY=UA
set KEY_PROVINCE=Kiev
set KEY_CITY=Kiev
set KEY_ORG=TechExpert
set KEY_EMAIL=otradnyi@mail.ru

Затем необходимо внести изменения в среду окружения согласно файла vars.bat. Сделать это можно из cmd при помощи следующей команды:

C:\Documents and Settings\Administrator>cd "c:\Program Files\OpenVPN\easy-rsa" && vars.bat
  • Затем необходимо создать Diffie-Hellman key:
C:\Program Files\OpenVPN\easy-rsa>vars.bat
C:\Program Files\OpenVPN\easy-rsa>build-dh.bat
Loading 'screen' into random state - done
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
..................+...............................................................................+..........+.......................
.....+.....+.............+........................................................+.........+........................................
+.........+...................................................................................+......................................
.................................................................+...................................................+...............
.........+............................................................................+........+............................+........
....................+........................................+.........+............................+................................
.......................+...........+.................................................................+..........+....................
............................................+......+.........................+.......................+.....................+.........
........................................................+....+.......................................................................
.............................+..........................................+............................................................
..................................+...........+....................................................+.................................
.............................................................+......................................+.............................+..
.................................................................................................................+...................
.....++*++*++*

В результате в каталоге C:\Program Files\OpenVPN\easy-rsa\keys появится файл dh1024.pem:

C:\Program Files\OpenVPN\easy-rsa>dir keys
Volume in drive C has no label.
Volume Serial Number is 508A-A105
Directory of C:\Program Files\OpenVPN\easy-rsa\keys
13.07.2011  13:22    <DIR>          .
13.07.2011  13:22    <DIR>          ..
13.07.2011  13:22               245 dh1024.pem
13.07.2011  13:06                 0 index.txt
13.07.2011  13:06                 3 serial
               3 File(s)            248 bytes
               2 Dir(s)   7 517 777 920 bytes free
  • Теперь необходимо создать Certificate Authority. Создается он путем выполнения файла build-ca.bat:
C:\Program Files\OpenVPN\easy-rsa>vars.bat



C:\Program Files\OpenVPN\easy-rsa>build-ca.bat
Loading 'screen' into random state - done
Generating a 1024 bit RSA private key
.......++++++
...................++++++
writing new private key to 'keys\ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [UA]:UA
State or Province Name (full name) [Kiev]:Kiev
Locality Name (eg, city) [Kiev]:Kiev
Organization Name (eg, company) [TechExpert]:TechExpert
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:win0
Email Address [otradnyi@mail.ru]:otradnyi@mail.ru

В результате выполнения этой команды в каталоге keys было создано два файла ca.crt и ca.key:

C:\Program Files\OpenVPN\easy-rsa>dir keys
Volume in drive C has no label.
Volume Serial Number is 508A-A105
Directory of C:\Program Files\OpenVPN\easy-rsa\keys
13.07.2011  13:38    <DIR>          .
13.07.2011  13:38    <DIR>          ..
13.07.2011  13:38             1 224 ca.crt
13.07.2011  13:38               887 ca.key
13.07.2011  13:22               245 dh1024.pem
13.07.2011  13:06                 0 index.txt
13.07.2011  13:06                 3 serial
               5 File(s)          2 359 bytes
               2 Dir(s)   7 517 769 728 bytes free

ca.crt —>>>

ca.key —->>>

  • Далее необходимо создать ключи сервера и клиента.

Для этого необходимо выполнить файл build-key-server.bat с параметром имени сервера, в нашем случае это win0:

C:\Program Files\OpenVPN\easy-rsa>vars.bat
C:\Program Files\OpenVPN\easy-rsa>build-key-server.bat win0
Loading 'screen' into random state - done
Generating a 1024 bit RSA private key
............................................++++++
....................++++++
writing new private key to 'keys\win0.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [UA]:
State or Province Name (full name) [Kiev]:
Locality Name (eg, city) [Kiev]:
Organization Name (eg, company) [TechExpert]:
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:win0
Email Address [otradnyi@mail.ru]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from openssl.cnf
Loading 'screen' into random state - done
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'UA'
stateOrProvinceName   :PRINTABLE:'Kiev'
localityName          :PRINTABLE:'Kiev'
organizationName      :PRINTABLE:'TechExpert'
organizationalUnitName:PRINTABLE:'IT'
commonName            :PRINTABLE:'win0'
emailAddress          :IA5STRING:'otradnyi@mail.ru'
Certificate is to be certified until Jul  13 11:25:57 2017 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

В результате в каталоге:

C:\Program Files\OpenVPN\easy-rsa>dir keys
Volume in drive C has no label.
Volume Serial Number is 508A-A105
Directory of C:\Program Files\OpenVPN\easy-rsa\keys
13.07.2011  14:26    <DIR>          .
13.07.2011  14:26    <DIR>          ..
13.07.2011  14:26             3 629 01.pem
13.07.2011  13:38             1 224 ca.crt
13.07.2011  13:38               887 ca.key
13.07.2011  13:22               245 dh1024.pem
13.07.2011  14:26                99 index.txt
13.07.2011  14:26                21 index.txt.attr
13.07.2011  14:26                 3 serial
13.07.2011  14:26             3 629 win0.crt
13.07.2011  14:25               680 win0.csr
13.07.2011  14:25               887 win0.key
               10 File(s)         11 304 bytes
               2 Dir(s)   7 517 663 232 bytes free
  • Теперь создадим ключ клиента:
C:\Program Files\OpenVPN\easy-rsa>build-key.bat roman
Loading 'screen' into random state - done
Generating a 1024 bit RSA private key
........++++++
........++++++
writing new private key to 'keys\roman.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [UA]:
State or Province Name (full name) [Kiev]:
Locality Name (eg, city) [Kiev]:
Organization Name (eg, company) [TechExpert]:
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:roman
Email Address [otradnyi@mail.ru]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from openssl.cnf
Loading 'screen' into random state - done
DEBUG[load_index]: unique_subject = "yes"
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'UA'
stateOrProvinceName   :PRINTABLE:'Kiev'
localityName          :PRINTABLE:'Kiev'
organizationName      :PRINTABLE:'TechExpert'
organizationalUnitName:PRINTABLE:'IT'
commonName            :PRINTABLE:'roman'
emailAddress          :IA5STRING:'otradnyi@mail.ru'
Certificate is to be certified until Jul  13 11:37:01 2017 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

В результате в каталоге:

C:\Program Files\OpenVPN\easy-rsa>dir keys
Volume in drive C has no label.
Volume Serial Number is 508A-A105
Directory of C:\Program Files\OpenVPN\easy-rsa\keys
13.07.2011  14:37    <DIR>          .
13.07.2011  14:37    <DIR>          ..
13.07.2011  14:26             3 629 01.pem
13.07.2011  14:37             3 531 02.pem
13.07.2011  13:38             1 224 ca.crt
13.07.2011  13:38               887 ca.key
13.07.2011  13:22               245 dh1024.pem
13.07.2011  14:37               199 index.txt
13.07.2011  14:37                21 index.txt.attr
13.07.2011  14:37                 3 serial
13.07.2011  14:37             3 531 roman.crt
13.07.2011  14:37               680 roman.csr
13.07.2011  14:37               887 roman.key
13.07.2011  14:26             3 629 win0.crt
13.07.2011  14:25               680 win0.csr
13.07.2011  14:25               887 win0.key
              14 File(s)         20 033 bytes
               2 Dir(s)   7 517 650 944 bytes free
  • Теперь необходимо скопировать roman.crt, roman.key и ca.crt в каталог /etc/openvpn.
  • mkdir /etc/openvpn/keys
  • Теперь необходимо поправить конфиги:

—Винда:

###remote 192.168.16.15
###secret key.txt

dev tap

ifconfig 172.16.0.2 255.255.255.0

###comp-lzo
tls-server
dh keys/dh1024.pem
ca keys/ca.crt
cert keys/win0.crt
key keys/win0.key

— Linux

remote 192.168.16.197
dev tap
tls-client
ifconfig 172.168.0.1 255.255.255.0
dh dh1024.pem
ca ca.crt
cert roman.crt
key roman.key

Если при старте сервера на Windows возникнет ошибка:

system library:fopen:No such file or directory

Необходимо переместить каталог c:\Progam Files\OpenVPN\easy-rsa\keys в с:\keys и после этого модифицировать конфиг:

dev tap
ifconfig 172.16.0.2 255.255.255.0
tls-server
dh c:\\keys\\dh1024.pem
ca c:\\keys\\ca.crt
cert c:\\keys\\win0.crt
key c:\\keys\\win0.key

Теперь запустим сервер vpn из cmd под Windows с помощью следующей команды:

C:\Documents and Settings\Administrator>openvpn --config "c:\Program Files\OpenVPN\config\sample.ovpn"
Tue Jul 12 17:02:23 2011 us=612115 Current Parameter Settings:
Tue Jul 12 17:02:23 2011 us=612409   config = 'c:\Program Files\OpenVPN\config\sample.ovpn'
Tue Jul 12 17:02:23 2011 us=612634   mode = 0
Tue Jul 12 17:02:23 2011 us=612791   show_ciphers = DISABLED
Tue Jul 12 17:02:23 2011 us=612953   show_digests = DISABLED
Tue Jul 12 17:02:23 2011 us=613112   show_engines = DISABLED
Tue Jul 12 17:02:23 2011 us=613270   genkey = DISABLED
Tue Jul 12 17:02:23 2011 us=613427   key_pass_file = '[UNDEF]'
Tue Jul 12 17:02:23 2011 us=613591   show_tls_ciphers = DISABLED
Tue Jul 12 17:02:23 2011 us=613753   proto = 0
Tue Jul 12 17:02:23 2011 us=613910 NOTE: --mute triggered...
Tue Jul 12 17:02:23 2011 us=614111 178 variation(s) on previous 10 message(s) suppressed by --mute
Tue Jul 12 17:02:23 2011 us=614331 OpenVPN 2.0.9 Win32-MinGW [SSL] [LZO] built on Oct  1 2006
Tue Jul 12 17:02:23 2011 us=615260 IMPORTANT: OpenVPN's default port number is now 1194, based on an official port number assignment
.  OpenVPN 2.0-beta16 and earlier used 5000 as the default port.
Tue Jul 12 17:02:23 2011 us=615596 WARNING: --ping should normally be used with --ping-restart or --ping-exit
Tue Jul 12 17:02:23 2011 us=671943 Diffie-Hellman initialized with 1024 bit key
Tue Jul 12 17:02:23 2011 us=675391 Control Channel MTU parms [ L:1573 D:138 EF:38 EB:0 ET:0 EL:0 ]
Tue Jul 12 17:02:23 2011 us=680475 TAP-WIN32 device [Local Area Connection 4] opened: \\.\Global\{DDA59CFF-B7AE-4F0E-91DA-C111AF5139B
Tue Jul 12 17:02:23 2011 us=680823 TAP-Win32 Driver Version 8.4
Tue Jul 12 17:02:23 2011 us=681026 TAP-Win32 MTU=1500
Tue Jul 12 17:02:23 2011 us=681234 Notified TAP-Win32 driver to set a DHCP IP/netmask of 172.16.0.2/255.255.255.0 on interface {DDA59
E-4F0E-91DA-C111AF5139B5} [DHCP-serv: 172.16.0.0, lease-time: 31536000]
Tue Jul 12 17:02:23 2011 us=716919 Successful ARP Flush on interface [196612] {DDA59CFF-B7AE-4F0E-91DA-C111AF5139B5}
Tue Jul 12 17:02:23 2011 us=725976 Data Channel MTU parms [ L:1573 D:1450 EF:41 EB:4 ET:32 EL:0 ]
Tue Jul 12 17:02:23 2011 us=726302 Local Options String: 'V4,dev-type tap,link-mtu 1573,tun-mtu 1532,proto UDPv4,ifconfig 172.16.0.0
.255.0,cipher BF-CBC,auth SHA1,keysize 128,key-method 2,tls-server'
Tue Jul 12 17:02:23 2011 us=726626 Expected Remote Options String: 'V4,dev-type tap,link-mtu 1573,tun-mtu 1532,proto UDPv4,ifconfig 1
.0 255.255.255.0,cipher BF-CBC,auth SHA1,keysize 128,key-method 2,tls-client'
Tue Jul 12 17:02:23 2011 us=726987 Local Options hash (VER=V4): '79e31c21'
Tue Jul 12 17:02:23 2011 us=727192 Expected Remote Options hash (VER=V4): '5a258ee1'
Tue Jul 12 17:02:23 2011 us=727475 Socket Buffers: R=[8192->8192] S=[8192->8192]
Tue Jul 12 17:02:23 2011 us=727723 UDPv4 link local (bound): [undef]:1194
Tue Jul 12 17:02:23 2011 us=727898 UDPv4 link remote: [undef]

Затем на клиенте дадим команду:

sudo openvpn --config /etc/openvpn/sample.conf

И смотрим на продолжение вывода на сервере:

Tue Jul 12 17:05:23 2011 us=993139 TLS: Initial packet from 192.168.16.15:1194, sid=76cd5180 622a0d09
Tue Jul 12 17:05:24 2011 us=505011 VERIFY OK: depth=1, /C=UA/ST=Kiev/L=Kiev/O=TechExpert/OU=IT/CN=win0/emailAddress=otradnyi@mail.ru
Tue Jul 12 17:05:24 2011 us=506441 VERIFY OK: depth=0, /C=UA/ST=Kiev/O=TechExpert/OU=IT/CN=roman/emailAddress=otradnyi@mail.ru
Tue Jul 12 17:05:24 2011 us=567168 Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key
Tue Jul 12 17:05:24 2011 us=567435 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Tue Jul 12 17:05:24 2011 us=567739 Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key
Tue Jul 12 17:05:24 2011 us=567977 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Tue Jul 12 17:05:24 2011 us=569802 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA
Tue Jul 12 17:05:24 2011 us=570075 [roman] Peer Connection Initiated with 192.168.16.15:1194
Tue Jul 12 17:05:26 2011 us=153485 TEST ROUTES: 0/0 succeeded len=-1 ret=1 a=0 u/d=up
Tue Jul 12 17:05:26 2011 us=153796 Initialization Sequence Completed

И проверяем

ping 172.16.0.2 -c 4
PING 172.16.0.2 (172.16.0.2) 56(84) bytes of data.
64 bytes from 172.16.0.2: icmp_seq=1 ttl=128 time=8.91 ms
64 bytes from 172.16.0.2: icmp_seq=2 ttl=128 time=1.00 ms
64 bytes from 172.16.0.2: icmp_seq=3 ttl=128 time=1.23 ms
64 bytes from 172.16.0.2: icmp_seq=4 ttl=128 time=1.34 ms

[править] Создание сертификатов на Debian с использованием easy-rsa

ls -l /usr/share/doc/openvpn/examples/easy-rsa/
итого 80
drwxr-xr-x 2 root root 4096 2011-07-13 00:18 2.0
-rwxr-xr-x 1 root root  242 2011-07-13 13:06 build-ca
-rwxr-xr-x 1 root root  228 2011-07-13 13:06 build-dh
-rwxr-xr-x 1 root root  529 2011-07-13 13:06 build-inter
-rwxr-xr-x 1 root root  516 2011-07-13 13:06 build-key
-rwxr-xr-x 1 root root  424 2011-07-13 13:06 build-key-pass
-rwxr-xr-x 1 root root  695 2011-07-13 13:06 build-key-pkcs12
-rwxr-xr-x 1 root root  662 2011-07-13 13:06 build-key-server
-rwxr-xr-x 1 root root  466 2011-07-13 13:06 build-req
-rwxr-xr-x 1 root root  402 2011-07-13 13:06 build-req-pass
-rwxr-xr-x 1 root root  280 2011-07-13 13:06 clean-all
-rw-r--r-- 1 root root  264 2011-07-13 13:06 list-crl
-rw-r--r-- 1 root root  268 2011-07-13 13:06 make-crl
-rw-r--r-- 1 root root 7487 2011-07-13 13:06 openssl.cnf
-rw-r--r-- 1 root root 2619 2011-07-13 13:06 README.gz
-rw-r--r-- 1 root root  268 2011-07-13 13:06 revoke-crt
-rwxr-xr-x 1 root root  593 2011-07-13 13:06 revoke-full
-rwxr-xr-x 1 root root  411 2011-07-13 13:06 sign-req
-rw-r--r-- 1 root root 1266 2011-07-13 13:06 vars
sudo mkdir /usr/share/doc/openvpn/examples/easy-rsa/keys
sudo touch /usr/share/doc/openvpn/examples/easy-rsa/keys/index.txt
sudo touch /usr/share/doc/openvpn/examples/easy-rsa/keys/serial
sudo sh -c "echo 01 > /usr/share/doc/openvpn/examples/easy-rsa/keys/serial"
egrep -v '^\ *$|^#' vars

export D=`pwd`
export KEY_CONFIG=$D/openssl.cnf
export KEY_DIR=$D/keys
echo NOTE: when you run ./clean-all, I will be doing a rm -rf on $KEY_DIR
export KEY_SIZE=1024
export KEY_COUNTRY=UA
export KEY_PROVINCE=Kiev
export KEY_CITY=Kiev
export KEY_ORG="TechExpert"
export KEY_EMAIL="otradnyi@mail.ru"
# . vars

NOTE: when you run ./clean-all, I will be doing a rm -rf on /usr/share/doc/openvpn/examples/easy-rsa/keys
# echo $KEY_
$KEY_CITY      $KEY_COUNTRY   $KEY_EMAIL     $KEY_PROVINCE
$KEY_CONFIG    $KEY_DIR       $KEY_ORG       $KEY_SIZE

# echo $KEY_CITY
Kiev

# echo $KEY_CONFIG
/usr/share/doc/openvpn/examples/easy-rsa/openssl.cnf
# ./build-dh
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
..................................................+.+.............
..................................................................
........................................+..+......................
............+........+............................................
........+.........................................+...............
...............................................+..................
..................................................................
..................................................................
..........................+.......................................
...................................................+..............
....+.......................................................+.....
.......................................+...........+..............
....+........+....................................................
..................+........+...............+......................
..................+...............................................
........................................................+.......+.
...................................+..........+....+..........+...
...............+..................................+...............
.........................................................+........
....................+...++*++*++*
# ./build-ca
Generating a 1024 bit RSA private key
.....................................................++++++
..........++++++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [UA]:
State or Province Name (full name) [Kiev]:
Locality Name (eg, city) [Kiev]:
Organization Name (eg, company) [TechExpert]:
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:roman
Email Address [otradnyi@mail.ru]:
# ls keys/
ca.crt  ca.key  dh1024.pem  index.txt  serial
# ./build-key-server roman
Generating a 1024 bit RSA private key
.............++++++
........++++++
writing new private key to 'roman.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [UA]:
State or Province Name (full name) [Kiev]:
Locality Name (eg, city) [Kiev]:
Organization Name (eg, company) [TechExpert]:
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:roman
Email Address [otradnyi@mail.ru]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /usr/share/doc/openvpn/examples/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'UA'
stateOrProvinceName   :PRINTABLE:'Kiev'
localityName          :PRINTABLE:'Kiev'
organizationName      :PRINTABLE:'TechExpert'
organizationalUnitName:PRINTABLE:'IT'
commonName            :PRINTABLE:'roman'
emailAddress          :IA5STRING:'otradnyi@mail.ru'
Certificate is to be certified until Jul  13 09:00:09 2017 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
# ls keys/
01.pem  ca.crt  ca.key  dh1024.pem  index.txt  index.txt.attr  index.txt.old  serial  serial.old  roman.crt  roman.csr  roman.key
# ./build-key student
Generating a 1024 bit RSA private key
.++++++
....................++++++
writing new private key to 'student.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [UA]:
State or Province Name (full name) [Kiev]:
Locality Name (eg, city) [Kiev]:
Organization Name (eg, company) [TechExpert]:
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:student
Email Address [otradnyi@mail.ru]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /usr/share/doc/openvpn/examples/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'UA'
stateOrProvinceName   :PRINTABLE:'Kiev'
localityName          :PRINTABLE:'Kiev'
organizationName      :PRINTABLE:'TechExpert'
organizationalUnitName:PRINTABLE:'IT'
commonName            :PRINTABLE:'student'
emailAddress          :IA5STRING:'otradnyi@mail.ru'
Certificate is to be certified until Jul  13 10:06:23 2017 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
cp keys/student1.crt ; keys/student1.key ; keys/ca.crt и keys/dh1024.pem на Windows

Конфиг сервера:

# cat /etc/openvpn/student1.conf
dev tap
ifconfig 172.16.0.1 255.255.255.0
tls-server
dh keys/dh1024.pem
ca keys/ca.crt
cert keys/roman.crt
key  keys/roman.key

Конфиг клиента:

dev tap
tls-client
dh c:\\keys\\dh1024.pem
ca c:\\keys\\ca.crt
cert c:\\keys\\student.crt
key c:\\keys\\student.key
ifconfig 172.16.0.2 255.255.255.0

Запуск openvpn на сервере:

# openvpn --config /etc/openvpn/student1.conf
Wed Jul  13 13:11:59 2011 OpenVPN 2.0.9 i486-pc-linux-gnu [SSL] [LZO] [EPOLL] built on Jan 21 2007
Wed Jul  13 13:11:59 2011 IMPORTANT: OpenVPN's default port number is now 1194, based on an official port number assignment by IANA.  OpenVPN 2.0-beta16 and earlier used 5000 as the default port.
Wed Jul  13 13:12:00 2011 TUN/TAP device tap0 opened
Wed Jul  13 13:12:00 2011 /sbin/ifconfig tap0 172.16.0.1 netmask 255.255.255.0 mtu 1500 broadcast 172.16.0.255
Wed Jul  13 13:12:00 2011 UDPv4 link local (bound): [undef]:1194
Wed Jul  13 13:12:00 2011 UDPv4 link remote: [undef]

Запуск на Windows клиенте из cmd:

C:\Documents and Settings\Administrator>openvpn --config "c:\Program Files\OpenV
PN\config\client.ovpn"

Проверка:

# ping 172.16.0.2 -c 4
PING 172.16.0.2 (172.16.0.2) 56(84) bytes of data.
64 bytes from 172.16.0.2: icmp_seq=1 ttl=128 time=3.72 ms
64 bytes from 172.16.0.2: icmp_seq=2 ttl=128 time=1.35 ms
64 bytes from 172.16.0.2: icmp_seq=3 ttl=128 time=1.44 ms
64 bytes from 172.16.0.2: icmp_seq=4 ttl=128 time=1.49 ms

--- 172.16.0.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3052ms
rtt min/avg/max/mdev = 1.353/2.004/3.727/0.996 ms

# ifconfig tap0
tap0      Link encap:Ethernet  HWaddr 42:FC:5B:E3:33:D2
          inet addr:172.16.0.1  Bcast:172.16.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:42 errors:0 dropped:0 overruns:0 frame:0
          TX packets:11 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:6199 (6.0 KiB)  TX bytes:902 (902.0 b)

[править] Настройка пула адресов для получения их клиентами

Для этого необходимо использовать tun устройство или с использованием tap устройства необходимо будет прописывать для каждого клиента адрес и маску:

  • на сервере:
# cat /etc/openvpn/student1.conf
dev tap
ifconfig 172.16.0.1 255.255.0.0.
ifconfig-pool 172.16.0.2 172.16.0.253 255.255.0.0
mode server
tls-server
dh keys/dh1024.pem
ca keys/ca.crt
cert keys/serzh.crt
key  keys/serzh.key
plugin /usr/lib/openvpn/openvpn-auth-pam.so login
  • на клиенте:
pull
auth-user-pass 
dev tap
remote 10.0.17.1
tls-client
dh c:\\keys\\dh1024.pem
ca c:\\keys\\ca.crt
cert c:\\keys\\student1.crt
key c:\\keys\\student1.key

[править] Настройка парольной аутентификации системных пользователей для установки подключения

Для этого необходимо в файле /etc/openvpn/student1.conf дописать следующие строки:

plugin /usr/lib/openvpn/openvpn-auth-pam.so login

А в клиентском конфиге:

pull
auth-user-pass

[править] Настройка OpenVPN для работы в качестве сервера

  • Во-первых, необходимо создать конфигурационный файл сервера. Его можно скопировать из каталога /usr/share/doc/openvpn/examples/sample-config-files/ и затем распаковать:
gzip -cd /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz \
>> /etc/openvpn/server.conf
  • Затем необходимо отредактировать этот файл:
# egrep -v '^\ *$|^#|;' /etc/openvpn/server.conf 

port 1194
proto tcp-server
dev tap
ca keys/ca.crt
cert keys/serzh.crt
key keys/serzh.key  
dh keys/dh1024.pem
ifconfig-pool-persist ipp.txt
ifconfig 172.16.0.1 255.255.255.0
server-bridge 172.16.0.1 255.255.255.0 172.16.0.2 172.16.0.253
client-config-dir ccd
client-to-client
keepalive 10 120
persist-key
persist-tun
status openvpn-status.log 3500
verb 3
plugin /usr/lib/openvpn/openvpn-auth-pam.so login
  • port 1194 — порт для прослушивания демоном openvpn
  • proto tcp-server — указание протокола соединения. Если опция не указана, то используется протокол не гарантированной доставки udp. Для tcp соединения необходимо указать онду из опций tcp-server или tcp-client для сервера и клиента соответственно. Демон, запущенный с опцией tcp-server ожидает входящие соединения. Демон, запущенный с опцией tcp-client, будет инициировать соединение и в случае неудачи будет производить повторные попытки подключения через каждые 5 секунд (определяется connect-retry опцией, 5 секунд — значение по умолчанию).
  • dev tap

.
.
.

  • ca keys/ca.crt — Опция ca определяет корневой (root) сертификат, которым подписаны клиентские пары сертификат/ключ. Значение этой опции keys/ca.crt указывает месторасположение этого сертификата относительно каталога /etc/openvpn. (Или, иными словами, это открытый ключ сервера)
  • cert keys/serzh.crt — Каждый участник OpenVPN соединения в TLS режиме должен иметь собственный сертификат и файл с закрытым ключом. Каждый сертификат должен быть подписан закрытым ключом центра сертификатов, чей открытый ключ указывается в опции ca.
  • key keys/serzh.key — Закрытый ключ, который генерируется вместе с сертификатом, указанным в опции cert
  • dh keys/dh1024.pem — Файл, содержащий параметры Diffie Hellman

.
.
.

  • ifconfig-pool-persist ipp.txt — Файл ассоциаций client <-> virtual IP.

Например:

# cat ipp.txt 
student1,172.16.0.2
natali,172.16.0.5

где первое поле — имя используемого с TLS режиме сертификата.

  • ifconfig 172.16.0.1 255.255.255.0 — IP-адрес, присваиваемый серверу на устройстве /dev/tap
  • server-bridge 172.16.0.1 255.255.255.0 172.16.0.2 172.16.0.253 — Использование сервера в режиме моста. Это дает возможность видеть клиетам не только сервер но и других клиентов (при указании опции client-to-client).
  • client-config-dir ccd — Опция определяет каталог в /etc/openvpn/ с конфигурационными файлами клиентов. В этих файлах могут быть переопределены опции основного конфигурационного файла для каждого из клиентов.
  • keepalive 10 120
  • persist-key — Не перечитывать заново файлы ключей при получении сигнала SIGUSR1 (переустановка соединения) или через интервал, указанный опцией ping-restart n (переустановить соединение через n секунд после отправки последнего icmp пакета клиенту, который остался без ответа)
  • persist-tun — Не закрывать или переоткрывать устройства TUN/TAP при получении сигнала SIGUSR1 или по прошествию интервала n опции ping-restart n.
  • status openvpn-status.log 3500 — В файл /etc/openvpn/openvpn-status.log будет записываться статус активных подключений каждые 5 минут
  • verb 3 — Уровень вывода отладочной информации.
  • plugin /usr/lib/openvpn/openvpn-auth-pam.so login — Подключение модуля аутентификации openvpn-auth-pam.so и использование программы login для аутентификации пользователей во время установки соединения.

Конфигурационный файл клиента:

pull
auth-user-pass 
dev tap
proto tcp-client
remote 10.0.17.1
tls-client
dh c:\\keys\\dh1024.pem
ca c:\\keys\\ca.crt
cert c:\\keys\\student1.crt
key c:\\keys\\student1.key

[править] Openvpn FreeBSD

Инсталляция:

$ cd /usr/ports/security/openvpn

$ sudo make install clean
___________________________________
 Options for openvpn 2.0.6_4  
[X] PW_SAVE  Interactive passwords may be read from a file   
___________________________________

Настройка:

$ sudo mkdir /usr/local/etc/openvpn

$ sudo openvpn --genkey --secret /usr/local/etc/openvpn/static.key

$ sudo sh -c 'cat << CONF >> /usr/local/etc/openvpn/sample.conf
dev tun
ifconfig 172.16.0.1 172.16.0.2
secret /usr/local/etc/openvpn/static.key
comp-lzo
CONF'

Копируем на Windows static.key в C:\Program Files\OpenVPN\static.key

Затем создаем конфигурационный файл клиента openvpn — C:\Program Files\OpenVPN\config на Windows:

remote 192.168.15.238
dev tun
ifconfig 172.16.0.2 172.16.0.1
secret "C:\\Program Files\\OpenVPN\\config\\static.key"
comp-lzo

Запускаем на сервере FreeBSD openvpn:

$ sudo openvpn --config /usr/local/etc/openvpn/sample.conf
Wed Aug 29 19:42:16 2007 OpenVPN 2.0.6 i386-portbld-freebsd6.2 [SSL] [LZO] built on Aug 29 2007
Wed Aug 29 19:42:16 2007 IMPORTANT: OpenVPN's default port number is now 1194, based on an official port number assignment by IANA.  OpenVPN 2.0-beta16 and earlier used 5000 as the default port.
Wed Aug 29 19:42:16 2007 LZO compression initialized
Wed Aug 29 19:42:16 2007 TUN/TAP device /dev/tun0 opened
Wed Aug 29 19:42:16 2007 /sbin/ifconfig tun0 172.16.0.1 172.16.0.2 mtu 1500 netmask 255.255.255.255 up
Wed Aug 29 19:42:16 2007 UDPv4 link local (bound): [undef]:1194
Wed Aug 29 19:42:16 2007 UDPv4 link remote: [undef]
.
.
.

И подключаемся с Windows клиентом:

C:\Documents and Settings\Administrator>openvpn --config "C:\Program Files\OpenV
PN\config\sample.ovpn"
Wed Aug 29 19:44:50 2007 OpenVPN 2.0.9 Win32-MinGW [SSL] [LZO] built on Oct  1 2
006
Wed Aug 29 19:44:50 2007 IMPORTANT: OpenVPN's default port number is now 1194, b
ased on an official port number assignment by IANA.  OpenVPN 2.0-beta16 and earl
ier used 5000 as the default port.
Wed Aug 29 19:44:50 2007 LZO compression initialized
Wed Aug 29 19:44:50 2007 TAP-WIN32 device [??????????? ?? ????????? ???? 3] open
ed: \\.\Global\{338C1B96-AA76-4B7F-8E7F-489452A64B06}.tap
Wed Aug 29 19:44:50 2007 Notified TAP-Win32 driver to set a DHCP IP/netmask of 1
72.16.0.2/255.255.255.252 on interface {338C1B96-AA76-4B7F-8E7F-489452A64B06} [D
HCP-serv: 172.16.0.1, lease-time: 31536000]
Wed Aug 29 19:44:50 2007 Successful ARP Flush on interface [131076] {338C1B96-AA
76-4B7F-8E7F-489452A64B06}
Wed Aug 29 19:44:50 2007 UDPv4 link local (bound): [undef]:1194
Wed Aug 29 19:44:50 2007 UDPv4 link remote: 192.168.15.238:1194
Wed Aug 29 19:45:01 2007 Peer Connection Initiated with 192.168.15.238:1194
Wed Aug 29 19:45:02 2007 Initialization Sequence Completed

И проверяем:

C:\Documents and Settings\Administrator>ping 172.16.0.1

Pinging 172.16.0.1 with 32 bytes of data:

Reply from 172.16.0.1: bytes=32 time=1ms TTL=64
Reply from 172.16.0.1: bytes=32 time<1ms TTL=64
Reply from 172.16.0.1: bytes=32 time<1ms TTL=64
Reply from 172.16.0.1: bytes=32 time<1ms TTL=64

Ping statistics for 172.16.0.1:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 1ms, Average = 0ms

[править] Дополнительная информация

  • OpenVPN HOWTOs
  • OpenVPN Static Key Mini-HOWTO
  • VPN Tunnelling through HTTP Proxy

[править] Материалы по OpenVPN на xgu.ru

  • OpenVPN
  • Два шлюза в Интернет и OpenVPN
  • OpenVPN в Windows
  • OpenVPN Bridge ­— передача тегированного трафика через VPN
  • OpenVPN Proxy ARP

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Windows 2008 install snmp
  • Как установить время спящего режима на windows 10
  • Pinnacle studio под windows 7
  • Подготовка к настройке windows не выключайте компьютер server 2012
  • Комп не видит дисковод windows 10