¿WireGuard es la VPN perfecta del futuro?


Ha llegado el momento en que VPN ya no es una herramienta exótica para los administradores de sistemas con barba. Los usuarios tienen diferentes tareas, pero el hecho es que todos necesitan una VPN.


El problema con las soluciones VPN actuales es que son difíciles de configurar correctamente, costosas de mantener y también tienen una gran cantidad de código heredado de dudosa calidad.


Hace unos años, el especialista canadiense en seguridad de la información Jason A. Donenfeld decidió que tenía que soportar esto y comenzó a trabajar en WireGuard . Ahora WireGuard se está preparando para ser incluido en el kernel de Linux; incluso recibió elogios de Linus Torvalds y del Senado de los EE . UU .


Las ventajas declaradas de WireGuard sobre otras soluciones VPN:


  • Fácil de usar
  • Utiliza criptografía moderna: marco de protocolo de ruido, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF, etc.
  • Código legible compacto, más fácil de investigar en busca de vulnerabilidades.
  • Alto rendimiento
  • Especificación clara y detallada.

¿Se encuentra una bala de plata? ¿Es hora de cavar en OpenVPN e IPSec? Decidí lidiar con esto, y al mismo tiempo hice un script para instalar automáticamente un servidor VPN personal .


Principios de trabajo


Los principios de funcionamiento se pueden describir de la siguiente manera:


  • Se crea una interfaz 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 WireGuard se encapsulan en UDP y se entregan de forma segura a otros pares.
  • Los clientes configuran la dirección IP pública del servidor en la configuración. El servidor reconoce automáticamente las direcciones externas de los clientes cuando los datos autenticados correctamente provienen de ellos.
  • El servidor puede cambiar la dirección IP pública sin interrumpir el trabajo. Al mismo tiempo, enviará una alerta a los clientes conectados y actualizarán su configuración sobre la marcha.
  • Se utiliza el concepto de Cryptokey Routing . WireGuard recibe y envía paquetes basados ​​en la clave pública del par. Cuando el servidor descifra un paquete autenticado correctamente, se verifica su campo src. Si coincide con la allowed-ips autenticado, la interfaz WireGuard recibe el paquete. Al enviar un paquete saliente, se produce el procedimiento correspondiente: se toma el campo dst del paquete y se selecciona el igual correspondiente en función del mismo, el paquete se firma con su propia clave, se cifra con la clave del mismo nivel y se envía al punto final remoto.

Toda la lógica central de WireGuard ocupa menos de 4 mil líneas de código, mientras que OpenVPN e IPSec tienen cientos de miles de líneas. Para admitir algoritmos criptográficos modernos, se propone incluir la nueva API criptográfica de zinc en el kernel de Linux. Por el momento, hay una discusión sobre cuán buena es esta idea.


Rendimiento


La ventaja de rendimiento máximo (en comparación con OpenVPN e IPSec) se notará en los sistemas Linux, ya que allí WireGuard se implementa como un módulo de kernel. Además, se admiten macOS, Android, iOS, FreeBSD y OpenBSD, pero WireGuard se ejecuta en el espacio de usuario con todas las implicaciones de rendimiento resultantes. Windows promete agregar soporte en el futuro cercano.


Resultados de referencia del sitio web oficial :



Mi experiencia de uso


No soy un experto en configuración de VPN. Una vez configuré OpenVPN con controladores y fue muy triste, pero IPSec ni siquiera lo intentó. Deben tomarse demasiadas decisiones; es muy fácil dispararse en el pie. Por lo tanto, siempre utilicé scripts listos para configurar el servidor.


Entonces, WireGuard, desde mi punto de vista, es generalmente ideal para el usuario. Todas las decisiones de bajo nivel se toman en la especificación, por lo que el proceso de preparación de una infraestructura VPN típica toma solo unos minutos. Es casi imposible acumular en la configuración.


El proceso de instalación se describe en detalle en el sitio web oficial, me gustaría mencionar un excelente soporte para OpenWRT .


Las claves de cifrado son generadas por 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 ) 

A continuación, debe crear la configuración del servidor /etc/wireguard/wg0.conf con los siguientes contenidos:


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

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


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

En los sistemas con systemd, puede usar sudo systemctl start wg-quick@wg0.service .


En la máquina del cliente, cree 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  PersistentKeepalive = 25 

Y levante el túnel de la misma manera:


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

Queda por configurar NAT en el servidor para que los clientes puedan acceder a Internet, ¡y listo!


Tal facilidad de uso y compacidad de la base del código se lograron debido al rechazo de la funcionalidad de distribución de claves. No hay un sistema de certificados complicado y todo este horror corporativo; las claves de cifrado cortas se distribuyen aproximadamente como claves SSH. Pero en relación con esto, surge un problema: WireGuard no será tan fácil de implementar en algunas redes existentes.


De las deficiencias, vale la pena señalar que WireGuard no funcionará a través de un proxy HTTP, ya que solo hay un protocolo UDP como transporte. La pregunta es, ¿es posible ofuscar el protocolo? Por supuesto, esta no es una tarea VPN directa, pero para OpenVPN, por ejemplo, hay formas de disfrazarse como HTTPS, lo que ayuda a los residentes de países totalitarios a usar Internet por completo.


Conclusiones


En resumen, este es un proyecto muy interesante y prometedor, ahora puede usarlo en servidores personales. ¿Cuál es el beneficio? Alto rendimiento en sistemas Linux, facilidad de configuración y soporte, base de código compacta y legible. Sin embargo, es demasiado pronto para apresurarse a transferir infraestructura compleja a WireGuard, vale la pena esperar para su inclusión en el kernel de Linux.


Para ahorrar mi (y su) tiempo, desarrollé el instalador automático WireGuard . Con él, puede crear una VPN personal para usted y sus amigos sin siquiera comprender nada al respecto.

Source: https://habr.com/ru/post/es432686/


All Articles