Cybersecurity

WireGuard VPN en Linux: Configura en 15 Minutos

WireGuard VPN en Linux: Configura en 15 Minutos

WireGuard es un protocolo VPN moderno que permite configurar una conexión segura en Linux en minutos. Para configurar una WireGuard VPN en Linux, instala el paquete, genera las claves criptográficas, define el archivo de configuración en servidor y cliente, e inicia el túnel con systemctl. En 15 minutos obtienes una conexión estable, rápida y cifrada.

| Aspecto | WireGuard | OpenVPN |

|—|—|—|

| Líneas de código | 4.000 | 100.000 |

| Handshake | < 100ms | > 1.000ms |

| Archivo de config | ~10 líneas | ~200 líneas |

| Cifrado | Curve25519, ChaCha20 | AES, RSA |

OpenVPN en un VPS. 80ms de latencia. Configuración de 200 líneas. Un cliente que se desconectaba cada 30 minutos. WireGuard en producción resolvió los tres problemas. Cuando migré la conectividad remota de una organización sanitaria pública de OpenVPN a WireGuard, los tickets por VPN inestable desaparecieron. El 73% de los brechas parte de credenciales robadas según el Verizon DBIR 2025, y tener un túnel VPN fiable reduce el riesgo de que los usuarios desactiven la protección por frustración. WireGuard está en el kernel Linux desde la versión 5.6 y gestiona el roaming de forma nativa: si cambias de red, el túnel no cae.

Requisitos Previos / Entorno de Prueba

Necesitas un servidor Linux (VPS o máquina local) con kernel 5.6 o superior y permisos de root. Para esta guía usé Ubuntu 22.04 LTS como servidor y un cliente Linux. También necesitarás un cliente móvil para probar el QR code.

Instalar WireGuard en servidor y cliente (configurar WireGuard VPN en Linux)

La instalación requiere un solo paquete. En sistemas Debian y derivados:

sudo apt install wireguard

En RHEL, CentOS o Fedora:

sudo dnf install wireguard-tools

El módulo del kernel ya está incluido en distribuciones modernas. Si usas un kernel personalizado muy antiguo, verifica su presencia con modprobe wireguard. WireGuard gestiona unas 4.000 líneas de código, frente a las 100.000 de OpenVPN, reduciendo la superficie de ataque de forma drástica.

Generar las claves (privada y pública)

WireGuard no usa certificados X.509. Usa solo pares de claves criptográficas. Genera las claves para el servidor:

wg genkey | tee privatekey | wg pubkey > publickey

Protege la clave privada:

chmod 600 privatekey

Repite el mismo proceso en el cliente Linux. Tendrás dos pares de claves: uno para el servidor y otro para el cliente. La clave privada nunca sale de la máquina que la genera. La clave pública se comparte con la contraparte.

Configurar el servidor

Crea el archivo /etc/wireguard/wg0.conf en el servidor. Inserta la clave privada del servidor y la clave pública del cliente.

[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = <CLAVE_PRIVADA_SERVIDOR>

# Habilita NAT para los clientes
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
PublicKey = <CLAVE_PUBLICA_CLIENTE>
AllowedIPs = 10.0.0.2/32

Sustituye eth0 por la interfaz de red principal de tu servidor (verifica con ip a). Habilita el IP forwarding en el servidor, de lo contrario el tráfico no se reenviará:

echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.d/99-wireguard.conf
sudo sysctl -p /etc/sysctl.d/99-wireguard.conf

Configurar el cliente Linux

En el cliente, crea el archivo /etc/wireguard/wg0.conf:

[Interface]
Address = 10.0.0.2/24
PrivateKey = <CLAVE_PRIVADA_CLIENTE>
DNS = 1.1.1.1

[Peer]
PublicKey = <CLAVE_PUBLICA_SERVIDOR>
Endpoint = <IP_PUBLICO_SERVIDOR>:51820
AllowedIPs = 10.0.0.0/24

La dirección IP pública del servidor debe ser accesible desde el cliente. La directiva AllowedIPs define qué destinos pasan por el túnel. Con 10.0.0.0/24 solo pasan las direcciones internas de la VPN.

Lee también: Hardening SSH en Linux: Guía Completa 2026

Configurar el cliente móvil (QR code)

Para dispositivos Android o iOS, genera un QR code desde la configuración del cliente. Instala la herramienta:

sudo apt install qrencode

Crea un archivo de texto con la configuración del cliente (la misma vista arriba) y genera el QR code:

qrencode -t ansiutf8 < client_mobile.conf

Escanea el código con la app oficial de WireGuard en el smartphone. El túnel se configura en 5 segundos sin escribir nada.

Iniciar y probar el túnel

Inicia el túnel en el servidor:

sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0

Haz lo mismo en el cliente Linux. Verifica el estado del túnel:

sudo wg show

Comprueba que el handshake se haya realizado. Si ves un timestamp bajo Latest handshake, el túnel está activo. Haz una prueba de conectividad:

ping 10.0.0.1

Si recibes respuesta, tu WireGuard VPN en Linux está operativa. El tráfico hacia la subnet 10.0.0.0/24 pasa cifrado.

Enrutar todo el tráfico por la VPN (full tunnel)

Para dirigir todo el tráfico de navegación del cliente a través de la VPN, modifica la directiva AllowedIPs en el archivo de configuración del cliente:

AllowedIPs = 0.0.0.0/0

Esto enruta cada conexión a través del servidor. Asegúrate de que el servidor tenga el NAT configurado correctamente (como vimos en la sección PostUp del servidor) y que el firewall permita el tráfico de salida. Establece un DNS válido en la sección [Interface] del cliente, como DNS = 1.1.1.1, para evitar fugas de resolución DNS.

Añadir más clientes

Cada cliente necesita un par de claves único y una dirección IP dedicada. Genera claves en el nuevo cliente, luego añade un bloque [Peer] en el servidor:

[Peer]
PublicKey = <CLAVE_PUBLICA_CLIENTE_2>
AllowedIPs = 10.0.0.3/32

En el nuevo cliente, configura Address = 10.0.0.3/24. Reinicia la interfaz en el servidor para aplicar los cambios. Para evitar cortar las conexiones activas, recarga la configuración en caliente:

sudo wg syncconf wg0 <(wg-quick strip wg0)

Errores Comunes y Resolución de Problemas

Si el túnel no se establece, revisa estos puntos.

  1. Sin handshake: Verifica que la IP pública y el puerto del servidor sean correctos en el cliente. Comprueba que el firewall del servidor permita tráfico UDP en el puerto 51820.
  2. Handshake presente pero sin conectividad: Asegúrate de que el IP forwarding esté activo en el servidor (sysctl net.ipv4.ip_forward). Revisa las reglas iptables para el NAT.
  3. MTU incorrecto: Si el ping funciona pero la navegación no, reduce la MTU. Añade MTU = 1360 en la sección [Interface] del cliente.
  4. Cliente desconectado tras cambiar de red: WireGuard gestiona el roaming de forma nativa. Si el problema persiste, verifica que el cliente envíe datos para mantener activo el estado en el firewall stateful del servidor.

Para monitorizar el tráfico en tiempo real y verificar dónde se bloquea:

sudo tcpdump -i wg0

Consulta la documentación oficial para profundizar en los parámetros avanzados: WireGuard Official Documentation.

Conclusiones con Puntos Clave Operativos

WireGuard resuelve el problema de la complejidad de las VPN legacy. La configuración requiere 10 líneas frente a las 200 de OpenVPN. El handshake ocurre en menos de 100ms y el roaming entre redes no desconecta el túnel.

Tres puntos clave operativos:

  1. Usa claves de 256 bit y desactiva el acceso SSH por contraseña para proteger el servidor VPN.
  2. Habilita el full tunnel (AllowedIPs = 0.0.0.0/0) en clientes móviles para evitar fugas de tráfico en redes inseguras.
  3. Gestiona los clientes adicionales con direcciones IP estáticas y recarga la configuración en caliente con wg syncconf.

Configura WireGuard en tu VPS hoy. En 15 minutos tendrás una VPN personal estable y rápida.

Comparte este artículo:

Escrito por

Rosario Giordano

Rosario Giordano es administrador de sistemas y consultor de TI especializado en c iberseguridad y cloud, con más de 20 años de experiencia en la gestión de infraestructuras Linux empresariales. Sus áreas de especialización incluyen el hardening de SSH, plataformas Kubernetes , bases de datos PostgreSQL, virtualización con VMware/Proxmox y el cumplimiento de los marcos de seguridad NIS2 e ISO 27001.