OVPN-DCO-WIN означает «Открыть канал данных OpenVPN для Windows». Это современный драйвер Windows, который функционирует как адаптер виртуальной сети и реализует необходимую функциональность для обработки канала данных OpenVPN. При использовании OVPN-DCO-WIN программное обеспечение OpenVPN не отправляет трафик данных вперед и назад между пространством пользователя и ядра (для шифрования, дешифрования и маршрутизации), но операции на полезной нагрузке происходят в ядре Windows. Драйвер разрабатывается с использованием Modern Frameworks - WDF и NetAdaptercx. Из -за этого код легче читать и поддерживать сравнение с существующими драйверами Miniport NDIS. С момента скорости новый драйвер выполняет значительно лучшее сравнение с Tap-Windows6, поэтому он должен устранить узкое место, которое затрудняет производительность OpenVPN в Windows.
OVPN-DCO-WIN-это драйвер по умолчанию, начиная с OpenVPN 2.6.
Вы можете просто установить последний релиз OpenVPN 2.6, который включает подписанный драйвер.
В качестве альтернативы вы можете получить релизы от GitHub.
Вы можете использовать Devcon Tool (доступный как часть WDK) для установки драйвера:
devcon install ovpn-dco.inf ovpn-dco
Проект включает в себя инструмент командной строки OVPN-DCO-CLI, который работает в качестве испытательного стенда разработки, ссылочного клиента и примера использования API. При этом вы можете настроить VPN Tunnel между двумя хостами Windows или между Windows и Host Linux, используя инструмент ./ovpn-cli из OVPN-DCO Linux Project.
Чтобы настроить Windows <--> туннель Windows, на первом хосте запустить:
ovpn-dco-cli.exe udp i4 0.0.0.0 1194 192.168.100.200 1194 10.8.0.2 255.255.255.0 10.8.0.1 data64.key 0
Где «0,0.0.0 1194» локальный IP -адрес/порт для привязки к сокету », 192.168.100.200 1194« Удаленный адрес/порт/порт », 10.8.0.2 - локальный IP VPN.
На втором хосте Windows работает:
ovpn-dco-cli.exe udp i4 0.0.0.0 1194 192.168.100.100 1194 10.8.0.1 255.255.255.0 10.8.0.1 data64.key 1
Обратите внимание, что удаленный IP, VPN IP и направление ключей (последняя 0/1 цифра) разные.
Чтобы настроить туннель между Windows и Linux, запустите на втором (Linux) хост:
# ip link add dev ovpn0 type ovpn-dco
# ip link set ovpn0 up
# ip link set mtu 1428 dev ovpn0
# ip addr add dev ovpn0 10.8.0.1/24
# tests/ovpn-cli ovpn0 new_peer 1194 0 192.168.100.100 1194 10.8.0.2
# tests/ovpn-cli ovpn0 new_key 0 aes 1 tests/data64.key
В тех случаях, где 192.168.100.150 находится IP -адрес хоста Linux, 192.168.100.100 - это IP -адрес хоста Windows.
После того, как вы установили туннель, вы сможете пройти хосты пинг (10.8.0.1 <--> 10.8.0.1) и запустить тесты iperf (iperf3 -s 10.8.0.2 на первом хосте, iperf3 -c 10.8.0.2 на втором ) через туннель VPN.
Обратите внимание, что использование инструмента OVPN-DCO-CLI в производстве является очень плохой идеей, потому что он не выполняет никаких ключевых переговоров и использует статический ключ (Data64.Key).
Чтобы использовать драйвер, клиент должен получить ручку файлов, вызывая Createfile. Можно либо использовать символическую ссылку или интерфейс устройства для получения пути файла. Вот пример из инструмента OVPN-DCO (см. Ниже):
HANDLE h = CreateFileA("\\.\ovpn-dco", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM | FILE_FLAG_OVERLAPPED, NULL);
После получения ручки клиент использует вызовы DeviceioControl и чтения/записи для настройки соединения и отправки/приема управляющих пакетов. Смотрите uapi.h для списка команд ioctl и ovpn-dco-cli.cpp о том, как их использовать.
Во -первых, клиент должен инициализировать Peer с помощью команды OVPN_IOCTL_NEW_PEER. Клиент передает структуру OVPN_NEW_PEER, которая содержит локальный/удаленный IP -адрес/порт (либо IPv4, либо IPv6) и протокол транспорта (TCP или UDP).
После инициализации сверстника клиент прошел алгоритм шифров (поддерживается «нет» и «aes-gcm»), крипто-клавиши и Peer-ID как часть команды ovpn_crypto_data с использованием команды ovpn_ioctl_new_key. Описание Crypto OpenVPN выходит за рамки этого документа.
После настройки Crypto, клиент может установить параметры Keepalive (ovpn_set_peer struct) для сеанса через команду OVPN_IOCTL_SET_PEER. Интервал Keepalive определяет, как часто отправлять специальный пакет Keepalive в отсутствие исходящего трафика данных. Тайм -аут Keepalive определяет, когда уведомлять пользовательский пространство (заполняя запрос на чтение с ошибкой) в отсутствие входящего трафика данных.
Чтобы запустить сеанс VPN, клиент отправляет команду OVPN_IOCTL_START_VPN. Это сигнализирует драйвер, чтобы запустить сетевой адаптер.
После начала сеанса VPN клиент устанавливает сетевой адаптер (IP -адрес, сеть, шлюз) и маршрутизацию.
Чтобы отправить и получать пакеты каналов управления, клиент использует вызовы чтения/записи. Рекомендуется использовать перекрытый IO, передавая файл_флаг_оверлаполированного в CreateFile Call и перекрывающуюся структуру для чтения/записи. OVPN-DCO-CLI использует ASIO, который абстрагирует эти низкоуровневые детали.
Драйвер OVPN-DCO-Win используется по умолчанию OpenVPN, начиная с 2,6.
OpenVPN3 также поддерживает OVPN-DCO-WIN в последнем мастер-филиале.
Регистрация выполняется через API траселога, который основан на ETW. Чтобы увидеть журналы на целевой машине:
traceview.exe
в качестве администратора4970F9cf-2c0c-4f11-b1cc-e3a1e9958833
> ОКДля сбора журналов для анализа:
wpr -start ovpn-dco-win.wprp
(файл WPRP находится в дереве источника драйвера)wpr -stop ovpn-dco-win.etl
Файл ETL может быть открыт, например, анализатором производительности Windows ( wpa.exe
).
Чтобы увидеть журналы в прикрепленном Debbuger (Windbg), используйте tracelog.exe
в командной строке администратора:
tracelog -start MyTrace -guid #4970F9cf-2c0c-4f11-b1cc-e3a1e9958833 -rt -kd
Если вы испытываете проблемы с загрузкой, вы можете включить сеанс автологов. Запустите файл ovpn-dco-autologger.reg
, который создаст необходимые ключи реестра, а затем перезагрузите.
Журналы драйверов будут храниться в %SystemRoot%System32LogFilesWMIovpn-dco.etl
.
Выпуск сборки OVPN-DCO-WIN воспроизводим, что означает, что при использовании той же среды сборки вы должны получить то же самое бинарное. Таким образом, вы можете убедиться, что драйвер, выпущенный в бинарной форме, действительно составлен из исходного кода в этом репозитории. Это полезно, потому что требования Microsoft по подписанию драйверов затрудняют запуск самосписнутых драйверов.
Выпущенные драйверы построены с Windows 11 EWDK (комплект драйверов Enterprise Windows). Несмотря на имя, он также работает на Windows 10. Вы можете скачать его здесь: https://docs.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk
Если вы получили файл ovpn-dco.sys, вы можете проверить его следующим образом:
signtool remove /s ovpn-dco.sys
LaunchBuildEnv.cmd
.msbuild /p:platform=<arch> /p:configuration=release /p:signmode=off ovpn-dco-win.vcxproj /t:Build
где <arch>
-ARCH> Win32
, x64
, ARM
или ARM64
.<arch>/Release/ovpn-dco.sys
и файл из шага 1 имеют одинаковый хэш SHA256.Свяжитесь с lev stipakov [email protected] (lev__ на #openvpn-devel)