WireGuard es un protocolo VPN moderno que se enfoca en simplicidad, rendimiento y criptografía de última generación. Fue incorporado al núcleo de Linux en 2020 y rápidamente ganó adopción gracias a su diseño minimalista, auditorías sencillas y compatibilidad multiplataforma (Windows, macOS, Android, iOS, BSD).
En este tema revisamos su arquitectura, los algoritmos implementados, ventajas frente a IPsec y otras VPN, casos de uso típico y un ejemplo práctico de configuración de túnel punto a punto.
WireGuard utiliza un enfoque orientado a claves públicas estáticas: cada nodo posee una clave privada y comparte su clave pública con los pares autorizados. No hay negociación compleja como en IKE; la seguridad se basa en un conjunto reducido y bien estudiado de algoritmos:
Este set fijo evita la complejidad de seleccionar algoritmos compatibles y facilita auditorías de seguridad.
WireGuard opera en la capa 3, encapsulando paquetes IP dentro de UDP (puerto por defecto 51820). Su funcionamiento básico es:
No existe un plano de control independiente: toda la configuración se realiza editando archivos o mediante comandos sencillos.
| Criterio | WireGuard | IPsec/L2TP |
|---|---|---|
| Complejidad | Configuraciones cortas (decenas de líneas). | Múltiples fases, políticas, transform sets. |
| Criptografía | Suite fija de algoritmos modernos. | Amplia selección; riesgo de configuraciones débiles. |
| Rendimiento | Excelente en dispositivos móviles y ARM. | Dependiente del hardware criptográfico disponible. |
| Cross-platform | Clientes oficiales en casi todos los sistemas. | Puede requerir software de terceros en algunos entornos. |
Además, su código base reducido (< 4000 líneas en el kernel) facilita revisiones, algo difícil de lograr con implementaciones históricas de IPsec o SSL VPN.
El siguiente bloque muestra dos archivos básicos (/etc/wireguard/wg0.conf) para un túnel entre la sede central y un servidor en la nube.
# Nodo A (sede central)
[Interface]
PrivateKey = YKJ1+vF0YyE0t...
Address = 10.20.0.1/24
ListenPort = 51820
[Peer]
PublicKey = j1L6mLyqC9n2...
AllowedIPs = 10.20.0.2/32
Endpoint = nube.example.com:51820
PersistentKeepalive = 25
# Nodo B (nube)
[Interface]
PrivateKey = j1L6mLyqC9n2...
Address = 10.20.0.2/24
[Peer]
PublicKey = YKJ1+vF0YyE0t...
AllowedIPs = 10.20.0.1/32, 192.168.50.0/24
Endpoint = sede.example.com:51820
Para activar la interfaz en Linux se ejecuta sudo wg-quick up wg0. En Windows se usa la aplicación oficial que importa archivos .conf con la misma sintaxis.
WireGuard aporta herramientas nativas como wg para consultar el estado de los peers, bytes transferidos y última conexión.
En PowerShell también se puede obtener el listado de túneles instalados:
Get-WireGuardTunnel |
Select-Object Name, Status, ListenPort, LastHandshake |
Format-Table -AutoSize
El comando forma parte del paquete oficial de WireGuard para Windows e informa si un túnel está activo y cuándo fue el último handshake, útil para auditorías.
AllowedIPs para evitar que un peer enrute tráfico no autorizado.PersistentKeepalive en clientes detrás de NAT para mantener el túnel operativo.WireGuard ofrece una alternativa eficiente y segura para redes modernas. Su simplicidad no solo acelera despliegues, también reduce errores de configuración, un factor crítico cuando se gestionan decenas de túneles distribuidos entre sedes físicas y nubes públicas.