WireGuard es un protocolo de red privada virtual (VPN) moderno que permite es­ta­ble­cer co­ne­xio­nes seguras y cifradas entre di­s­po­si­ti­vos. Gracias a su base de código ligera y a su alto re­n­di­mie­n­to, se ha co­n­so­li­da­do como una al­te­r­na­ti­va potente y eficiente frente a pro­to­co­los VPN más antiguos como IPsec u OpenVPN. En este artículo de­s­cu­bri­rás qué distingue a WireGuard, cómo funciona y cómo instalar esta solución VPN en tu propio sistema.

¿Qué es WireGuard?

WireGuard es un protocolo VPN de código abierto que se utiliza para es­ta­ble­cer túneles cifrados entre di­s­po­si­ti­vos. Los datos se tra­n­s­mi­ten a través de este túnel, lo que los protege frente a accesos no au­to­ri­za­dos. Además de centrarse en un cifrado robusto, WireGuard está op­ti­mi­za­do para sistemas móviles y el Internet de las Cosas (IoT). Este protocolo se di­s­tri­bu­ye como software libre bajo licencia GPLv2 y está di­s­po­ni­ble en múltiples pla­ta­fo­r­mas. WireGuard está de­sa­rro­lla­do en los lenguajes C y Go y funciona en Windows, macOS, BSD, iOS y Android.

Desde 2020, WireGuard está integrado di­re­c­ta­me­n­te en el kernel de Linux. Dado que Linux es el sistema operativo base en miles de millones de di­s­po­si­ti­vos en todo el mundo, WireGuard puede uti­li­zar­se en prá­c­ti­ca­me­n­te cualquier tipo de in­frae­s­tru­c­tu­ra. Gracias a su co­n­fi­gu­ra­ción sencilla y a su bajo consumo de recursos, cada vez más servicios VPN y empresas lo adoptan.

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

Una ca­ra­c­te­rí­s­ti­ca central de WireGuard es el de­no­mi­na­do Cryptokey Routing (en­ru­ta­mie­n­to basado en claves). En este enfoque, a cada clave pública de un pa­r­ti­ci­pa­n­te se le asignan los rangos de di­re­c­cio­nes IP pe­r­mi­ti­dos dentro del túnel. Los paquetes entrantes se descifran uti­li­za­n­do la clave co­rre­s­po­n­die­n­te y solo se aceptan si proceden de una dirección IP asociada a esa clave. En caso contrario, el paquete se descarta au­to­má­ti­ca­me­n­te.

A di­fe­re­n­cia de pro­to­co­los VPN más antiguos como IPsec y OpenVPN, WireGuard utiliza un conjunto fijo de pri­mi­ti­vas cri­p­to­grá­fi­cas modernas, sin ne­go­cia­ción dinámica de al­go­ri­t­mos. Mientras que en otros pro­to­co­los los al­go­ri­t­mos se negocian durante el proceso de handshake, WireGuard emplea una co­m­bi­na­ción de al­go­ri­t­mos definida y ve­r­sio­na­da. Si en el futuro alguno de estos al­go­ri­t­mos deja de co­n­si­de­rar­se seguro, se introduce una nueva versión del protocolo con una selección ac­tua­li­za­da.

El protocolo utiliza al­go­ri­t­mos de cifrado modernos y seguros, entre los que se incluyen:

  • Noise Protocol Framework para el proceso de handshake y el in­te­r­ca­m­bio de claves
  • Curve25519 para el in­te­r­ca­m­bio seguro de claves
  • ChaCha20 para el cifrado simétrico
  • Poly1305 para la au­te­n­ti­ca­ción
  • BLAKE2 para una función hash cri­p­to­grá­fi­ca rápida
  • SipHash24 para la ge­ne­ra­ción de hashes seguros
  • HKDF para la de­ri­va­ción segura de claves

¿Cuáles son las ventajas de WireGuard?

WireGuard ofrece muchas ventajas que lo co­n­vie­r­ten en una opción muy atractiva para las co­ne­xio­nes VPN modernas. Estas son las más de­s­ta­ca­das:

  • Base de código ligera: WireGuard cuenta con una base de código mucho más reducida, con unas 4 000 líneas frente a las apro­xi­ma­da­me­n­te 100 000 a 600 000 de OpenVPN o IPsec. Esto facilita la detección de errores, mejora la seguridad y reduce el consumo de recursos, ya que requiere menos capacidad de pro­ce­sa­mie­n­to.
  • Mayor re­n­di­mie­n­to: gracias a su menor co­m­ple­ji­dad, WireGuard ofrece ve­lo­ci­da­des de tra­n­s­mi­sión más altas y una latencia más baja que muchos pro­to­co­los al­te­r­na­ti­vos. Esto lo hace es­pe­cia­l­me­n­te adecuado para apli­ca­cio­nes como streaming, juegos en línea y vi­deo­co­n­fe­re­n­cias.
  • Efi­cie­n­cia ene­r­gé­ti­ca: WireGuard solo consume recursos cuando se tra­n­s­mi­ten datos. Este co­m­po­r­ta­mie­n­to op­ti­mi­za­do resulta es­pe­cia­l­me­n­te ventajoso en di­s­po­si­ti­vos móviles, ya que ayuda a prolongar la duración de la batería.
  • Co­m­pa­ti­bi­li­dad con roaming: permite cambiar de forma fluida entre redes wifi y redes móviles sin perder la conexión. En caso de in­te­rru­p­ción, la re­co­ne­xión suele ser más rápida que con otros pro­to­co­los VPN.
  • Co­n­fi­gu­ra­ción sencilla: a di­fe­re­n­cia de otros pro­to­co­los VPN, WireGuard no requiere ajustar ma­nua­l­me­n­te múltiples pa­rá­me­tros cri­p­to­grá­fi­cos. Utiliza una ar­qui­te­c­tu­ra fija y op­ti­mi­za­da, lo que si­m­pli­fi­ca su uso tanto para usuarios pri­n­ci­pia­n­tes como avanzados.

¿Cómo funciona WireGuard?

WireGuard es un protocolo peer-to-peer de­s­ce­n­tra­li­za­do que no requiere un servidor central. En su lugar, permite es­ta­ble­cer un túnel directo entre dos di­s­po­si­ti­vos (peers). En este contexto, un servidor WireGuard es si­m­ple­me­n­te un di­s­po­si­ti­vo que gestiona la co­n­fi­gu­ra­ción de varios peers.

El es­ta­ble­ci­mie­n­to de la conexión funciona de forma similar a Secure Shell (SSH): los peers generan pares de claves públicas y privadas, las in­te­r­ca­m­bian y las utilizan para au­te­n­ti­car­se y cifrar los datos tra­n­s­mi­ti­dos. El cifrado se basa en métodos cri­p­to­grá­fi­cos modernos que ga­ra­n­ti­zan un alto nivel de seguridad.

Además de generar las claves, en los peers deben co­n­fi­gu­rar­se pa­rá­me­tros de red y de en­ru­ta­mie­n­to (consulta la guía más abajo). Esto incluye definir los rangos de di­re­c­cio­nes IP pe­r­mi­ti­dos, que se asocian a las claves públicas. Solo se aceptan paquetes pro­ce­de­n­tes de estas di­re­c­cio­nes.

El envío de datos se realiza mediante el User Datagram Protocol (UDP), que se prefiere por su efi­cie­n­cia y baja latencia. A di­fe­re­n­cia del Tra­n­s­mi­s­sion Control Protocol (TCP), no requiere me­ca­ni­s­mos complejos de control de errores, lo que permite una tra­n­s­mi­sión más rápida.

La co­n­fi­gu­ra­ción suele rea­li­zar­se mediante la he­rra­mie­n­ta de línea de comandos de WireGuard junto con uti­li­da­des de red estándar. Para usuarios menos ex­pe­ri­me­n­ta­dos, muchos servicios VPN ofrecen apli­ca­cio­nes con interfaz gráfica que facilitan la co­n­fi­gu­ra­ción.

Primeros pasos con WireGuard

En general, WireGuard puede in­s­ta­lar­se y co­n­fi­gu­rar­se en un sistema Linux con poco esfuerzo. En versiones recientes de Ubuntu (a partir de la 20.04 LTS), WireGuard ya está integrado como módulo del kernel, por lo que no es necesario añadir re­po­si­to­rios adi­cio­na­les como los Personal Package Archive (PPA). Solo tienes que ejecutar el siguiente comando:

sudo apt install wireguard
bash
Se­r­vi­do­res virtuales (VPS)
VPS rentables en se­r­vi­do­res Dell En­te­r­pri­se
  • 1 Gb/s de ancho de banda y tráfico ilimitado
  • 99,99 % de tiempo de actividad y ce­r­ti­fi­ca­ción ISO
  • Soporte 24/7 ga­la­r­do­na­do y asesor personal

Instalar WireGuard en tu propio sistema

La in­s­ta­la­ción de WireGuard en tu sistema es sencilla y puede rea­li­zar­se con pocos comandos.

Para Ubuntu 20.04 LTS o versiones po­s­te­rio­res:

WireGuard ya está integrado como módulo del kernel, por lo que no es necesario añadir re­po­si­to­rios PPA adi­cio­na­les. Solo tienes que ejecutar:

sudo apt update
sudo apt install wireguard
bash

Para versiones an­te­rio­res a Ubuntu 20.04:

En este caso, debes añadir el re­po­si­to­rio PPA de WireGuard antes de la in­s­ta­la­ción:

sudo add-apt-repository ppa:wireguard/wireguard
sudo apt-get update
sudo apt-get install wireguard
bash

Generar claves de WireGuard

Al igual que otros pro­to­co­los VPN modernos, WireGuard se basa en claves cri­p­to­grá­fi­cas para es­ta­ble­cer co­ne­xio­nes seguras entre peers. Cada di­s­po­si­ti­vo necesita un par de claves: una privada y una pública. La clave privada debe ma­n­te­ne­r­se siempre en secreto, mientras que la clave pública se comparte con otros peers.

Ejecuta los si­guie­n­tes comandos en la línea de comandos para generar una clave privada y una clave pública de WireGuard:

# crear directorio de claves y establecer permisos
sudo mkdir -p /etc/wireguard/keys
sudo chmod 700 /etc/wireguard/keys
cd /etc/wireguard/keys
# establecer umask para restringir el acceso
umask 077
# generar clave privada y derivar la pública
wg genkey | sudo tee privatekey | wg pubkey | sudo tee publickey
# comprobar las claves generadas
sudo cat privatekey
sudo cat publickey
bash
Nota

Las claves deben generarse y al­ma­ce­nar­se en un entorno seguro. Los comandos an­te­rio­res son adecuados para pruebas, pero en entornos pro­du­c­ti­vos debes aplicar medidas adi­cio­na­les, como controles de acceso estrictos y ubi­ca­cio­nes pro­te­gi­das para los archivos de claves.

Co­n­fi­gu­rar los ajustes de red para WireGuard

Después de generar las claves cri­p­to­grá­fi­cas, en cada peer es necesario definir ciertos pa­rá­me­tros de red y de en­ru­ta­mie­n­to. Esta co­n­fi­gu­ra­ción es esencial para permitir la co­mu­ni­ca­ción segura entre los distintos peers.

En la práctica, se crea un archivo de co­n­fi­gu­ra­ción que incluye, entre otros, los si­guie­n­tes elementos:

  • Claves privadas y públicas de los peers
  • Di­re­c­cio­nes IP pe­r­mi­ti­das (los rangos con los que el peer puede co­mu­ni­car­se)
  • Di­re­c­cio­nes de los peers, que están vi­n­cu­la­das a sus re­s­pe­c­ti­vas claves públicas

Un ejemplo de co­n­fi­gu­ra­ción básica de una conexión de WireGuard podría ser el siguiente:

[Interface]
# dirección IP interna de la VPN del servidor
Address = 10.0.0.1/24
# clave privada (del servidor)
PrivateKey = <SERVER_PRIVATE_KEY>
# puerto UDP en el que WireGuard acepta conexiones
ListenPort = 51820
# peer cliente
[Peer]
# clave pública del cliente
PublicKey = <CLIENT_PUBLIC_KEY>
# dirección IP interna de la VPN asignada al cliente
AllowedIPs = 10.0.0.2/32
txt

Probar la conexión y activar WireGuard

Después de instalar y co­n­fi­gu­rar WireGuard en tu sistema, es el momento de probar la conexión y activar la interfaz de red. Puedes hacerlo desde la línea de comandos con los si­guie­n­tes pasos:

1. Activar la interfaz de red

Primero, activa la interfaz de WireGuard que acabas de co­n­fi­gu­rar:

sudo systemctl enable --now wg-quick@wg0
bash

Este comando activa la interfaz de WireGuard (wg0) co­n­fi­gu­ra­da pre­via­me­n­te. Si se ejecuta co­rre­c­ta­me­n­te, la conexión debería estar lista para tra­n­s­mi­tir datos.

2. Probar la conexión

Para ase­gu­rar­te de que la conexión funciona, puedes usar el comando ping para comprobar si el di­s­po­si­ti­vo remoto es accesible:

ping 192.168.1.2
bash

Sustituye la dirección IP por la del peer remoto al que estás conectado. Si recibes respuesta, la conexión VPN está fu­n­cio­na­n­do.

3. Solución de problemas

Si la conexión no funciona como debería, revisa los si­guie­n­tes puntos:

  • Comprueba que las di­re­c­cio­nes IP estén co­n­fi­gu­ra­das co­rre­c­ta­me­n­te.
  • Verifica que las claves públicas y privadas se hayan in­te­r­ca­m­bia­do de forma correcta.
  • Asegúrate de que el co­r­ta­fue­gos permita el tráfico de WireGuard (no­r­ma­l­me­n­te a través del puerto 51820).

Si los problemas persisten, puedes reiniciar el servicio de WireGuard:

sudo systemctl restart wg-quick@wg0
bash
Ir al menú principal