OpenVPN - DmitryGontarenko/usefultricks GitHub Wiki
OpenVPN - технология для реализации виртуальной частной сети (VPN).
OpenVPN передает данные по сети с помощью протоколов UDP или TCP с применением драйвера TUN/TAP.
Безопасность и шифрование в OpenVPN обеспечивается библиотекой OpenSSL и протоколом транспортного уровня Transport Layer Security (TLS).
В OpenSSL может использоваться ассиметричная криптография. В этом случае для каждого участника обмена данными есть два ключа — публичный (открытый) и приватный (секретный).
Публичный ключ используется для зашифрования данных, а приватный - для расшифрования.
Чтобы избежать подделки публичного ключа, какая-то третья сторона должна его заверить. В результате этой процедуры создается сертификат публичного ключа. Сертификат должна заверить организация, которой доверяют. Эта организация играет роль удостоверяющего центра (Certification authority, CA). Но для сети VPN, создаваемой для себя или своей компании, можно самостоятельно создать свой удостоверяющий центр CA и выпускать самоподписанные сертификаты.
Файл Диффи-Хелмана необходим для реализации одноименного протокола, он нужен для обеспечения защиты трафика от расшифровки, если ключи были похищены.
Статический ключ HMAC служит для проверки подлинности передаваемой информации и обеспечивает защиту от DoS-атак и флуда. Создается на сервере OpenVPN.
Прежде чем приступить к установке, убедитесь, что у вас "белый" IP.
Если IP в настройках роутера и IP, который отображаются в браузере - одинаковы, то все в порядке.
Если нет, у вас "серый" IP. В этом случае нужно обращаться к провайдеру с просьбой замены IP на "белый".
Все инструкции актуальны для версии OpenVPN 2.5.6
При установке программы выбираем кастомную установку и отмечаем все компоненты
- Заходим в "C:\Program Files\OpenVPN\easy-rsa"
- Делаем копию "vars.example" > "vars"
- Открываем vars и изменяем строки следующим образом (не забыть раскомментировать):
- 63 строка: set_var EASYRSA_OPENSSL "C:/Program Files/OpenVPN/bin/openssl.exe"
- 76 строка: set_var EASYRSA_TEMP_DIR "$EASYRSA_PKI/temp"
- Открываем cmd с правами администратора, переходим в "C:\Program Files\OpenVPN\easy-rsa"
- Открываем файл EasyRSA-Start.bat
Это оболочка easyrsa, которая имеет встроенный openssl - Создаем инфраструктуру публичных ключей (Public Key Infrastructure, PKI)
./easyrsa init-pki
- Создаем удостоверяющий центр CA
./easyrsa build-ca nopass
Будет создан приватный ключ ca.key и публичный ключ ca.crt - Создаем запрос на сертификат и приватный ключ для сервера
./easyrsa gen-req server nopass
Будет создан файл запроса server.req и приватный ключ server.key - Подписываем запрос на получение сертификата для сервера
./easyrsa sign-req server server
- Генерируем файл Диффи-Хелмана
./easyrsa gen-dh
- Создаем статический ключ HMAC
"C:\Program Files\OpenVPN\bin\openvpn" --genkey --secret ta.key
Копируем созданный файлta.key
в "C:\Program Files\OpenVPN\easy-rsa\pki" - Копируем типовую конфигурацию из "C:\Program Files\OpenVPN\sample-config\server.ovpn" в "C:\Program Files\OpenVPN\config"
Заменяем все содержимое на:
port 1194
proto udp
dev tun
topology subnet
push "redirect-gateway def1"
push "dhcp-option DNS 10.8.0.1"
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.8.0.0 255.255.255.0
tls-auth "C:\\Program Files\\OpenVPN\\easy-rsa\\pki\\ta.key" 0
cipher AES-256-GCM
keepalive 20 60
persist-key
persist-tun
client-to-client
status "C:\\Program Files\\OpenVPN\\log\\status.log"
log "C:\\Program Files\\OpenVPN\\log\\openvpn.log"
verb 3
mute 20
windows-driver wintun
user nobody
group nogroup
ifconfig-pool-persist ipp.txt
При сохранении файла нужно убедиться, что выбран правильный формат конца строк (CR LF).
В Notepad:
"Правка > Форматы конца строк > Преобразовать в Windows CR LF"
"Edit > EOL Conversion > Windows (CR LF)"
ПКМ по OpenVPN GUI > Подключиться
- Создаем запрос на сертификат и приватный ключ для клиента
./easyrsa gen-req client nopass
Будет создан файл запроса client.req и приватный ключ client.key - Подписываем запрос на получение сертификата для сервера
./easyrsa sign-req client client
- Копируем типовую конфигурацию из "C:\Program Files\OpenVPN\sample-config\client.ovpn" в "C:\Program Files\OpenVPN\config"
Заменяем все содержимое на:
client
dev tun
proto udp
remote 180.120.150.240 1194
resolv-retry infinite
nobind
persist-key
persist-tun
;ca ca.crt
;cert client.crt
;key client.key
remote-cert-tls server
;tls-auth ta.key 1
cipher AES-256-GCM
connect-retry-max 25
verb 3
<ca>
-----BEGIN CERTIFICATE-----
fgdgdgdgdgf
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
dsfwerrgefgd
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
dgsdgdfwerwerwerw
-----END PRIVATE KEY-----
</key>
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
asdasdasdlkasd
-----END OpenVPN Static key V1-----
</tls-auth>
key-direction 1
Обязательно измените строку remote 180.120.150.240 1194
в соответствии с вашим IP!
Для работы клиента на понадобятся следующие файлы:
ca.crt, находится в "C:\Program Files\OpenVPN\easy-rsa\pki\ca.crt"
client.crt, находится в "C:\Program Files\OpenVPN\easy-rsa\pki\issued\client.crt"
client.key, находится в "C:\Program Files\OpenVPN\easy-rsa\pki\private\client.key"
dh.pem, находится в "C:\Program Files\OpenVPN\easy-rsa\pki\dh.pem"
ta.key, находится в "C:\Program Files\OpenVPN\easy-rsa\pki\ta.key"
Их можно добавить несколькими способами:
- Положить в папке config рядом с client.ovpn и указать путь до каждого файла.
- Как в примере выше, добавить содержимое каждого файла в соответствующих тег.
Передаем клиенту все необходимые файлы, включая файл конфигурации client.ovpn
Запускаем с помощью OpenVPN GUI.
Проверить подключение можно с помощью пинга сервера.
Нужно знать, какой IP у VPN адаптера на сервере. На клиенте запускаем cmd и пишем:
ping 10.8.0.3
Параметр | Описание |
---|---|
client/server | Тип конфигурационного файла |
dev tun/tap | Тип виртуального сетевого драйвера |
proto udp/tcp | Протокол для передачи данных |
remote 180.120.150.240 1194 | Адрес и порт сервера |
server 10.8.0.0 255.255.255.0 | Пул адресов для сервера. Присвоенный адрес можно посмотреть в адаптаре VPN (TAP или WIN) |
cipher AES-256-GCM | Алгоритм шифрования. Примеры: AES-256-CBC, AES-128-CBC, BF-CBC, DES-EDE3-CBC. |
verb 3 | Уровень детализации лога от 0 до 9 |
connect-retry-max 25 | Указывает, сколько раз повторять соединение, если оно было разорвано. |
Полный список команд можно посмотреть в консоле
cdm > "C:\Program Files\OpenVPN\bin\openvpn" --help
- Заходим в Настройки адаптеров Control Panel\Network and Internet\Network Connections
- Выбираем Ethernet (основной адаптер, используемый для интернета) - ПКМ - Properties - Sharing (tab)
- Включаем первую настройку Allow other networks..., в выпадающем меню выбераем адаптер, который используется для VPN (например, OpenVPN Wintun)
- Если хотите использовать не upd протокол, а tcp, необходимо на сервере прописать
proto tcp-server
илиproto tcp
- На клиенте
proto tcp-client
илиproto tcp
. - Если необходимо использовать openssl для Windows отдельно, можно установить Git. Открыть Переменные среды и добавить в Path: "C:\Program Files\Git\usr\bin".
- Для указания тегов-ключей в файле конфигурации можно использовать теги типа <ca> или {ca}. Для версии 2.5.6 используются кавычки типа <>.
- Для быстрого доступа с рабочего стола к Network Connections (Настройки адаптеров) можно сделать Shortcut: создаем Shortcut на рабочем столе, в качестве значения пишем
ncpa.cpl
YouTube. OpenVPN Server Windows (установка и настройка OpenVPN)
Habr. Руководство по установке и настройке OpenVPN
Habr. OpenVPN: создание сервера на Windows
WinITPro. Установка и настройка OpenVPN сервера под Windows (см. комментарии)