WireGuard es un protocolo VPN moderno integrado en el kernel de Linux desde la versión 5.6. Comparado con OpenVPN, es mucho más sencillo de configurar, más rápido y tiene una superficie de ataque considerablemente menor (~4.000 líneas de código frente a ~100.000 de OpenVPN).
¿Prefieres OpenVPN? Consulta Cómo configurar un servidor y cliente OpenVPN en Linux.
Cómo funciona WireGuard
WireGuard usa pares de claves pública/privada — similar a las claves SSH. Cada nodo (servidor o cliente) tiene su propio par de claves. Añades la clave pública de un nodo a tu configuración y WireGuard se encarga del resto. No hay certificados, no hay CA, no hay listas de revocación.
Instalar WireGuard
Debian / Ubuntu (kernel 5.6+, instalaciones actuales):
sudo apt install wireguard
RHEL / Fedora / Rocky Linux:
sudo dnf install wireguard-tools
Configuración del servidor
1. Generar las claves del servidor
wg genkey | tee servidor_privada.key | wg pubkey > servidor_publica.key
Mantén servidor_privada.key en secreto. Compartirás servidor_publica.key con los clientes.
2. Crear la configuración del servidor
Crea /etc/wireguard/wg0.conf:
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = <contenido de servidor_privada.key>
# Habilitar enrutamiento — reenviar todo el tráfico del cliente
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
Reemplaza eth0 con la interfaz de red pública de tu servidor (verifica con ip link show).
3. Habilitar el reenvío de IP
echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
4. Iniciar WireGuard
sudo systemctl enable --now wg-quick@wg0
sudo systemctl status wg-quick@wg0
Configuración del cliente
1. Generar las claves del cliente
Ejecuta esto en el equipo cliente:
wg genkey | tee cliente_privada.key | wg pubkey > cliente_publica.key
2. Añadir el cliente como peer en el servidor
Agrega al final de /etc/wireguard/wg0.conf en el servidor:
[Peer]
PublicKey = <contenido de cliente_publica.key>
AllowedIPs = 10.0.0.2/32
Recarga la configuración del servidor sin interrumpir conexiones existentes:
sudo wg syncconf wg0 <(wg-quick strip wg0)
3. Crear la configuración del cliente
Crea /etc/wireguard/wg0.conf en el cliente:
[Interface]
Address = 10.0.0.2/24
PrivateKey = <contenido de cliente_privada.key>
DNS = 1.1.1.1
[Peer]
PublicKey = <contenido de servidor_publica.key>
Endpoint = 12.34.56.78:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
AllowedIPs = 0.0.0.0/0enruta todo el tráfico a través de la VPNPersistentKeepalive = 25mantiene el túnel activo a través de NAT
4. Iniciar el cliente
sudo systemctl enable --now wg-quick@wg0
Verificar la conexión
En el servidor, comprueba los peers conectados y el tráfico:
sudo wg show
En el cliente, verifica que tu IP pública haya cambiado:
curl ifconfig.me
Agregar más clientes
Repite los pasos del cliente para cada nuevo dispositivo. Genera un nuevo par de claves, asigna una nueva IP (10.0.0.3/32, 10.0.0.4/32, etc.) y añade un bloque [Peer] a la configuración del servidor.
WireGuard vs OpenVPN
| WireGuard | OpenVPN | |
|---|---|---|
| Configuración | Par de claves simple | PKI con CA y certificados |
| Velocidad | Muy rápido (nivel kernel) | Más lento (espacio de usuario) |
| Tamaño del código | ~4.000 líneas | ~100.000 líneas |
| Integración en kernel | Integrado (Linux 5.6+) | Módulo o espacio de usuario |
| Soporte móvil | Excelente (apps oficiales) | Bueno |
| Historial de auditorías | Auditado en 2017 | Largo historial |
| Mejor para | La mayoría de nuevas instalaciones | PKI empresarial compleja |
Véase también
- Cómo configurar un servidor y cliente OpenVPN en Linux
man wgyman wg-quick— referencia completa