¿Por qué WireGuard y no OpenVPN?
Lo he usado todo: OpenVPN, IPsec, L2TP, túneles SSH, soluciones comerciales y apaños de todo tipo. Y para un homelab, WireGuard tiene algo que engancha: es simple, rápido y muy fácil de mantener.
No es que OpenVPN no funcione. Funciona, y ha sido durante años la navaja suiza de las VPN. Pero WireGuard juega con otra filosofía: menos complejidad, menos piezas, claves públicas sencillas y una configuración mucho más limpia.
| OpenVPN | WireGuard |
|---|---|
| Configuración más pesada: certificados, CA, perfiles, múltiples opciones | Configuración basada en claves públicas y privadas |
| Corre normalmente en espacio de usuario | En Linux moderno está integrado en el kernel |
| Más flexible, pero también más complejo | Menos opciones, pero mucho más simple de operar |
| Muy maduro y compatible | Moderno, rápido y muy cómodo para acceso remoto |
| Puede ser más pesado de mantener | Ideal para túneles limpios entre dispositivos |
WireGuard está integrado en el kernel Linux desde la versión 5.6. Eso no significa que “todo sea magia”, pero sí que en Linux moderno funciona de forma muy eficiente y con una superficie de configuración bastante pequeña.
También tiene una ventaja muy práctica: el roaming. Puedes pasar de WiFi a 4G/5G y, en muchos casos, el túnel se recupera sin que tengas que hacer nada. Para móviles y portátiles, esto se nota muchísimo.
Mi resumen sería este: OpenVPN sigue siendo válido, pero si hoy monto una VPN para entrar a mi homelab, mi primera opción es WireGuard.
¿Qué necesitas?
- Docker y Docker Compose instalados en tu servidor homelab.
- Un servidor, mini PC, NAS o Raspberry Pi encendido 24/7.
- Un dominio o DDNS para no depender de recordar tu IP pública. DuckDNS, No-IP o un subdominio propio sirven perfectamente.
- Puerto UDP 51820 abierto en tu router y redirigido al servidor donde corre WireGuard.
- Cliente WireGuard en los dispositivos desde los que te conectarás: iOS, Android, Windows, macOS o Linux.
- IP pública real. Si estás detrás de CGNAT, el port forwarding no funcionará salvo que tu operador te saque de CGNAT o uses una alternativa como Tailscale, ZeroTier o un VPS intermedio.
Importante: solo necesitas abrir el puerto UDP de WireGuard. No expongas el panel web de wg-easy a Internet. El panel debe quedar accesible solo desde tu red local o, mejor todavía, desde la propia VPN.
Paso 1: Elige cómo montar WireGuard
Hay varias formas de montar WireGuard en un homelab.
Opción A: WireGuard puro
Instalas WireGuard directamente en el host y gestionas las claves y peers a mano. Es la forma más limpia técnicamente, pero también la que exige entender mejor la configuración.
Ventaja: control total.
Inconveniente: más trabajo manual.
Opción B: linuxserver/wireguard
Es una imagen Docker muy usada, mantenida por LinuxServer.io. Es ligera, configurable y encaja bien en un homelab si ya estás acostumbrado a editar ficheros.
Ventaja: buena opción si quieres Docker sin interfaz gráfica.
Inconveniente: menos cómoda para crear clientes desde móvil o para usuarios no técnicos.
Opción C: wg-easy
Es la opción que usaría para empezar. Te monta WireGuard y además añade una interfaz web para crear clientes, descargar configuraciones y generar códigos QR.
Ojo: muchos tutoriales antiguos usan la imagen weejewel/wg-easy y variables como PASSWORD, WG_HOST o WG_DEFAULT_DNS. Eso corresponde al enfoque clásico de versiones anteriores. Para un artículo actualizado, yo usaría la imagen actual:
ghcr.io/wg-easy/wg-easy
Voy con wg-easy, porque es la opción que menos fricción tiene para un homelab doméstico.
Paso 2: docker-compose.yml actualizado para wg-easy
Crea la carpeta:
mkdir -p ~/docker/wireguard
cd ~/docker/wireguard
Crea el archivo:
nano docker-compose.yml
Y pega este contenido:
services:
wg-easy:
image: ghcr.io/wg-easy/wg-easy:latest
container_name: wg-easy
ports:
# Puerto VPN WireGuard
- "51820:51820/udp"
# Panel web de wg-easy.
# No lo expongas a Internet. Solo red local o reverse proxy protegido.
- "51821:51821/tcp"
volumes:
- "./etc_wireguard:/etc/wireguard"
- "/lib/modules:/lib/modules:ro"
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
- net.ipv4.ip_forward=1
- net.ipv4.conf.all.src_valid_mark=1
environment:
# En versiones recientes, si accedes por HTTP sin reverse proxy HTTPS,
# puede ser necesario permitirlo explícitamente.
# Úsalo solo en red local.
INSECURE: "true"
# Opcional: puerto interno del panel web.
PORT: "51821"
# Opcional: idioma/interfaz.
LANG: "es"
restart: unless-stopped
Esta configuración está pensada para un escenario doméstico: servidor en tu LAN, puerto UDP 51820 publicado hacia Internet y panel web solo para uso interno.
Después de levantarlo, la configuración inicial de wg-easy se completa desde la interfaz web. Ahí podrás definir el endpoint público, DNS, rangos de la VPN y clientes. Este cambio es importante porque en versiones modernas wg-easy ha movido parte de la configuración desde variables de entorno hacia el panel y su base de datos interna.
Detalle de la configuración
| Elemento | Qué hace |
|---|---|
51820/udp |
Puerto por el que escuchará WireGuard. Es el único que debes abrir en el router. |
51821/tcp |
Panel web de wg-easy. No debería estar expuesto a Internet. |
/etc/wireguard |
Configuración persistente de WireGuard/wg-easy. |
/lib/modules:/lib/modules:ro |
Permite al contenedor acceder a módulos del kernel necesarios según el host. |
NET_ADMIN |
Capacidad necesaria para gestionar interfaces de red. |
SYS_MODULE |
Puede ser necesario para cargar módulos en determinados sistemas. |
net.ipv4.ip_forward=1 |
Permite reenviar tráfico entre la VPN y la red local. |
INSECURE=true |
Permite acceso HTTP al panel. Úsalo solo en LAN o detrás de una protección adecuada. |
Si vas a publicar el panel detrás de un reverse proxy, usa HTTPS, autenticación fuerte y, si puedes, 2FA. Pero para un homelab normal, yo directamente no publicaría el panel. Lo dejaría solo en red local.
Paso 3: Arranca wg-easy y entra al panel
Levanta el contenedor:
docker compose up -d
Comprueba que está corriendo:
docker ps | grep wg-easy
Revisa logs si algo falla:
docker logs wg-easy
Ahora abre tu navegador:
http://IP-DE-TU-SERVIDOR:51821

En el primer acceso, wg-easy te pedirá completar la configuración inicial. Ahí tendrás que definir:
- Host público o DDNS: por ejemplo
tudominio.duckdns.org. - Puerto WireGuard: normalmente
51820. - Red VPN: por ejemplo
10.8.0.0/24. - DNS para clientes: puedes poner tu Pi-hole, AdGuard Home o el propio DNS del router.
- Allowed IPs: qué tráfico se enviará por el túnel.
- Usuario/contraseña del panel y, si está disponible, 2FA.
Si tu versión de wg-easy todavía usa variables antiguas tipo WG_HOST, WG_DEFAULT_DNS o PASSWORD_HASH, revisa la documentación de la versión exacta que estés usando. Este proyecto ha cambiado bastante entre versiones, y mezclar un Compose antiguo con una imagen nueva es una receta perfecta para perder una tarde.
Paso 4: Configura bien Allowed IPs
Este punto es clave y mucha gente lo copia sin entenderlo.
Allowed IPs define qué tráfico enviará el cliente por el túnel WireGuard. No es solo “a qué redes puedes acceder”; también afecta al enrutamiento del cliente.
Opción A: solo acceder a tu red de casa
Si quieres que el móvil o portátil acceda solo a tu LAN doméstica, por ejemplo 192.168.1.0/24, usarías algo así:
AllowedIPs = 192.168.1.0/24, 10.8.0.0/24
Con esto, cuando estés fuera podrás entrar a tus servicios internos, NAS, Home Assistant, Pi-hole, AdGuard Home, router, etc. Pero el resto de Internet seguirá saliendo por la conexión del hotel, cafetería o red móvil.
Opción B: enviar todo el tráfico por casa
Si quieres que absolutamente todo el tráfico del cliente pase por tu casa, entonces usarías:
AllowedIPs = 0.0.0.0/0
y, si usas IPv6:
AllowedIPs = 0.0.0.0/0, ::/0
Esto convierte tu WireGuard en una VPN de túnel completo. Es útil en WiFi públicas porque todo tu tráfico sale cifrado hasta tu casa y luego navega desde tu conexión doméstica.
Pero tiene una consecuencia: tu velocidad dependerá de la subida de tu casa. Si tienes 1 Gbps de descarga pero solo 100 Mbps de subida, desde fuera no vas a navegar a 1 Gbps por la VPN.
Mi recomendación
Para empezar, usaría túnel parcial:
AllowedIPs = 192.168.1.0/24, 10.8.0.0/24
Y si luego quieres que todo el tráfico pase por casa, crearía otro perfil separado llamado algo como:
Móvil Julio - Full Tunnel
Así tienes dos modos: uno para entrar a tu homelab y otro para navegar como si estuvieras en casa.
Paso 5: Abre el puerto en el router
Este es el paso que más suele fallar.
Tienes que entrar en el router y crear una redirección de puertos:
- Puerto externo:
51820 - Puerto interno:
51820 - Protocolo:
UDP - IP destino: IP del servidor donde corre wg-easy

Importante: no abras 51821/tcp hacia Internet. Ese es el panel web. El único puerto que debería estar publicado hacia fuera es 51820/udp.
Nota sobre CGNAT
En España, algunas operadoras usan CGNAT en determinadas tarifas o modalidades. Si estás detrás de CGNAT, abrir puertos en tu router no servirá, porque tu router no tiene una IP pública real en la WAN.
Para comprobarlo bien:
- Entra en tu router y mira la IP WAN o IP de Internet.
- Entra en una web tipo “cuál es mi IP”.
- Compara ambas.
Si la IP WAN del router no coincide con la IP pública que ve Internet, probablemente estás detrás de CGNAT o de una doble NAT.
También sospecha si tu WAN cae en rangos privados o compartidos como:
10.0.0.0/8172.16.0.0/12192.168.0.0/16100.64.0.0/10— rango típico de CGNAT
Soluciones:
- Pedir a tu operadora que te saque de CGNAT o te asigne IP pública.
- Usar Tailscale o ZeroTier, que funcionan mejor cuando no puedes abrir puertos.
- Montar un VPS como punto intermedio con WireGuard.
- Usar una VPN comercial con port forwarding, si encaja con tu caso.
Paso 6: Crea un cliente y conéctate
En el panel de wg-easy:
- Haz clic en Add client.
- Ponle un nombre claro:
Móvil Julio,Portátil trabajo,iPad, etc. - Descarga el archivo de configuración o escanea el QR.
Desde el móvil
- Instala la app oficial WireGuard desde App Store o Google Play.
- Abre la app.
- Toca +.
- Elige Escanear desde código QR.
- Escanea el QR de wg-easy.
- Activa el túnel.

Desde Windows, macOS o Linux
- Descarga el cliente oficial desde wireguard.com/install.
- Importa el archivo
.confgenerado por wg-easy. - Activa el túnel.
No compartas el archivo .conf por WhatsApp, correo sin cifrar o canales inseguros. Ese archivo contiene la clave privada del cliente. Quien tenga ese fichero puede conectarse como ese dispositivo.
Paso 7: Prueba de conexión
Prueba siempre desde fuera de casa. Si lo pruebas conectado al mismo WiFi donde está el servidor, puedes engañarte con comportamientos raros de NAT loopback o resolución local.
Desactiva el WiFi del móvil, usa datos móviles y activa WireGuard.
Después prueba:
ping 10.8.0.1
ping 192.168.1.1
ping IP-DE-TU-PIHOLE
ping IP-DE-TU-ADGUARD
También puedes probar en navegador:
http://IP-DE-HOME-ASSISTANT:8123
http://IP-DE-ADGUARD:8081
http://IP-DE-UPTIME-KUMA:3001
Si responde, ya estás dentro de tu red como si estuvieras en casa.

Paso 8: WireGuard + AdGuard Home o Pi-hole
Este es el truco que realmente marca la diferencia y convierte tu VPN en algo más que “acceder al NAS desde fuera”.
Si en la configuración del cliente pones como DNS tu AdGuard Home o Pi-hole, cuando te conectes por VPN desde fuera:
- Resolverás DNS a través de tu filtro casero.
- Bloquearás muchos anuncios y rastreadores igual que en casa.
- Aplicarás tus listas de seguridad, malware o phishing.
- No dependerás del DNS del hotel, aeropuerto, cafetería o red móvil.
Ejemplo en el cliente WireGuard:
[Interface]
PrivateKey = CLAVE_PRIVADA_DEL_CLIENTE
Address = 10.8.0.2/24
DNS = 192.168.1.100
donde 192.168.1.100 sería la IP de tu AdGuard Home o Pi-hole.
Matiz importante: si usas túnel parcial y solo mandas 192.168.1.0/24 por la VPN, asegúrate de que la IP de tu DNS está dentro de esas rutas. Si no, el cliente no podrá llegar al DNS.
Y si configuras túnel completo con 0.0.0.0/0, entonces todo el tráfico irá por casa, incluido DNS y navegación.
Para mí, esta combinación es de las mejores cosas que puedes montar en un homelab: acceso remoto privado + DNS filtrado + servicios internos sin exponerlos a Internet.
Troubleshooting — lo que suele fallar
“No conecta, timeout”
- Comprueba que el puerto
51820/udpestá redirigido al servidor correcto. - Comprueba que no estás detrás de CGNAT.
- Verifica que tu DDNS apunta a tu IP pública actual.
- Revisa el firewall del servidor.
- Revisa logs:
docker logs wg-easy.
No te obsesiones con comprobar UDP desde fuera con cualquier web de “port check”. UDP no se comporta como TCP y muchas pruebas externas dan falsos negativos. La prueba buena es conectar un cliente real desde fuera y ver si hay handshake.
“Conecta, pero no veo mi red local”
- Revisa los
AllowedIPsdel cliente. - Comprueba que has incluido tu LAN, por ejemplo
192.168.1.0/24. - Asegúrate de que el reenvío IP está activo.
- Revisa si el firewall del host o del router bloquea tráfico desde la red VPN.
- Comprueba que la red VPN no se solapa con la red desde la que te conectas.
Este último punto es típico: si tu casa usa 192.168.1.0/24 y el hotel también usa 192.168.1.0/24, puedes tener conflictos de rutas. Para evitarlo, a veces merece la pena usar en casa una red menos típica, como 192.168.50.0/24 o 10.10.10.0/24.
“Conecta, pero no tengo Internet”
Si estás usando túnel completo con AllowedIPs = 0.0.0.0/0, necesitas que el servidor haga NAT/masquerading hacia Internet. wg-easy normalmente lo gestiona, pero si has personalizado reglas o red, puede fallar.
Revisa:
- Que el contenedor tiene permisos de red adecuados.
- Que
ip_forwardestá activo. - Que no has roto las reglas de firewall/NAT.
- Que el DNS configurado en el cliente responde.
“La conexión va lenta”
Primero mide bien. La velocidad desde fuera dependerá de:
- La subida de tu conexión de casa.
- La cobertura móvil o WiFi desde donde te conectas.
- El MTU.
- La CPU del servidor.
- Si estás usando túnel completo o parcial.
Si notas cortes o carga rara en redes móviles, prueba a bajar el MTU en el cliente:
[Interface]
MTU = 1280
1280 es un valor conservador que suele ayudar en redes móviles, túneles encadenados o conexiones con fragmentación.
“El DNS no filtra cuando estoy fuera”
- Comprueba que el cliente tiene
DNS = IP-DE-TU-ADGUARD-O-PIHOLE. - Comprueba que esa IP está incluida en las rutas de la VPN.
- Revisa si el móvil tiene DNS privado activado.
- Revisa si el navegador usa DNS-over-HTTPS propio.
- Mira el Query Log de AdGuard Home o Pi-hole mientras navegas desde fuera.
Seguridad: no te olvides de esto
- Cada cliente debe tener su propia clave. No reutilices el mismo perfil para varios dispositivos.
- Si pierdes un dispositivo, revoca su cliente. No basta con cambiar la contraseña del panel.
- No compartas archivos
.confpor canales inseguros. Contienen claves privadas. - No expongas el panel web de wg-easy a Internet. El puerto que se abre fuera es el UDP de WireGuard, no la UI.
- Actualiza el contenedor:
docker compose pull
docker compose up -d
- Haz backup del volumen de configuración. Ahí están tus peers y claves.
- Activa 2FA si tu versión de wg-easy lo permite.
- Revisa clientes de vez en cuando. Si hay dispositivos que ya no usas, bórralos.
WireGuard es seguro, pero una mala operación puede fastidiar el invento. La seguridad no termina cuando el túnel conecta.
Alternativa: Tailscale cuando no puedes abrir puertos
WireGuard autogestionado asume que tienes una IP pública o al menos una forma de que el cliente llegue a tu servidor. Si estás detrás de CGNAT y no puedes salir de ahí, Tailscale merece mucho la pena.
Tailscale usa WireGuard por debajo, pero añade una capa de coordinación, descubrimiento de peers, NAT traversal, MagicDNS y relays DERP cuando no puede establecer conexión directa.
La ventaja es clara:
- No necesitas abrir puertos.
- Funciona muy bien detrás de CGNAT.
- La configuración es mucho más sencilla.
- Puedes añadir dispositivos en minutos.
- El tráfico sigue cifrado extremo a extremo con WireGuard; los relays no pueden leerlo.
La pega también hay que decirla:
- Dependes de la capa de coordinación de Tailscale.
- Si el tráfico va por relay, puede haber más latencia y menos velocidad.
- No tienes el mismo control total que con WireGuard puro.
Mi criterio: si tienes IP pública y quieres control total, WireGuard con wg-easy es perfecto. Si estás detrás de CGNAT o quieres cero complicaciones, Tailscale es una alternativa excelente.
Resumen
WireGuard en Docker con wg-easy te da una VPN personal, rápida y muy cómoda de gestionar. No necesitas exponer RDP, SSH, Home Assistant, Uptime Kuma, Bitwarden/Vaultwarden o AdGuard Home directamente a Internet. Los dejas internos y entras por VPN.
| Antes | Después |
|---|---|
| Servicios internos inaccesibles fuera de casa | Acceso seguro por VPN |
| Riesgo de exponer SSH, RDP o paneles web | Un único puerto UDP para WireGuard |
| DNS del hotel, cafetería o red móvil | Tu propio DNS filtrado con AdGuard Home o Pi-hole |
| Configuraciones manuales complejas | Clientes con QR desde wg-easy |
Lo que has montado:
- VPN personal con WireGuard.
- Panel web para gestionar clientes sin pelearte con claves a mano.
- Acceso remoto a tu homelab sin exponer servicios internos.
- Posibilidad de usar tu DNS filtrado desde fuera.
- Una base muy sólida para trabajar de forma segura desde cualquier sitio.
Para mí, WireGuard es una de esas piezas que cuando la montas bien se queda para siempre. No hace ruido, no pide atención todos los días y te da algo muy valioso: entrar a tu red desde fuera sin abrir media casa a Internet.
¿Te ha funcionado? ¿Has tenido problemas con CGNAT, el port forwarding o el DNS por VPN? Cuéntalo en los comentarios — estas experiencias reales ayudan más que cualquier tutorial perfecto.
Nota de seguridad: Este tutorial asume un uso responsable de la VPN. Una VPN te da acceso remoto a tu red privada, no es una excusa para saltarte políticas, acceder a sistemas ajenos o hacer actividades ilegales. Úsala como herramienta profesional y mantenla actualizada.
Lectura desde Gestión TIC
Una VPN no es solo una forma cómoda de entrar desde fuera. Desde gestión TIC, tiene que ver con acceso remoto seguro, control de exposición, segmentación y permisos. La pregunta no es solo si puedo conectarme, sino quién puede hacerlo, desde dónde, a qué servicios llega y qué impacto tendría una mala configuración. En un homelab se puede probar con libertad, pero la lógica es la misma que en cualquier entorno serio: abrir lo mínimo, controlar bien los accesos y entender qué se está exponiendo.
Artículos relacionados
Activos TIC: el inventario que sí sirve para algo
6 Jul 2026 · CIO técnico
Gestión de riesgos TIC sin humo: antes del Excel, entiende tu tecnología
30 Jun 2026 · CIO técnico
Corre modelos de IA locales en tu homelab con Ollama
29 Jun 2026 · Docker