Wireguard: vpn moderna simple y segura
Si alguna vez has tenido que configurar una VPN tradicional como IPsec u OpenVPN, sabes lo tedioso que puede ser. Certificados, configuraciones enormes, y un rendimiento que a veces deja mucho que desear. WireGuard es todo lo contrario: simple, rápido, y con una seguridad que da tranquilidad.
¿Qué es WireGuard?
WireGuard es un protocolo VPN moderno, de código abierto, que se configura con un par de llaves — como SSH — y ocupa solo ~4,000 líneas de código. Corre directamente en el kernel de Linux (y también en Windows, macOS, BSD, iOS y Android), lo que lo hace increíblemente eficiente.
Cómo funciona
WireGuard usa algo llamado Cryptokey Routing: básicamente asocias una clave pública con las direcciones IP que ese peer puede usar. Cuando envías un paquete, lo cifras con la clave del peer correcto y lo mandas a su endpoint. Cuando recibes uno, lo descifras, verificas que venga de quien dice ser, y lo dejas pasar si la IP de origen está permitida. Simple.
flowchart TD
subgraph Server[Servidor WireGuard]
WG_S[wg0]
P1["Peer A - 10.0.0.2/32"]
P2["Peer B - 10.0.0.3/32"]
P3["Peer C - 10.0.0.4/32"]
WG_S --> P1 & P2 & P3
end
subgraph Clients[Clientes]
C1[Móvil - 10.0.0.2]
C2[Laptop - 10.0.0.3]
C3[IoT - 10.0.0.4]
end
P1 -.->|Túnel cifrado UDP :51820| C1
P2 -.->|Túnel cifrado UDP :51820| C2
P3 -.->|Túnel cifrado UDP :51820| C3
Cómo usarlo
En el servidor:
# Instalar
sudo apt install wireguard
# Generar llaves
wg genkey | tee server_private.key | wg pubkey > server_public.key
/etc/wireguard/wg0.conf:
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = <server_private.key>
[Peer]
PublicKey = <public_key_cliente>
AllowedIPs = 10.0.0.2/32
En el cliente:
[Interface]
PrivateKey = <clave_privada_cliente>
Address = 10.0.0.2/24
DNS = 10.2.2.100
[Peer]
PublicKey = <public_key_servidor>
Endpoint = <ip-servidor>:51820
AllowedIPs = 0.0.0.0/0
sudo wg-quick up wg0
Y ya. Túnel activo.
Lo que me gusta de WireGuard
- Roaming automático: cambias de red (WiFi a 4G) y la conexión no se cae.
- No contamina: si un paquete no se puede descifrar, simplemente lo ignora. Ni siquiera responde.
- Rápido: al vivir en el kernel, el rendimiento es cercano al de la interfaz física.
- Perfect Forward Secrecy: si alguien obtiene tu clave privada después, no puede descifrar sesiones pasadas.
En mi proyecto
WireGuard es la base de conectividad de mi VPN + DNS - Infraestructura de Red Centralizada. Ahí lo uso junto con Pi-hole para que cualquier dispositivo — esté donde esté — tenga acceso a la red interna con el mismo DNS, el mismo filtrado, y la misma seguridad, todo por un túnel cifrado que apenas nota que está ahí.
Relacionado: - VPN + DNS - Infraestructura de Red Centralizada - WireGuard.com - Quick Start