El proyecto de VPN WireGuard anuncio un hito importante para sus usuarios de Windows en la actualidad: una nueva implementación en modo kernel del protocolo VPN llamado WireGuardNT. La nueva implementación permite un rendimiento significativamente mejorado en conexiones LAN de 10 Gbps, así como muchas conexiones WI-Fi.
WireGuard (en Windows) y Wintun
La implementación original de WireGuard en Windows usa 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 del cual también reside en el espacio del usuario. A Donenfeld no le gustó ventanas del grifo, la interfaz de red virtual proporcionada por el proyecto OpenVPN. Así que implementó su propio reemplazo desde cero, llamado Wintun.
Wintun es una gran mejora con respecto a las ventanas de tap: el propio proyecto OpenVPN implementó soporte para Wintun, con un rendimiento impresionante. resultados (414 Mbps en tap-windows frente a 737 Mbps en Wintun). Pero aunque usar Wintun es una mejora con respecto a las ventanas de inicio de sesión, no cambia la necesidad de cambios de contexto constantes entre el espacio del kernel (donde reside la pila de red «real») y el espacio del usuario (donde OpenVPN y wireguard están activos).
Para deshacerse de los cuellos de botella de rendimiento restantes, toda la pila (adaptador virtual, criptografía y todo lo demás) debe integrarse en el kernel. En Linux, esto significa ser un DLKM (módulo de kernel de carga dinámica). En Windows, esto significa ser un buen controlador de dispositivo integrado en el kernel.
WireGuardNT y el kernel de NT
Deshacerse de los componentes del espacio de usuario de la pila WireGuard en Windows y mantener todo en el kernel significa cambiar WireGuard para que se ejecute en Windows de la misma manera que ya se ejecuta en Linux. De hecho, WireGuardNT comenzó como un puerto directo de la implementación de Linux WireGuard en el kernel.
Según el creador de WireGuard, Jason Donenfeld, después de que la adaptación inicial tuvo éxito, “la base de código de NT divergió rápidamente para adaptarse a los NTismos nativos y NDIS Apis. El resultado final es una implementación de alto rendimiento profundamente integrada de WireGuard para el kernel de NT, que utiliza la gama completa de capacidades de NDIS y kernel de NT. «
Esto también significa, por supuesto, deshacerse de muchos cambios de contexto. Los resultados finales son sólidos: más de tres veces el rendimiento superior, medido con Ethr en un par de Equinix Metal (anteriormente packet.net) c3.pequeño instancias.
Sin embargo, los beneficios de una menor conmutación de contexto se extienden más allá de los servidores Xeon con interfaces de 10 Gbps. Donenfeld mencionó que algunos de los primeros evaluadores informaron que WireGuardNT solucionó los problemas de rendimiento a veces enormes que se veían al usar su conexión VPN a través de Wi-Fi.
Probamos la diferencia directamente, utilizando un HP EliteBook con una placa Intel AX201 Wi-Fi 6, conectado al nodo del enrutador de un kit de prueba Plume Wi-Fi 6 Superpods. Aunque nuestros resultados no fueron tan espectaculares como los de algunos de los primeros probadores, confirman un aumento significativo en el rendimiento. En el mismo equipo y con las mismas configuraciones, medimos que WireGuardNT iperf3 funciona de un 10 a un 25% más rápido que wireguard-go y Wintun.
Pruebe WireGuardNT hoy
WireGuardNT está disponible para pruebas en Windows General Descargar para WireGuard ahora, desde la versión 0.4. Pero dado que todavía está clasificado como experimental, tendrá que agregar manualmente una clave de registro y un DWORD para usarlo. Abrir regedit
como administrador, luego navegue hasta HKLM -> Software. A continuación, cree una clave llamada WireGuard y, en esa clave, un DWORD llamado ExperimentalKernelDriver.
Con ExperimentalKernelDriver configurado en 1, sus túneles usarán el nuevo código WireGuardNT; sin él (o con él configurado en 0), usarán el comportamiento predeterminado, que es el antiguo código wireguard-go / wintun. Para que su cambio surta efecto, deberá 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, respetará su configuración de ExperimentalKernelDriver.
En el futuro, WireGuardNT se habilitará de forma predeterminada y, en su lugar, deberá establecer una marca de registro si desea el código anterior. Más allá de eso, el proyecto planea eliminar completamente wireguard-go / wintun en el binario general. Los proyectos en sí, por otro lado, se mantendrán, ya que tienen una amplia utilidad más allá del cliente WireGuard original.