WireGuard: ¿El VPN del futuro?

WireGuard: ¿El VPN del futuro?

Ha llegado el momento en que un VPN ya no es una herramienta exótica de administradores de sistemas con barbas. Las necesidades de los usuarios son diversas, pero el hecho es que un VPN se ha vuelto necesario para todos.

El problema con las soluciones VPN actuales es que son complicadas de configurar correctamente, costosas de mantener, y están llenas de código legado de calidad dudosa.

Hace unos años, el especialista canadiense en seguridad informática Jason A. Donenfeld decidió que había tenido suficiente y comenzó a trabajar en WireGuard. Actualmente, WireGuard se está preparando para incluirse en el núcleo de Linux, incluso ha recibido elogios de Linus Torvalds y en el senado estadounidense..

Las ventajas declaradas de WireGuard sobre otras soluciones VPN son:

un script para la instalación automática de un servidor VPN personal. Los principios de funcionamiento.

Se pueden describir aproximadamente así:

Se crea una interfaz de WireGuard, se le asigna una clave privada y una dirección IP. Se cargan las configuraciones de otros pares: sus claves públicas, direcciones IP, etc.

  • Todos los paquetes IP que llegan a la interfaz de WireGuard se encapsulan en UDP y
  • se envían de forma segura a otros pares. Los clientes especifican la dirección IP pública del servidor en su configuración. El servidor conoce automáticamente las direcciones externas de los clientes cuando recibe datos correctamente autenticados.
  • El servidor puede cambiar la dirección IP pública sin interrumpir su funcionamiento. Al hacerlo, enviará una notificación a los clientes conectados y ellos actualizarán su configuración al vuelo.
  • Se utiliza el concepto de enrutamiento
  • Cryptokey Routing. WireGuard acepta y envía paquetes en función de la clave pública del par. Cuando el servidor descifra un paquete correctamente autenticado, se verifica su campo src. Si coincide con la configuraciónallowed-ips. allowed-ips Si un par está autenticado, el paquete es aceptado por la interfaz WireGuard. Al enviar un paquete saliente, se lleva a cabo el procedimiento correspondiente: se toma el campo dst del paquete y se selecciona el par correspondiente. El paquete se firma con su clave, se cifra con la clave del par y se envía al endpoint remoto.

La lógica principal de WireGuard ocupa menos de 4,000 líneas de código, mientras que OpenVPN e IPSec tienen cientos de miles de líneas. Para apoyar los algoritmos criptográficos modernos, se propone incluir un nuevo API criptográfico en el núcleo de Linux. Zinc. En este momento se está discutiendo cuán buena es esta idea.

Rendimiento

La máxima ventaja de rendimiento (en comparación con OpenVPN e IPSec) se notará en sistemas Linux, ya que allí WireGuard se implementa como un módulo del núcleo. Además, se admiten macOS, Android, iOS, FreeBSD y OpenBSD, pero en estos casos WireGuard funciona en espacio de usuario, lo que afecta el rendimiento. Se promete agregar soporte para Windows en un futuro cercano.

Los resultados de los benchmarks con el sitio oficial:

WireGuard: ¿El VPN del futuro?

Mi experiencia usando

No soy un experto en configurar VPN. Una vez configuré OpenVPN manualmente y fue muy tedioso, y no intenté con IPSec. Se necesitan tomar muchas decisiones, y es muy fácil dispararse en el pie. Por lo tanto, siempre he utilizado scripts listos para la configuración del servidor.

Así que, desde mi punto de vista, WireGuard es realmente ideal para el usuario. Todas las decisiones de bajo nivel están incluidas en la especificación, por lo que el proceso de preparación de una infraestructura VPN típica toma apenas unos minutos. Es casi imposible cometer un error en la configuración.

El proceso de instalación está descrito en detalle en el sitio oficial, y quiero destacar especialmente el excelente soporte para OpenWRT.

Las claves de cifrado se generan con la utilidad wg:

SERVER_PRIVKEY=$( wg genkey )
SERVER_PUBKEY=$( echo $SERVER_PRIVKEY | wg pubkey )
CLIENT_PRIVKEY=$( wg genkey )
CLIENT_PUBKEY=$( echo $CLIENT_PRIVKEY | wg pubkey )

Luego, hay que crear la configuración del servidor /etc/wireguard/wg0.conf con el siguiente contenido:

[Interface]
Address = 10.9.0.1/24
PrivateKey = $SERVER_PRIVKEY
[Peer]
PublicKey = $CLIENT_PUBKEY
AllowedIPs = 10.9.0.2/32

y levantar el túnel con el script wg-quick:

sudo wg-quick up /etc/wireguard/wg0.conf

En sistemas con systemd, en su lugar se puede usar sudo systemctl start wg-quick@wg0.service.

En la máquina cliente, crear la configuración /etc/wireguard/wg0.conf:

[Interface]
PrivateKey = $CLIENT_PRIVKEY
Address = 10.9.0.2/24
[Peer]
PublicKey = $SERVER_PUBKEY
AllowedIPs = 0.0.0.0/0
Endpoint = 1.2.3.4:51820 # IP externa del servidor
PersistentKeepalive = 25 

Y así es como se levanta el túnel:

sudo wg-quick up /etc/wireguard/wg0.conf

Solo queda configurar NAT en el servidor para que los clientes puedan salir a Internet, ¡y estará todo listo!

Se logró esta sencillez de uso y la compacidad de la base de código al renunciar a la funcionalidad de distribución de claves. Aquí no hay un sistema complejo de certificados ni todo ese horror corporativo, las claves de cifrado cortas se distribuyen más o menos como claves SSH. Pero esto plantea un problema: WireGuard no será tan fácil de implementar en algunas redes existentes.

Entre las desventajas, cabe mencionar que WireGuard no funcionará a través de un proxy HTTP, ya que el único transporte es el protocolo UDP. Surge la pregunta, ¿será posible ofuscar el protocolo? Claro, esta no es una tarea directa para un VPN, pero para OpenVPN, por ejemplo, existen formas de disfrazarse como HTTPS, lo que ayuda a los habitantes de países totalitarios a acceder plenamente a Internet.

Conclusiones

En resumen, es un proyecto muy interesante y prometedor, ya se puede utilizar en servidores personales. ¿Cuál es la ventaja? Alto rendimiento en sistemas Linux, facilidad de configuración y mantenimiento, base de código compacta y legible. Sin embargo, aún es prematuro lanzarse a traducir una infraestructura compleja a WireGuard, es mejor esperar su inclusión en el núcleo de Linux.

Para ahorrar mi (y su) tiempo, he desarrollado un instalador automático de WireGuard. Con él, puedes levantar un VPN personal para ti y tus conocidos sin necesidad de entender nada de esto.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster