Quieres entrar en el NAS, en la cámara o en el router de casa mientras estás de viaje, pero no te apetece abrir un puerto por cada servicio. La solución limpia es una VPN propia: un único punto de entrada cifrado que te mete en tu red como si estuvieras en el sofá. En esta guía montarás una VPN WireGuard en una Raspberry Pi con PiVPN, sabrás qué hacer si tu IP cambia y cómo detectar el gran obstáculo: el CG-NAT.
En resumen
- WireGuard es una VPN moderna, rápida y sencilla; en la Raspberry Pi se instala en minutos con PiVPN.
- Solo necesitas reenviar un puerto UDP (por defecto el 51820) y un nombre de DNS dinámico si tu IP pública cambia.
- Si tu operador usa CG-NAT, el reenvío no funciona: pide IP pública o usa otra estrategia.
Qué es WireGuard y por qué elegirlo
WireGuard es un protocolo de VPN que forma parte del núcleo de Linux desde la versión 5.6. Frente a OpenVPN o IPsec tiene tres ventajas claras:
- Poco código: es mucho más fácil de auditar y tiene menos superficie de ataque.
- Rápido: usa criptografía moderna (Curve25519, ChaCha20-Poly1305) y va muy bien incluso en una Raspberry Pi modesta.
- Silencioso: no responde a paquetes que no estén firmados con una clave válida. Un escaneo de puertos ni siquiera ve que hay algo escuchando.
Funciona con pares de claves, como SSH. El servidor conoce la clave pública de cada cliente y cada cliente la del servidor. No hay usuarios ni contraseñas que adivinar.
| WireGuard | OpenVPN | |
|---|---|---|
| Transporte | Solo UDP | UDP o TCP |
| Puerto por defecto | 51820 | 1194 |
| Configuración | Un archivo corto por equipo | Certificados y más opciones |
| Rendimiento en Raspberry Pi | Muy alto | Correcto, más carga de CPU |
| Cambio de red en el móvil | Reconecta al instante | Suele tardar unos segundos |
PiVPN: el instalador, y su estado actual
PiVPN es un script que instala y configura WireGuard u OpenVPN con un asistente de texto, y añade un comando pivpn para gestionar clientes. Conviene saber cómo está el proyecto: en 2024 su mantenedor publicó la versión 4.6.0 anunciando el final del desarrollo activo. Después han salido versiones de corrección y el proyecto sigue en modo de mantenimiento mínimo: se arreglan problemas para que funcione en nuevas versiones de Debian y Raspberry Pi OS, pero no esperes funciones nuevas.
En la práctica sigue siendo la forma más cómoda de empezar. Y como lo que instala es WireGuard estándar, si algún día PiVPN deja de funcionar, tu VPN sigue funcionando: los archivos de configuración están en /etc/wireguard/ y puedes gestionarlos a mano.
Antes de empezar
- Raspberry Pi con Raspberry Pi OS actualizado y acceso por SSH.
- IP fija en la red local, para que el reenvío de puerto apunte siempre al mismo equipo.
- Acceso a la configuración del router.
- Saber si tienes IP pública real (lo vemos más abajo).
sudo apt update && sudo apt full-upgrade -y
Instalar WireGuard con PiVPN
- Lanza el instalador. Revisa antes el script si quieres saber qué hace, es buena costumbre con cualquier
curl | bash:
curl -L https://install.pivpn.io | bash
- Elige WireGuard cuando te pregunte el protocolo.
- Acepta el puerto 51820 o pon otro. Apúntalo: lo necesitarás en el router.
- Elige el DNS que usarán los clientes. Si tienes Pi-hole en la misma Raspberry, el asistente lo detecta y te ofrece usarlo.
- Indica si te conectarás por IP pública o por nombre DNS. Si tu IP cambia, elige nombre DNS y escribe tu dominio dinámico.
- Acepta las actualizaciones de seguridad desatendidas y reinicia al terminar.
Abrir el puerto UDP en el router
WireGuard necesita que lo que llegue a tu IP pública por el puerto elegido acabe en la Raspberry. En el router crea una regla de reenvío:
| Campo | Valor |
|---|---|
| Protocolo | UDP (no TCP) |
| Puerto externo | 51820 |
| IP interna | La IP fija de la Raspberry, por ejemplo 192.168.1.20 |
| Puerto interno | 51820 |

Es el único puerto que hace falta. Todo lo demás (NAS, cámaras, panel del router) queda cerrado hacia Internet y accesible solo a través del túnel.
IP dinámica y DNS dinámico
La mayoría de conexiones domésticas tienen IP pública dinámica: puede cambiar al reiniciar el router o cuando el operador lo decida. Si el cliente apunta a una IP que ya no es la tuya, la VPN deja de conectar.
La solución es un servicio de DNS dinámico (DDNS): te da un nombre fijo, del estilo micasa.servicio-ddns.net, que se actualiza solo cuando cambia tu IP. Hay dos formas de mantenerlo al día:
- Desde el router: muchos traen un apartado DDNS con varios proveedores. Es lo más cómodo.
- Desde la Raspberry: con el cliente del proveedor o con
ddclient, que comprueba la IP cada pocos minutos.
sudo apt install ddclient
En el asistente de PiVPN pon ese nombre en lugar de la IP. Si ya lo instalaste con la IP, edita la línea Endpoint de los clientes nuevos o vuelve a ejecutar la configuración.
CG-NAT: el obstáculo que lo impide todo
Algunos operadores, sobre todo de fibra low cost y de 4G/5G, comparten una misma IP pública entre muchos clientes mediante CG-NAT. Tu router recibe una IP del rango 100.64.0.0/10 o una privada, y por mucho que abras puertos, las conexiones de fuera nunca llegan.

Para comprobarlo:
- Mira la IP WAN en el panel del router.
- Compárala con la que te muestra cualquier web de «cuál es mi IP».
- Si no coinciden, o la del router empieza por
100.64a100.127, estás detrás de CG-NAT.
Opciones: pedir al operador una IP pública (algunos la dan gratis, otros la cobran), usar IPv6 si tu operador la ofrece y el router permite abrir el puerto, o recurrir a una solución que conecte hacia fuera, como un servidor intermedio en la nube. Tienes el detalle en la guía de NAT enlazada al final.
Añadir clientes: móvil con código QR
Cada dispositivo es un cliente con sus propias claves. Créalo así:
pivpn add

Te pide un nombre (por ejemplo, movil-ana) y genera el archivo /home/usuario/configs/movil-ana.conf. Para el móvil, lo más rápido es el QR:
pivpn -qr movil-ana
- Instala la app oficial de WireGuard en Android o iOS.
- Pulsa añadir túnel y elige escanear código QR.
- Enfoca el QR que sale en la terminal y activa el túnel.
- Prueba con los datos móviles, no con el wifi de casa, o no sabrás si funciona desde fuera.
Para un portátil, copia el .conf con scp e impórtalo en la app de WireGuard de Windows, macOS o Linux. Comandos útiles:
pivpn -l # lista clientes
pivpn -c # clientes conectados y último contacto
pivpn -r movil-ana # revoca un cliente (móvil perdido)
Un cliente por dispositivo: si pierdes el móvil, revocas solo ese y el resto sigue funcionando.
Combinarlo con Pi-hole
Si los clientes usan como DNS la IP de la Raspberry dentro del túnel, el bloqueo de anuncios de Pi-hole te acompaña fuera de casa, también con datos móviles. Si instalaste Pi-hole después de PiVPN, revisa la línea DNS del cliente y, en Pi-hole, la opción de interfaces: debe permitir consultas desde la interfaz wg0 o desde todas las interfaces de la red local.
Por defecto PiVPN manda todo el tráfico por la VPN (AllowedIPs = 0.0.0.0/0, ::/0). Si solo quieres llegar a tu red y que el resto salga directo, cambia en el cliente esa línea por tu rango local y el de la VPN, por ejemplo 192.168.1.0/24, 10.6.0.0/24.
Errores habituales
| Síntoma | Causa probable |
|---|---|
| El túnel se activa pero no hay datos | Puerto reenviado como TCP en lugar de UDP, o a otra IP |
| Funciona en casa y no fuera | Lo pruebas en tu propio wifi; usa datos móviles |
| Funcionaba y deja de ir días después | Ha cambiado la IP pública y no usas DDNS |
| Nunca conecta desde fuera | CG-NAT del operador |
| Conecta pero no resuelve nombres | Pi-hole no acepta consultas desde wg0 |
| Ves la red pero no Internet | Reenvío IP desactivado tras tocar la configuración; revisa net.ipv4.ip_forward |
Y un clásico: que el rango de tu casa coincida con el de la red donde estás (por ejemplo, ambos 192.168.1.0/24). El equipo no sabe por dónde enviar el tráfico. Si viajas mucho, usa en casa un rango menos común.



