Proyecto VPN WireGuard Anunciar Para los usuarios de Windows de hoy, este es un hito importante: una nueva implementación en modo kernel del protocolo VPN llamado WireGuardNT. La nueva implementación permite un aumento significativo en el rendimiento de las conexiones LAN de 10 Gbps, así como muchas conexiones Wi-Fi.
WireGuard (en Windows) y Wintun
La implementación inicial de WireGuard en Windows utilizó wireguard-go, una implementación de espacio de usuario de WireGuard escrita en el lenguaje de programación Go de Google. Luego, Wireguard-go se vincula a un dispositivo de red virtual, la mayoría de los cuales también se encuentran en el espacio del usuario.A Donanfield no le gusta Haga clic en la ventana, La interfaz de red virtual proporcionada por el proyecto OpenVPN, por lo que implementó su propio reemplazo desde cero, llamado Winton.
Wintun es una mejora obvia para tap-windows: el proyecto OpenVPN en sí ha implementado el soporte de Wintun, lo cual es impresionante resultado (Tap-windows 414Mbps vs Wintun 737Mbps). Sin embargo, aunque el uso de Wintun es una mejora en las ventanas tap, no cambia el cambio de contexto continuo desde el espacio del kernel (donde se encuentra la pila de red “real”) y el espacio del usuario (donde se encuentran OpenVPN y wireguard-go ) necesidad.
Para deshacerse de los cuellos de botella de rendimiento restantes, toda la pila (adaptadores virtuales, cifrado y todo) debe incorporarse al kernel. En Linux, esto significa convertirse en DLKM (Módulo de kernel de carga dinámica). En Windows, esto significa un controlador de dispositivo de kernel adecuado.
WireGuardNT y NT kernel
Abandonar el componente de espacio de usuario de la pila WireGuard en Windows y mantener todo en el kernel significa cambiar WireGuard para que funcione en Windows, tal como lo hace en Linux. De hecho, WireGuardNT se implementó originalmente como un puerto directo del kernel de Linux WireGuard.
Según el creador de WireGuard Jason Donenfeld, una vez que la adaptación inicial fue exitosa, “la base del código NT rápidamente divergió para adaptarse al NTismo nativo y NDIS Abeja. El resultado final es una implementación WireGuard profundamente integrada y de alto rendimiento para el núcleo NT, que utiliza la gama completa de funciones NDIS y del núcleo NT. “
Por supuesto, esto también significa deshacerse de muchos cambios de contexto.El resultado final es confiable: más de tres veces el rendimiento de gama alta, midiendo Éter En un par de Equinix Metal (anteriormente packet.net) c3. pequeño Ejemplo.
Sin embargo, en comparación con los servidores Xeon con interfaces de 10 Gbps, la ventaja de un menor cambio de contexto se amplía aún más: Donenfeld mencionó que algunos de los primeros evaluadores informaron que WireGuardNT resuelve el problema que a veces ocurre cuando se usan conexiones VPN a través de Wi-Fi. Gran pérdida de rendimiento.
Probamos directamente la diferencia, utilizando un HP EliteBook con una tarjeta Intel AX201 Wi-Fi 6, conectada al nodo del enrutador del conjunto de pruebas Plume Wi-Fi 6 Superpods. Aunque nuestros resultados no son tan convincentes como los resultados de algunos de los primeros evaluadores, sí confirman una mejora significativa del rendimiento. Con el mismo equipo y la misma configuración, medimos que WireGuardNT iperf3 funciona entre un 10% y un 25% más rápido que wireguard-go y Wintun.
Pruebe WireGuardNT hoy
WireGuardNT se puede utilizar para realizar pruebas en Windows en general. descargar Ahora se usa en WireGuard, comenzando con la versión 0.4. Pero dado que todavía está clasificado como experimental, debe agregar manualmente una clave de registro y un DWORD para usarlo.Abierto regedit
Como administrador, vaya a HKLM -> Software. A continuación, cree una clave denominada WireGuard y cree un DWORD denominado ExperimentalKernelDriver en la clave.
Establezca ExperimentalKernelDriver en 1, y sus túneles usarán el nuevo código WireGuardNT; sin él (o configúrelo en 0), usarán el comportamiento predeterminado, que es el antiguo código wireguard-go / wintun. Para que los cambios surtan efecto, debe hacer clic con el botón derecho en el icono de WireGuard en la bandeja del sistema y hacer clic en “Salir”. Cuando vuelva a abrir la aplicación WireGuard, seguirá la configuración de ExperimentalKernelDriver.
En el futuro, WireGuardNT estará habilitado de forma predeterminada, si desea el código anterior, debe establecer una marca de registro. Además, el proyecto planea eliminar finalmente por completo wireguard-go / wintun en archivos binarios generales. Por otro lado, los proyectos en sí mismos se mantendrán porque tienen una amplia gama de usos más allá del cliente WireGuard estándar.