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

Instala WireGuard en el vServer de IONOS para conseguir así tu propia VPN.

Instalar WireGuard en tu propio sistema

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

Es­ta­ble­cer la co­n­fi­gu­ra­ción de red para WireGuard

Tanto la in­s­ta­la­ción de WireGuard como la ge­ne­ra­ción de claves son pre­pa­ra­ti­vos básicos que se de­sa­rro­llan más o menos de forma idéntica en todos los sistemas. La co­n­fi­gu­ra­ción de WireGuard, en cambio, depende de la co­n­fi­gu­ra­ción de red local existente. Por eso, en este artículo solo podemos ofrecer un esquema general y re­co­me­n­dar la guía guía Quick Start del Proyecto WireGuard para los detalles más avanzados.

El proceso general para es­ta­ble­cer una conexión de red con WireGuard tiene la siguiente es­tru­c­tu­ra:

# 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