OVPN-DCO-Win significa "descarga del canal de datos OpenVPN para Windows". Es un controlador moderno de Windows, que funciona como adaptador de red virtual e implementa la funcionalidad requerida para manejar el canal de datos OpenVPN. Cuando se usa OVPN-DCO-Win, el software OpenVPN no envía tráfico de datos de un lado a otro entre el usuario y el espacio del núcleo (para cifrado, descifrado y enrutamiento), pero las operaciones de carga útil tienen lugar en el kernel de Windows. El controlador se está desarrollando utilizando marcos modernos: WDF y Netadaptercx. Debido a eso, el código es más fácil de leer y mantener la comparación con los controladores de Miniport NDIS existentes. En cuanto a la velocidad, el nuevo controlador realiza una comparación significativamente mejor con TAP-Windows6, por lo que debe eliminar el cuello de botella que obstaculiza el rendimiento de OpenVPN en Windows.
OVPN-DCO-WIN es un controlador predeterminado que comienza desde OpenVPN 2.6.
Puede instalar la última versión de OpenVPN 2.6, que incluye controlador firmado.
Alternativamente, puede obtener lanzamientos de GitHub.
Puede usar la herramienta DevCon (disponible como parte de WDK) para instalar el controlador:
devcon install ovpn-dco.inf ovpn-dco
El proyecto incluye la herramienta de línea de comandos OVPN-DCO-CLI, que funciona como lecho de prueba de desarrollo, cliente de referencia y ejemplo de uso de API. Con eso, puede configurar el túnel VPN entre dos hosts de Windows o entre Windows y el host de Linux usando la herramienta ./ovpn-cli del proyecto OVPN-DCO Linux.
Para configurar el túnel de Windows <-> Windows, en el primer host Ejecutar:
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
Donde "0.0.0.0 1194" Dirección/puerto IP local para vincular el socket ", 192.168.100.200 1194" Dirección/puerto remoto ", 10.8.0.2" es una IP VPN local.
En el segundo host de Windows se ejecuta:
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
Tenga en cuenta que la IP remota, la IP VPN y la dirección de teclas (Último 0/1 dígitos) son diferentes.
Para configurar el túnel entre Windows y Linux, ejecute en el segundo host (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
donde 192.168.100.150 es una dirección IP de host de Linux, 192.168.100.100 es una dirección IP del host Windows.
Después de establecer el túnel, debería poder hacer ping hosts (10.8.0.1 <-> 10.8.0.1) y ejecutar pruebas de IPerf (iPerf3 -s 10.8.0.2 en el primer host, iPerf3 -c 10.8.0.2 en la segunda ) a través del túnel VPN.
Tenga en cuenta que usar la herramienta OVPN-DCO-CLI en la producción es una muy mala idea, ya que no hace ninguna negociación clave y usa una clave estática (Data64.Key).
Para usar el controlador, el cliente debe obtener el manejo del archivo llamando a CreateFile. Uno puede usar un enlace simbólico o interfaz del dispositivo para obtener la ruta del archivo. Aquí hay un ejemplo de la herramienta OVPN-DCO (ver más abajo):
HANDLE h = CreateFileA("\\.\ovpn-dco", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM | FILE_FLAG_OVERLAPPED, NULL);
Después de manejar, el cliente usa las llamadas DeviceIocontrol y Read/WriteFile para configurar la conexión y enviar/recibir paquetes de control. Consulte UAPI.H para la lista de comandos IOCTL y ovpn-dco-cli.cpp sobre cómo usarlos.
Primero, el cliente necesita inicializar el par con el comando OVPN_IOCTL_NEW_PEER. El cliente pasa la estructura OVPN_NEW_PEER, que contiene dirección/puerto IP local/remoto (ya sea IPv4 o IPv6) y el protocolo de transporte (TCP o UDP).
Después de inicializar el algoritmo de cifrado, el cliente (compatible es "Ninguno" y "AES-GCM"), las teclas Crypto y el ID de Peer como parte de la estructura OVPN_CRYPTO_DATA usando el comando OVPN_IOCTL_NEW_KEY. La descripción de OpenVPN Crypto está más allá del alcance de este documento.
Después de configurar Crypto, el cliente puede establecer parámetros KeepAlive (OVPN_SET_PEER struct) para la sesión a través del comando OVPN_IOCTL_SET_PEER. El intervalo Keepalive define con qué frecuencia enviar un paquete Keepalive especial en ausencia de tráfico de datos saliente. El tiempo de espera de KeepAlive define cuándo notificar al espacio de usuarios (completando la solicitud de lectura con un error) en ausencia de tráfico de datos entrantes.
Para iniciar la sesión VPN, el cliente envía el comando OVPN_IOCTL_START_VPN. Este controlador señala para iniciar el adaptador de red.
Después de comenzar la sesión de VPN, el cliente establece el adaptador de red (dirección IP, máscara de red, puerta de enlace) y enrutamiento.
Para enviar y recibir paquetes de canales de control, el cliente usa llamadas de lectura/file. Se recomienda usar IO superpuesto pasando File_Flag_overLapped a CreateFile Llam y una estructura superpuesta para leer/WriteFile Llamadas. OVPN-DCO-CLI usa ASIO, que abstrae esos detalles de bajo nivel.
El controlador OVPN-DCO-WIN se usa por defecto OpenVPN a partir de la versión 2.6.
OpenVPN3 también es compatible con OVPN-DCO-Win en la última rama maestra.
El registro se realiza a través de la API Tracelogging, que se basa en ETW. Para ver registros en una máquina de destino:
traceview.exe
como administrador4970F9cf-2c0c-4f11-b1cc-e3a1e9958833
> OKPara recopilar registros para el análisis:
wpr -start ovpn-dco-win.wprp
(el archivo WPRP está en el árbol de fuente del controlador)wpr -stop ovpn-dco-win.etl
El archivo ETL podría abrirse, por ejemplo, por Windows Performance Analyzer ( wpa.exe
).
Para ver los registros adjuntos de Debbuger (WindBG), use tracelog.exe
en el símbolo del sistema Administrador:
tracelog -start MyTrace -guid #4970F9cf-2c0c-4f11-b1cc-e3a1e9958833 -rt -kd
Si experimenta problemas de arranque, es posible que desee habilitar la sesión de Autologger. Ejecute el archivo ovpn-dco-autologger.reg
, que creará claves de registro necesarias y luego reiniciará.
Los registros del controlador se almacenarán en %SystemRoot%System32LogFilesWMIovpn-dco.etl
.
Las compilaciones de liberación de ovpn-dco-win son reproducibles, lo que significa que cuando usa el mismo entorno de compilación, debe obtener exactamente el mismo binario OVPN-dco.sys. De esa manera, puede verificar que un controlador publicado en forma binaria se compila del código fuente en este repositorio. Esto es útil porque los requisitos de firma de controladores de Microsoft dificultan la ejecución de controladores autocompilados.
Los controladores lanzados están construidos con Windows 11 EWDK (Kit de controlador de Windows Enterprise). A pesar del nombre, también funciona en Windows 10. Puede descargarlo aquí: https://docs.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk
Si ha obtenido un archivo ovpn-dco.sys, puede verificarlo de la siguiente manera:
signtool remove /s ovpn-dco.sys
LaunchBuildEnv.cmd
.msbuild /p:platform=<arch> /p:configuration=release /p:signmode=off ovpn-dco-win.vcxproj /t:Build
Where <arch>
es Win32
, x64
, ARM
o ARM64
.<arch>/Release/ovpn-dco.sys
y el archivo del paso 1 tienen el mismo hash SHA256.Póngase en contacto con Lev Stipakov [email protected] (Lev__ en #OpenVPN-Devel)