Pulsa ESC para cerrar · Ctrl+K para abrir

Cómo crear una VPN en tu Home Lab con WireGuard

Accede a tu red local desde cualquier lugar del mundo, de forma segura y en menos de 45 minutos

Diagrama de VPN Home Lab con WireGuard — Conexión segura desde Internet a red local doméstica

Elige cómo quieres seguir esta guía:

1
2
3
4
5
6
7

Planificación y Requisitos

Paso 1 de 7 — ¿Qué necesitas para montar tu VPN?

Antes de empezar, veamos qué es una VPN y por qué querrías una en casa. Una VPN (Virtual Private Network) crea un túnel cifrado entre tu dispositivo y tu red local, permitiéndote acceder como si estuvieras en casa desde cualquier parte del mundo.

  • Servidor: Un equipo Linux en casa siempre encendido (Raspberry Pi, mini PC, máquina virtual, viejo portátil con Ubuntu...)
  • Router: Acceso a la configuración de tu router para abrir puertos (port forwarding)
  • IP pública: Tu ISP te asigna una IP pública (puede ser dinámica, lo resolveremos con DDNS)
  • Dispositivo cliente: Móvil, portátil o tablet desde donde conectarás (WireGuard tiene apps para todo)
📱 Tú (fuera de casa) 🌐 Internet 📡 Tu Router 🖥️ Servidor WireGuard 🏠 Red Local
¿Por qué WireGuard? Es más rápido, más simple y más seguro que OpenVPN. Su código fuente tiene ~4.000 líneas frente a las ~100.000 de OpenVPN. Está integrado en el kernel de Linux desde la versión 5.6.

Instalar WireGuard en el Servidor

Paso 2 de 7 — Preparar el servidor
  • Actualizar el sistema operativo:
sudo apt update && sudo apt upgrade -y
  • Instalar WireGuard:
sudo apt install wireguard -y
  • Verificar que el módulo del kernel está cargado:
sudo modprobe wireguard lsmod | grep wireguard
  • Habilitar IP forwarding (reenvío de paquetes):
# Editar sysctl.conf sudo nano /etc/sysctl.conf # Descomentar o añadir esta línea: net.ipv4.ip_forward = 1 # Aplicar cambios: sudo sysctl -p
En Raspberry Pi OS (Debian), el comando es exactamente el mismo. En Ubuntu 20.04+, WireGuard ya viene en los repositorios oficiales.

Generar Claves Criptográficas

Paso 3 de 7 — La base de la seguridad

WireGuard usa criptografía de curvas elípticas (Curve25519) para generar pares de claves. Cada dispositivo (servidor y cada cliente) necesita su propio par.

  • Generar claves del servidor:
# Crear directorio seguro sudo mkdir -p /etc/wireguard/keys cd /etc/wireguard/keys # Generar clave privada del servidor wg genkey | sudo tee server_private.key # Generar clave pública a partir de la privada sudo cat server_private.key | wg pubkey | sudo tee server_public.key # Proteger los archivos de claves sudo chmod 600 /etc/wireguard/keys/*
  • Generar claves del cliente (repetir por cada dispositivo):
# Clave del cliente 1 (ej: mi móvil) wg genkey | sudo tee client1_private.key sudo cat client1_private.key | wg pubkey | sudo tee client1_public.key
  • Anotar las claves (las necesitarás en los siguientes pasos)
¡NUNCA compartas las claves privadas! Las claves privadas son como contraseñas. Solo se comparten las claves públicas entre servidor y clientes.

Configurar el Servidor WireGuard

Paso 4 de 7 — El archivo de configuración principal
  • Identificar tu interfaz de red:
# Ver qué interfaz usa tu servidor para salir a Internet ip route | grep default # Resultado típico: "default via 192.168.1.1 dev eth0" # Tu interfaz es: eth0 (o wlan0 si usas WiFi)
  • Crear el archivo de configuración /etc/wireguard/wg0.conf:
sudo nano /etc/wireguard/wg0.conf
  • Escribir la configuración (sustituir las claves y la interfaz):
[Interface] # IP del servidor dentro del túnel VPN Address = 10.0.0.1/24 # Puerto de escucha (UDP) ListenPort = 51820 # Clave PRIVADA del servidor PrivateKey = <CONTENIDO_DE_server_private.key> # Reglas de firewall (NAT) — reemplazar eth0 por tu interfaz 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 # --- Clientes (Peers) --- [Peer] # Cliente 1: Mi móvil PublicKey = <CLAVE_PUBLICA_DEL_CLIENTE_1> AllowedIPs = 10.0.0.2/32
  • Iniciar y habilitar WireGuard:
# Iniciar la interfaz VPN sudo wg-quick up wg0 # Habilitar al arranque del sistema sudo systemctl enable wg-quick@wg0 # Verificar estado sudo wg show
La subred 10.0.0.0/24 es la red virtual del túnel VPN. El servidor es 10.0.0.1, y los clientes van desde 10.0.0.2 en adelante.

Router: Port Forwarding y DDNS

Paso 5 de 7 — Abrir la puerta desde Internet

Para que puedas conectarte desde fuera de casa, tu router necesita redirigir las conexiones VPN al servidor.

  • Acceder al panel del router (normalmente http://192.168.1.1)
  • Buscar la sección Port Forwarding / NAT / Virtual Servers
  • Crear una regla:
Configuración del Port Forwarding: Protocolo → UDP
Puerto externo → 51820
IP interna → IP de tu servidor (ej: 192.168.1.100)
Puerto interno → 51820
  • IP dinámica → Configurar DDNS (si tu IP pública cambia)
# Opción 1: Duck DNS (gratuito) — duckdns.org # Registrate y crea un subdominio: tudominio.duckdns.org # Instalar cron para actualizar la IP automáticamente: echo "*/5 * * * * curl -s 'https://www.duckdns.org/update?domains=tudominio&token=TU_TOKEN'" | crontab - # Opción 2: No-IP (noip.com) — gratuito con renovación mensual # Opción 3: Algunos routers tienen DDNS integrado (TP-Link, ASUS, etc.)
  • Asignar IP fija (reserva DHCP) al servidor en el router
Si tu IP pública es fija, no necesitas DDNS. Puedes comprobarlo en whatismyip.com — si cambia cada día, necesitas DDNS.

Configurar los Clientes

Paso 6 de 7 — Conectar tus dispositivos
  • Instalar WireGuard en el cliente:
Descargar WireGuard: 📱 AndroidGoogle Play Store
🍎 iOSApp Store
💻 Windowswireguard.com/install
🐧 Linuxsudo apt install wireguard
🍏 macOSMac App Store
  • Crear archivo de configuración del cliente:
[Interface] # IP del cliente dentro del túnel (única para cada dispositivo) Address = 10.0.0.2/32 # Clave PRIVADA del cliente PrivateKey = <CONTENIDO_DE_client1_private.key> # DNS (puedes usar el de tu red o uno público) DNS = 1.1.1.1, 8.8.8.8 [Peer] # Clave PÚBLICA del servidor PublicKey = <CONTENIDO_DE_server_public.key> # Dirección de tu casa (IP pública o dominio DDNS) Endpoint = tudominio.duckdns.org:51820 # Qué tráfico enviar por la VPN: # Solo red local: AllowedIPs = 10.0.0.0/24, 192.168.1.0/24 # Todo el tráfico (full tunnel): # AllowedIPs = 0.0.0.0/0 # Mantener conexión viva (importante detrás de NAT) PersistentKeepalive = 25
  • Importar la configuración en la app (archivo .conf o código QR)
Truco para móviles: Genera un código QR en el servidor para importar la configuración fácilmente:
sudo apt install qrencode && qrencode -t ansiutf8 < client1.conf

Verificación y Pruebas

Paso 7 de 7 — Confirmar que todo funciona
  • Conectar el cliente (activar la VPN en la app WireGuard)
  • Verificar en el servidor que el peer está conectado:
sudo wg show # Debe mostrar: latest handshake, transfer, y endpoint del cliente
  • Hacer ping al servidor desde el cliente:
# Ping al servidor VPN ping 10.0.0.1 # Ping a un dispositivo de la red local (ej: otro PC, NAS) ping 192.168.1.50 # Ping desde el servidor al cliente ping 10.0.0.2
  • Acceder a servicios locales (Home Assistant, NAS, cámaras, etc.)
  • Verificar que la conexión es estable y rápida
¡VPN funcionando! Ya tienes acceso remoto seguro a tu red local desde cualquier lugar del mundo. WireGuard mantendrá el túnel cifrado con latencia mínima.
Seguridad post-instalación: Configura un firewall (ufw), mantén el sistema actualizado, y limita los peers a los dispositivos que realmente necesitas.
Paso 1 de 7