OpenVPN – это набор open source программ, который заслуженно является одним из самых популярных и легких решений для реализации защищенной VPN сети. OpenVPN позволяет объединить в единую сеть сервер и клиентов (даже находящиеся за NAT или файерволами), или объединить сети удаленных офисов. Серверную часть OpenVPN можно развернуть практически на всех доступных операционных системах (пример настройки OpenVPN на Linux). Вы можете установить OpenVPN сервер даже на обычный компьютер с десктопной редакцией Windows 10.
В этой статье, мы покажем, как установить OpenVPN сервер на компьютер с Windows 10, настроить OpenVPN клиент на другом Windows хосте и установить защищенное VPN подключение.
Содержание:
- Установка службы OpenVPN сервера в Windows
- Создаем ключи шифрования и сертификаты для OpenVPN
- Конфигурационный файл OpenVPN сервера в Windows
- Настройка OpenVPN клиента в Windows
Установка службы OpenVPN сервера в Windows
Скачайте MSI установщик OpenVPN для вашей версии Windows с официального сайта (https://openvpn.net/community-downloads/). В нашем случае это OpenVPN-2.5.5-I602-amd64.msi (https://swupdate.openvpn.org/community/releases/OpenVPN-2.5.5-I602-amd64.msi).
Запустите установку.
Если вы планируете, OpenVPN сервер работал в автоматическом режиме, можно не устанавливать OpenVPN GUI. Обязательно установите OpenVPN Services.
Начиная с версии OpenVPN 2.5, поддерживается драйвер WinTun от разработчиков WireGuard. Считается, что этот драйвер работает быстрее чем классический OpenVPN драйвер TAP. Установите драйвер Wintun, откажитесь от установки TAP-Windows6.
Установите OpenSSL утилиту EasyRSA Certificate Management Scripts.
Запустите установку.
По умолчанию OpenVPN устаналивается в каталог C:\Program Files\OpenVPN.
После окончания установки появится новый сетевой адаптер типа Wintun Userspace Tunnel. Этот адаптер отключен, если служба OpenVPN не запущена.
Создаем ключи шифрования и сертификаты для 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"
Можете заполнить поля для сертификатов (опционально)
set_var EASYRSA_REQ_COUNTRY "RU" set_var EASYRSA_REQ_PROVINCE "MSK" set_var EASYRSA_REQ_CITY "MSK" set_var EASYRSA_REQ_ORG "IT-Company" set_var EASYRSA_REQ_EMAIL " [email protected] " set_var EASYRSA_REQ_OU " IT department "
Срок действия сертификатов задается с помощью:
#set_var EASYRSA_CA_EXPIRE 3650 #set_var EASYRSA_CERT_EXPIRE 825
Сохраните файл и выполните команду:
EasyRSA-Start.bat
Следующие команды выполняются в среде EasyRSA Shell:
Инициализация PKI:
./easyrsa init-pki
Должна появится надпись:
init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: C:/Program Files/OpenVPN/easy-rsa/pki
Теперь нужно сгенерировать корневой CA:
./easyrsa build-ca
Задайте дважды пароль для CA:
CA creation complete and you may now import and sign cert requests.
Данная команда сформировала:
- Корневой сертификат центра сертификации: «C:\Program 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»)
Теперь можно создать ключи Диффи-Хеллмана (займет длительное время):
./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
Откройте панель управления, и убедитесь, что виртуальный сетевой адаптер 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 нужно с сервера скопировать файлы:
- 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 клиента (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.
Затем заново откройте командную строку и выполните пункты 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. Открываете и редактируете его. Обратите внимание на двойные слеши.
- Найдите строку, которая начинается на ca и укажите путь к своему ca файлу. В моем случае это ca «C:\\Program Files\\OpenVPN\\config\\ca.crt».
- Найдите cert и отредактируйте соответственно, в моем случае это cert «C:\\Program Files\\OpenVPN\\config\\abuzov-name.crt».
- По аналогии с key — key «C:\\Program Files\\OpenVPN\\config\\abuzov-name.key».
- Аналогично с dh — dh «C:\\Program Files\\OpenVPN\\config\\dh2048.pem»
- Аналогично tls-auth — «C:\\Program Files\\OpenVPN\\config\\ta.key».
Я приведу полный код конфигурации сервера, на всякий случай, что бы его можно было просто скопировать. Так как знаю что такое первая настройка OpenVPN.
mode server port 1194 dev tap proto tcp-server tls-server tls-auth "C:\\Program Files\\OpenVPN\\config\\ta.key" 0 duplicate-cn auth MD5 tun-mtu 1500 tun-mtu-extra 32 mssfix 1450 ca "C:\\Program Files\\OpenVPN\\config\\ca.crt" cert "C:\\Program Files\\OpenVPN\\config\\abuzov-name.crt" key "C:\\Program Files\\OpenVPN\\config\\abuzov-name.key" # This file should be kept secret dh "C:\\Program Files\\OpenVPN\\config\\dh2048.pem" server 10.10.10.0 255.255.255.0 client-to-client keepalive 10 120 comp-lzo persist-key persist-tun verb 3 route-delay 10 route-method exe route 10.10.10.0 255.255.255.0 route 192.168.0.0 255.255.0.0 route-gateway 10.10.10.1
Сохраните файл конфигурации сервера.
Запустите OpenVPN от имени администратора (и сразу сделайте так, что бы он всегда запускался от имени администратора).
После этого подключитесь к северу как показано на рисунке.
Настройка конфигурации клиента
Копируете файл client.ovpn из папки sample-config в папку config. Открываете и редактируете его аналогии. В моем случае это:
- ca «C:\\Program Files\\OpenVPN\\config\\ca.crt»
- cert «C:\\Program Files\\OpenVPN\\config\\ClientVPN1.crt»
- key «C:\\Program Files\\OpenVPN\\config\\ClientVPN1.key»
- remote IP_адрес_сервера
Опять, лучше приведу полный код.
remote IP-адрес-вашего-сервера client port 1194 dev tap proto tcp-client tls-client tls-auth "C:\\Program Files\\OpenVPN\\config\\ta.key" 1 remote-cert-tls server route-delay 2 auth MD5 tun-mtu 1500 tun-mtu-extra 32 mssfix 1450 ca ca.crt cert ClientVPN.crt key ClientVPN.key pull cipher AES-128-CBC comp-lzo persist-key persist-tun verb 3 route-method exe route-delay 3
Единственное что нужно сделать — указать IP-адрес сервера.
Далее подключаем клиент OpenVPN.
Если клиент не подключается к серверу, тогда нужно на сервере необходимо запустить regedit.exe, затем перейти по адресу: «Компьютер\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters» и изменить IPEnableRouter на 1. После чего перезагрузить сервер и подключиться к OpenVPN заново.
После этого можно подключаться по защищенному соединению.
Данная инструкция предназначена для системных администраторов и IT-специалистов, которые планируют развернуть сервер OpenVPN для создания защищенного VPN-соединения. OpenVPN является одним из самых надежных и популярных решений для организации виртуальной частной сети, обеспечивающего высокий уровень безопасности и производительности.
Установка OpenVPN сервера в Windows
Запустите скачанный ранее MSI установщик. Нажмите Customize:
Рисунок 1 – Установка OpenVPN Server на Windiws.
OpenVPN GUI можно не устанавливать. Обязательно установите OpenVPN Services.
Рисунок 2 – Установка Wintun и OpenSSL.
Установите драйвер Wintun и OpenSSL утилиту EasyRSA 3 Certificate Management Scripts. От установки TAP-Windows6 можно отказаться:
Рисунок 3 – Установка OpenVPN Services на Windiws.
Запустите установку нажав Install Now.
Создание ключей шифрования и сертификатов для OpenVPN
Откройте командную строку от имени администратора и перейдите в каталог easy-rsa:
cd C:\Program Files\OpenVPN\easy-rsa
Создайте копию файла 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