WireGuard es un software libre que permite es­ta­ble­cer una red privada virtual (VPN). Con la ayuda de una VPN se abre un túnel virtual entre dos or­de­na­do­res de Internet por el que pasa la conexión de red, como si se tratase de un cable de red entre los di­s­po­si­ti­vos. Las VPN son usadas a menudo por grandes or­ga­ni­za­cio­nes como in­s­ti­tu­tos de in­ve­s­ti­ga­ción, or­ga­ni­s­mos públicos y empresas. Gracias a ellas puede regularse el acceso a ciertos recursos de la red y las tra­n­s­fe­re­n­cias de datos de los usuarios pueden pro­te­ge­r­se de cara al exterior.

Ya existe toda una gama de pro­to­co­los co­n­so­li­da­dos, cómo IPsec, OpenVPN, L2TP y PPTP. Los pro­vee­do­res de so­lu­cio­nes de VPN se basan en estos pro­to­co­los para darles a sus usuarios la po­si­bi­li­dad de dirigir su propio tráfico de Internet a través de la VPN. WireGuard ofrece varias ventajas y cada vez más pro­vee­do­res de VPN integran este protocolo en sus servicios.

¿Qué es WireGuard?

WireGuard es una apli­ca­ció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 mu­l­ti­pla­ta­fo­r­ma. WireGuard está escrito en los lenguajes C y Go y es co­m­pa­ti­ble con Windows, macOS, BSD, iOS y Android.

Con WireGuard se crea un túnel en­cri­p­ta­do a través del cual se tra­n­s­mi­ten co­rrie­n­tes de datos, pro­te­gié­n­do­las así frente a accesos no au­to­ri­za­dos. Además del alto nivel de en­cri­p­ta­ción que lo ca­ra­c­te­ri­za, WireGuard también ofrece op­ti­mi­za­cio­nes para sistemas móviles y para di­s­po­si­ti­vos del llamado Internet de las cosas (IoT, por sus siglas en inglés).

Desde pri­n­ci­pios del 2020, WireGuard ya está integrado di­re­c­ta­me­n­te en el kernel de Linux. Puesto que se trata de un sistema operativo estándar que usan miles de millones de di­s­po­si­ti­vos a nivel mundial, WireGuard puede uti­li­zar­se prá­c­ti­ca­me­n­te en todas partes. Este uso tan extendido también se debe a que el software es re­la­ti­va­me­n­te ligero y no requiere hardware muy es­pe­cia­li­za­do.

¿Qué ca­ra­c­te­rí­s­ti­cas tiene WireGuard?

La ca­ra­c­te­rí­s­ti­ca principal del protocolo WireGuard es el llamado cryptokey routing, es decir un en­ru­ta­mie­n­to de clave cri­p­to­grá­fi­ca, que consiste en un proceso que asigna a la clave pública del in­te­r­lo­cu­tor en la conexión los rangos de di­re­c­cio­nes IP pe­r­mi­ti­dos en el túnel. Los paquetes entrantes desde el otro di­s­po­si­ti­vo conectado se descifran mediante la clave pública. Tras el de­s­ci­fra­do, un paquete entrante solo se entregará si procede de una dirección IP que co­rre­s­po­n­da a la clave. De lo contrario, será de­s­ca­r­ta­do.

A di­fe­re­n­cia de las populares pilas de protocolo VPN IPsec y OpenVPN, WireGuard no es un protocolo ágil: en lugar de negociar las bases cri­p­to­grá­fi­cas que se uti­li­za­rán una a una, durante la fase del apretón de manos o handshake, WireGuard se limita a unas pocas opciones. Las funciones cri­p­to­grá­fi­cas uti­li­za­das se versionan de forma resumida. En caso de que una de las bases cri­p­to­grá­fi­cas se vea co­m­pro­me­ti­da en el futuro, se lanza entonces una versión nueva y más segura del protocolo WireGuard. Si ambos pa­r­ti­ci­pa­n­tes de la co­mu­ni­ca­ción im­ple­me­n­tan esta nueva versión, la corriente de datos estará protegida.

En el momento en el que es­cri­bi­mos este artículo, se utilizan los si­guie­n­tes pro­to­co­los 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 co­m­pa­ra­ción, el tamaño del código de una im­ple­me­n­ta­ción de OpenVPN o IPsec suele tener entre 100 000 y 600 000 líneas. Por de­fi­ni­ció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á­ci­l­me­n­te y el campo de ataque se reduce.

Incluso Linus Torvalds, creador del kernel de Linux y conocido por sus mordaces palabras y sus oca­sio­na­les arrebatos de ira, no pudo evitar elogiar el código base de WireGuard tras in­s­pe­c­cio­nar­lo:

Cita

“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] Ne­t­wo­r­ki­ng

Tra­du­c­ció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 re­n­di­mie­n­to. En análisis co­m­pa­ra­ti­vos, WireGuard demuestra alcanzar una mayor velocidad de tra­n­s­mi­sión y una latencia más baja que sus co­m­pe­ti­do­res. 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 efi­cie­n­cia ene­r­gé­ti­ca es es­pe­cia­l­me­n­te im­po­r­ta­n­te para di­s­po­si­ti­vos móviles. En este sentido, WireGuard ofrece diversas ventajas. Una de ellas es que es que permite el roaming, es decir, el cambio au­to­má­ti­co de una WLAN a una red móvil y viceversa. Si, a pesar de ello, se in­te­rru­m­pie­se la conexión, volverla a es­ta­ble­cer con WireGuard suele ser más rápido que con sus pro­to­co­los rivales.

¿Cómo funciona WireGuard VPN?

Por su es­tru­c­tu­ra, WireGuard es un protocolo VPN de­s­ce­n­tra­li­za­do peer-to-peer (de pares). En lugar de requerir un servidor, WireGuard puede abrir di­re­c­ta­me­n­te un túnel entre dos or­de­na­do­res. Lo que podríamos co­n­si­de­rar un servidor WireGuard es si­m­ple­me­n­te un di­s­po­si­ti­vo en el que se han realizado co­n­fi­gu­ra­cio­nes de conexión para varios peers.

El es­ta­ble­ci­mie­n­to 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 in­te­r­ca­m­bian entre ellos. Gracias a ellas pueden ide­n­ti­fi­car­se los unos a los otros y encriptar los paquetes de datos para su de­s­ti­na­ta­rio co­rre­s­po­n­die­n­te.

Además de la ge­ne­ra­ción de claves cri­p­to­grá­fi­cas, del lado de cada peer deben co­n­fi­gu­rar­se di­fe­re­n­tes elementos de red (más abajo, nuestro manual para co­n­fi­gu­rar WireGuard da más detalles al respecto). Para poder in­te­r­ca­m­biar datos, en los peers se vinculan los rangos de di­re­c­cio­nes IP pe­r­mi­ti­dos con las claves públicas. Los paquetes que no procedan de los rangos de di­re­c­cio­nes pe­r­mi­ti­dos son de­se­cha­dos. 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 co­n­fi­gu­ra­ción mediante la he­rra­mie­n­ta de línea de comandos de WireGuard y otras apli­ca­cio­nes di­s­po­ni­bles por defecto en Linux. Podría decirse que la co­n­fi­gu­ra­ción del software es re­la­ti­va­me­n­te fácil, pero WireGuard solo funciona como base: para continuar con los pasos de la co­n­fi­gu­ra­ción y del es­ta­ble­ci­mie­n­to de la conexión, el usuario puede recurrir a una app basada en el protocolo para obtener ayuda. Así, los usuarios de servicios VPN co­me­r­cia­les 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 in­s­ta­lar­se y co­n­fi­gu­rar­se 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 di­s­po­ni­ble. Por eso, solo podemos indicarte los pasos apro­xi­ma­dos que tendrás que seguir. Por favor, úsalos solo para realizar el test.

Consejo
# 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
Nota

Aquí mostramos la in­s­ta­la­ción para Ubuntu-Linux. Otros sistemas pueden requerir ciertas mo­di­fi­ca­cio­nes del código.

Generar claves de WireGuard

De manera similar al papel que realizan en SSH y PGP, las claves cri­p­to­grá­fi­cas son la base del fu­n­cio­na­mie­n­to de WireGuard. Como es habitual, existe una clave privada que debe guardarse siempre de forma co­n­fi­de­n­cial 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 en­cri­p­ta­dos.

Ejecuta las si­guie­n­tes ó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
# 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
En resumen

WireGuard es un candidato moderno y so­fi­s­ti­ca­do 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.

Ir al menú principal