WireGuard VPN: conceptos básicos
WireGuard es un software libre que permite establecer una red privada virtual (VPN). Con la ayuda de una VPN se abre un túnel virtual entre dos ordenadores de Internet por el que pasa la conexión de red, como si se tratase de un cable de red entre los dispositivos. Las VPN son usadas a menudo por grandes organizaciones como institutos de investigación, organismos públicos y empresas. Gracias a ellas puede regularse el acceso a ciertos recursos de la red y las transferencias de datos de los usuarios pueden protegerse de cara al exterior.
Ya existe toda una gama de protocolos consolidados, cómo IPsec, OpenVPN, L2TP y PPTP. Los proveedores de soluciones de VPN se basan en estos protocolos para darles a sus usuarios la posibilidad de dirigir su propio tráfico de Internet a través de la VPN. WireGuard ofrece varias ventajas y cada vez más proveedores de VPN integran este protocolo en sus servicios.
¿Qué es WireGuard?
WireGuard es una aplicación, así como un protocolo de red para crear túneles VPN cifrados. El programa está sujeto a la licencia GPLv2 como software libre y es multiplataforma. WireGuard está escrito en los lenguajes C y Go y es compatible con Windows, macOS, BSD, iOS y Android.
Con WireGuard se crea un túnel encriptado a través del cual se transmiten corrientes de datos, protegiéndolas así frente a accesos no autorizados. Además del alto nivel de encriptación que lo caracteriza, WireGuard también ofrece optimizaciones para sistemas móviles y para dispositivos del llamado Internet de las cosas (IoT, por sus siglas en inglés).
Desde principios del 2020, WireGuard ya está integrado directamente en el kernel de Linux. Puesto que se trata de un sistema operativo estándar que usan miles de millones de dispositivos a nivel mundial, WireGuard puede utilizarse prácticamente en todas partes. Este uso tan extendido también se debe a que el software es relativamente ligero y no requiere hardware muy especializado.
¿Qué características tiene WireGuard?
La característica principal del protocolo WireGuard es el llamado cryptokey routing, es decir un enrutamiento de clave criptográfica, que consiste en un proceso que asigna a la clave pública del interlocutor en la conexión los rangos de direcciones IP permitidos en el túnel. Los paquetes entrantes desde el otro dispositivo conectado se descifran mediante la clave pública. Tras el descifrado, un paquete entrante solo se entregará si procede de una dirección IP que corresponda a la clave. De lo contrario, será descartado.
A diferencia de las populares pilas de protocolo VPN IPsec y OpenVPN, WireGuard no es un protocolo ágil: en lugar de negociar las bases criptográficas que se utilizarán una a una, durante la fase del apretón de manos o handshake, WireGuard se limita a unas pocas opciones. Las funciones criptográficas utilizadas se versionan de forma resumida. En caso de que una de las bases criptográficas se vea comprometida en el futuro, se lanza entonces una versión nueva y más segura del protocolo WireGuard. Si ambos participantes de la comunicación implementan esta nueva versión, la corriente de datos estará protegida.
En el momento en el que escribimos este artículo, se utilizan los siguientes protocolos y métodos de cifrado:
- Noise Protocol Framework
- Curve25519
- ChaCha20
- Poly1305
- BLAKE2
- SipHash24
- HKDF
¿Qué ventajas tiene WireGuard?
Una de las mayores ventajas de WireGuard es su breve código base: el código del kernel en su totalidad no ocupa más de 4000 líneas. Como comparación, el tamaño del código de una implementación de OpenVPN o IPsec suele tener entre 100 000 y 600 000 líneas. Por definición, un código base más breve es también más seguro, ya que en él los bugs se detectan más fácilmente y el campo de ataque se reduce.
Incluso Linus Torvalds, creador del kernel de Linux y conocido por sus mordaces palabras y sus ocasionales arrebatos de ira, no pudo evitar elogiar el código base de WireGuard tras inspeccionarlo:
“Maybe the code isn’t perfect, but I’ve skimmed it, and compared to the horrors that are OpenVPN and IPSec, it’s a work of art.” – Fuente: netdev - Re: [GIT] Networking
Traducción: “Puede que el código no sea perfecto, pero le he echado un vistazo y, comparado con los horrores de OpenVPN e IPSec, es una obra de arte.”
Además de la mayor seguridad que ofrece, la sencillez del software también favorece un mayor rendimiento. En análisis comparativos, WireGuard demuestra alcanzar una mayor velocidad de transmisión y una latencia más baja que sus competidores. Además, WireGuard no es un protocolo de mucho ruido y pocas nueces (“it is not a chatty protocol”): cuando el usuario no está enviando datos a través del túnel, WireGuard se mantiene en stand-by. De esta forma se ahorra energía y se alarga la autonomía de la batería.
La eficiencia energética es especialmente importante para dispositivos móviles. En este sentido, WireGuard ofrece diversas ventajas. Una de ellas es que es que permite el roaming, es decir, el cambio automático de una WLAN a una red móvil y viceversa. Si, a pesar de ello, se interrumpiese la conexión, volverla a establecer con WireGuard suele ser más rápido que con sus protocolos rivales.
¿Cómo funciona WireGuard VPN?
Por su estructura, WireGuard es un protocolo VPN descentralizado peer-to-peer (de pares). En lugar de requerir un servidor, WireGuard puede abrir directamente un túnel entre dos ordenadores. Lo que podríamos considerar un servidor WireGuard es simplemente un dispositivo en el que se han realizado configuraciones de conexión para varios peers.
El establecimiento de la conexión con WireGuard funciona de forma similar al del Secure Shell (SSH): los usuarios (peers) generan claves públicas con WireGuard y las intercambian entre ellos. Gracias a ellas pueden identificarse los unos a los otros y encriptar los paquetes de datos para su destinatario correspondiente.
Además de la generación de claves criptográficas, del lado de cada peer deben configurarse diferentes elementos de red (más abajo, nuestro manual para configurar WireGuard da más detalles al respecto). Para poder intercambiar datos, en los peers se vinculan los rangos de direcciones IP permitidos con las claves públicas. Los paquetes que no procedan de los rangos de direcciones permitidos son desechados. El envío de datos con WireGuard se realiza a mediante el User Datagram Protocol (UDP).
En el ordenador de un peer se realiza la configuración mediante la herramienta de línea de comandos de WireGuard y otras aplicaciones disponibles por defecto en Linux. Podría decirse que la configuración del software es relativamente fácil, pero WireGuard solo funciona como base: para continuar con los pasos de la configuración y del establecimiento de la conexión, el usuario puede recurrir a una app basada en el protocolo para obtener ayuda. Así, los usuarios de servicios VPN comerciales también pueden disfrutar del moderno protocolo VPN sin necesidad de una interfaz de línea de comandos.
Primeros pasos con WireGuard
En principio, WireGuard no requiere mucho esfuerzo para instalarse y configurarse en sistemas Linux. Como usuario puedes, por ejemplo, crear tu propio servidor VPN con Raspberry Pi. Sin embargo, el proceso concreto variará según la finalidad, el sistema operativo utilizado y el entorno de red disponible. Por eso, solo podemos indicarte los pasos aproximados que tendrás que seguir. Por favor, úsalos solo para realizar el test.
Instala WireGuard en el vServer de IONOS para conseguir así tu propia VPN.
Instalar WireGuard en tu propio sistema
Ejecuta las siguientes órdenes desde la interfaz de línea de comandos para instalar WireGuard en tu sistema Linux:
# para Ubuntu a partir de la versión 19.10
sudo apt install wireguard
# para versiones de Ubuntu anteriores a 19.10
sudo add-apt-repository ppa:wireguard/wireguard
sudo apt-get update
sudo apt-get install wireguard
Aquí mostramos la instalación para Ubuntu-Linux. Otros sistemas pueden requerir ciertas modificaciones del código.
Generar claves de WireGuard
De manera similar al papel que realizan en SSH y PGP, las claves criptográficas son la base del funcionamiento de WireGuard. Como es habitual, existe una clave privada que debe guardarse siempre de forma confidencial y, por otro lado, también una clave pública generada a partir de la privada y que sí se comparte con los peers. Con ella, los peers pueden encriptar y enviar datos, mientras que con la clave privada pueden descifrar los datos encriptados.
Ejecuta las siguientes órdenes desde la línea de comandos para generar una clave de WireGuard privada y una pública:
# Crear directorio de claves
# ATENCIÓN: ¡Solo para realizar test, ya que no se aplican medidas de seguridad!
mkdir ~/.wireguard/ && cd ~/.wireguard/
# Configurar derechos de archivos
umask 077
# Generar clave privada
wg genkey > privatekey
# Generar clave pública a partir de la clave privada
wg pubkey < privatekey > publickey
Establecer la configuración de red para WireGuard
Tanto la instalación de WireGuard como la generación de claves son preparativos básicos que se desarrollan más o menos de forma idéntica en todos los sistemas. La configuración de WireGuard, en cambio, depende de la configuración de red local existente. Por eso, en este artículo solo podemos ofrecer un esquema general y recomendar la guía guía Quick Start del Proyecto WireGuard para los detalles más avanzados.
El proceso general para establecer una conexión de red con WireGuard tiene la siguiente estructura:
# Añadir interfaz de red WireGuard
ip link add dev wg0 type wireguard
# Configurar direcciones IP
ip address add dev wg0 192.168.2.1 peer 192.168.2.2
# Configurar interfaz de red usando el archivo de configuración
wg setconf wg0 myconfig.conf
# Activar interfaz de red
ip link set up dev wg0
WireGuard es un candidato moderno y sofisticado a la posición que hasta ahora han ocupado las pilas de protocolo ya obsoletas cómo IPsec y OpenVPN, a las que podría sustituir en un futuro no muy lejano.