Saltar al contenido
Cosas Tecnológicas

El nuevo WireGuardNT rompe el límite de rendimiento en Windows

agrandar / Olvídese de los teléfonos móviles flexibles: hemos insistido en usar peluches para teléfonos móviles.

El proyecto WireGuard VPN anunció hoy un hito importante para sus usuarios de Windows: la implementación de un nuevo modo de 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 Donenfeld no le gustaban las ventanas táctiles, la interfaz de red virtual proporcionada por el proyecto OpenVPN, por lo que implementó su propia alternativa desde cero, llamada Wintun.

Wintun es una mejora significativa con respecto a tap-windows: el proyecto OpenVPN en sí ha implementado el soporte de Wintun y logró resultados impresionantes (tap-windows es 414Mbps, Wintun es 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 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 dejar 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 migración inicial es exitosa, “la base de código NT se diferencia rápidamente para adaptarse a los NTismos nativos y las API de NDIS. El resultado final es una integración profunda y una implementación de WireGuard de alto rendimiento para el núcleo NT, que utiliza La gama completa de funciones de NDIS y kernel de NT “.

Por supuesto, esto también significa deshacerse de muchos cambios de contexto. El resultado final es confiable: el rendimiento medido con Ethr en un par de instancias c3.small de Equinix Metal (anteriormente llamado packet.net) es más de tres veces el rendimiento de gama alta.

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 probadores informaron que WireGuardNT resuelve el problema que a veces ocurre cuando se usan conexiones VPN a través de Wi-Fi La enorme 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

A partir de la versión 0.4, WireGuardNT ahora está disponible para probar en la descarga general de Windows de WireGuard. 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.

Configure 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.