WireGuard VPN: accede a tu servidor doméstico desde cualquier lugar
Etiquetas: vpn,wireguard,seguridad,red,docker,linuxUno de los problemas clásicos de tener un servidor en casa es el acceso remoto seguro. Abrir puertos SSH directamente al mundo es una mala idea — lo ves en los logs de auth: cientos de intentos al día. La solución elegante es una VPN, y WireGuard es hoy la mejor opción disponible.
¿Por qué WireGuard?
Comparado con OpenVPN o IPSec:
- Mucho más rápido — está integrado en el kernel de Linux desde la versión 5.6
- Configuración mínima — el config del servidor cabe en 10 líneas
- Criptografía moderna — ChaCha20, Curve25519, BLAKE2 (ver protocolo WireGuard)
- Un solo puerto UDP — fácil de abrir en el router
Arquitectura
[Móvil/Portátil] ←── WireGuard túnel UDP 51820 ──→ [Router casa] → [Servidor doméstico 192.168.1.X]
10.10.0.2 10.10.0.1
El servidor actúa como concentrador VPN. Cuando me conecto, obtengo la IP 10.10.0.2 y puedo acceder a cualquier servicio de la red local como si estuviera en casa.
Instalación en Ubuntu
sudo apt-get install -y wireguard
WireGuard viene en los repos de Ubuntu desde 20.04. En versiones más nuevas el módulo del kernel está incluido de serie.
Generación de claves
WireGuard usa criptografía de clave pública. Generamos un par para el servidor y otro para cada cliente:
# Claves del servidor
wg genkey | tee server_private.key | wg pubkey > server_public.key
# Claves del cliente (móvil o portátil)
wg genkey | tee client_private.key | wg pubkey > client_public.key
Importante: las claves privadas no salen nunca del dispositivo que las genera. Solo se intercambian las claves públicas.
Configuración del servidor
Archivo /etc/wireguard/wg0.conf:
[Interface]
Address = 10.10.0.1/24
ListenPort = 51820
PrivateKey = <CLAVE_PRIVADA_SERVIDOR>
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eno1 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eno1 -j MASQUERADE
[Peer]
# Móvil / portátil
PublicKey = <CLAVE_PUBLICA_CLIENTE>
AllowedIPs = 10.10.0.2/32
Las reglas de iptables en PostUp/PostDown habilitan el reenvío de paquetes (NAT) para que el cliente pueda llegar a la red local, no solo al servidor.
Permisos estrictos al archivo:
sudo chmod 600 /etc/wireguard/wg0.conf
Habilitar IP forwarding
Sin esto, el servidor no reenvía paquetes entre interfaces:
# Temporal (hasta reinicio)
sudo sysctl -w net.ipv4.ip_forward=1
# Permanente
sudo sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf
Arrancar WireGuard
sudo systemctl enable --now wg-quick@wg0
Verificar que está activo:
sudo wg show wg0
Debe mostrar la interfaz escuchando en el puerto 51820 y el peer registrado.
Firewall (UFW)
sudo ufw allow 51820/udp
sudo ufw reload
Configuración del cliente
Archivo wg-casa.conf para el portátil o móvil:
[Interface]
Address = 10.10.0.2/24
PrivateKey = <CLAVE_PRIVADA_CLIENTE>
DNS = 1.1.1.1
[Peer]
PublicKey = <CLAVE_PUBLICA_SERVIDOR>
Endpoint = <IP_PUBLICA_CASA>:51820
AllowedIPs = 10.10.0.0/24
PersistentKeepalive = 25
AllowedIPs = 10.10.0.0/24 significa que solo el tráfico hacia la red VPN va por el túnel — el resto de internet sigue saliendo directo. Si quisieras enrutar todo el tráfico (incluyendo navegación web) por casa, usarías 0.0.0.0/0.
PersistentKeepalive = 25 mantiene la conexión viva aunque no haya tráfico — útil en redes móviles que cierran conexiones UDP inactivas.
Router: port forwarding
En el router hay que redirigir el puerto 51820 UDP a la IP local del servidor (p.ej. 192.168.1.X). Suele estar en Configuración → NAT → Redirección de puertos.
QR para el móvil
En lugar de teclear el config en el móvil, generamos un QR:
sudo apt-get install -y qrencode
qrencode -t ansiutf8 < cliente.conf
La app WireGuard (iOS/Android) lo escanea directamente.
Verificación
Para probar que funciona de verdad, hay que conectarse desde una red diferente a la de casa — por ejemplo, datos móviles:
- Desactiva el wifi del móvil
- Activa el túnel WireGuard en la app
- Accede a un servicio del servidor por IP local (ej.
http://192.168.1.X)
Si responde, el túnel está funcionando correctamente.
Seguridad adicional
- Las claves privadas nunca viajan por la red — solo se intercambian públicas
- Sin usuarios ni contraseñas — autenticación puramente criptográfica
- Un peer = una clave pública — si pierdes un dispositivo, eliminas su
[Peer]del servidor y ya no tiene acceso - Fail2ban no aplica — WireGuard descarta silenciosamente paquetes inválidos sin responder
Añadir más clientes
Para cada nuevo dispositivo, generamos un nuevo par de claves y añadimos un bloque [Peer] adicional en el servidor con su clave pública y una IP diferente (10.10.0.3, 10.10.0.4…):
sudo wg set wg0 peer <NUEVA_CLAVE_PUBLICA> allowed-ips 10.10.0.3/32
sudo wg-quick save wg0
No hace falta reiniciar el servicio — WireGuard añade peers en caliente.
Modo túnel completo: todo el tráfico por la VPN
Por defecto, el cliente solo enruta el tráfico de la red local (10.10.0.0/24) por el túnel. Si quieres que toda la navegación del dispositivo pase por tu servidor — útil en redes públicas, hoteles o WiFi desconocido — cambia AllowedIPs en el cliente:
# Solo red local (por defecto)
AllowedIPs = 10.10.0.0/24
# Todo el tráfico (modo privacidad total)
AllowedIPs = 0.0.0.0/0, ::/0
Con 0.0.0.0/0 toda la navegación sale por tu IP doméstica. Ventajas: privacidad en redes públicas, tu IP real en todo momento. Inconveniente: tu velocidad de subida en casa limita la navegación del dispositivo remoto.
En la app WireGuard (móvil o escritorio) puedes cambiar esto editando el túnel sin necesidad de tocar el servidor.
Con esto tengo acceso completo a mi red doméstica desde cualquier lugar, sin exponer ningún puerto adicional al mundo y con criptografía moderna. El siguiente paso natural es montar backups automáticos desde el VPS hacia el servidor de casa, usando este túnel como canal seguro.
Equipamiento recomendado
- Raspberry Pi 3 B+ — Servidor ligero de bajo consumo para empezar tu homelab
- Raspberry Pi 4 (4GB) — La base perfecta para homelab, Docker y monitorización
Enlaces de afiliado. Sin coste extra para ti.