WireGuard en Raspberry PI, VPN casera, segura y gratuita.

¿Por qué WireGuard?

WireGuard es una VPN moderna, ultrarrápida y muy segura. A diferencia de OpenVPN, es nativa del kernel de Linux (va como parte del sistema, no como un programa aparte), consume muy pocos recursos y se configura en minutos.

¿Para qué querrás una VPN en tu Raspberry Pi?

  • Acceder a tu red local desde cualquier lugar (archivos, impresoras, otros equipos)
  • Navegar con la IP de tu casa cuando estés fuera (evitar bloqueos geográficos)
  • Sincronizar contraseñas de forma segura con KeePass + Syncthing (el siguiente tutorial)
  • Usar WiFi públicas sin miedo a que espíen tu tráfico

Ventajas de montarla en una Raspberry Pi:

  • Consumo eléctrico ridículo (puede estar 24/7 encendida)
  • Control total de tus datos (no dependes de servicios de terceros)
  • Aprendizaje enorme

Requisitos

  • Una Raspberry Pi (cualquier modelo desde la 3B funciona, pero mejor una Pi 4 o 5)
  • Raspberry Pi OS instalado y actualizado (puede ser la versión Lite sin escritorio)
  • DuckDNS (gratuito) o cualquier servicio de DNS dinámico ( no lo configuramos aquí)
  • Un puerto abierto en tu router (el 51820 UDP)
  • Un teléfono Android (para probar el cliente)

1. Instalación de WireGuard

Conéctate a tu Raspberry Pi por SSH o directamente con teclado y pantalla.

sudo apt update && sudo apt upgrade -y
sudo apt install wireguard wireguard-tools qrencode iptables nftables -y

Verifica que el módulo del kernel se ha cargado correctamente:

sudo modprobe wireguard
lsmod | grep wireguard

Si ves algo como wireguard 131072 0, está todo bien.


2. Generar las claves del servidor

Cada VPN necesita un par de claves (pública y privada) para el servidor y otro par para cada cliente. Empezamos con las del servidor.

sudo mkdir -p /etc/wireguard
cd /etc/wireguard
sudo umask 077
sudo wg genkey | sudo tee private.key
sudo cat private.key | sudo wg pubkey | sudo tee public.key

Comprueba que se han creado los archivos:

sudo ls -la /etc/wireguard/

Debes ver private.key y public.key, ambos con permisos -rw------- (600).


3. Crear la configuración del servidor

Ahora creamos el archivo de configuración que arrancará la VPN.

sudo nano /etc/wireguard/wg0.conf

Pega este contenido (cambiando la PrivateKey por la tuya):

[Interface]
PrivateKey = PEGA_AQUÍ_TU_CLAVE_PRIVADA
Address = 10.0.0.1/24
ListenPort = 51820
SaveConfig = false

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

¿Cómo obtener tu clave privada?

sudo cat /etc/wireguard/private.key

Copia el resultado y pégalo donde pone PrivateKey = ...

Importante sobre la interfaz de red:

  • Si tu Raspberry Pi usa cable Ethernet, deja eth0
  • Si usa WiFi, cambia eth0 por wlan0
  • Si no estás seguro, ejecuta ip route | grep default y mira qué interfaz aparece

Las líneas PostUp y PostDown son las que permiten que tu móvil tenga acceso a internet a través de la VPN (enmascaramiento NAT). Sin ellas, la VPN conectará pero no habrá internet.

Guarda el archivo (Ctrl+O, Enter, Ctrl+X).


4. Configurar el sistema para enrutar tráfico

La VPN necesita que el sistema operativo permita reenviar paquetes de una interfaz a otra.

echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

Debes ver net.ipv4.ip_forward = 1 en la salida.


5. Arrancar WireGuard

sudo chmod 600 /etc/wireguard/*
sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0

Verifica que funciona:

sudo wg show

Deberías ver algo como:

interface: wg0
  public key: TU_CLAVE_PUBLICA
  private key: (hidden)
  listening port: 51820

Y comprueba que el puerto está escuchando:

sudo ss -tuln | grep 51820

Debe aparecer 0.0.0.0:51820.


6. Crear la configuración para el móvil (cliente)

Cada dispositivo que se conecte a la VPN necesita su propio par de claves. Vamos a generar las del móvil.

sudo mkdir -p /etc/wireguard/clients
cd /etc/wireguard/clients
sudo umask 077
sudo wg genkey | sudo tee mobile_private.key
sudo cat mobile_private.key | sudo wg pubkey | sudo tee mobile_public.key

Ahora creamos el archivo de configuración que importaremos en el móvil.

sudo nano mobile.conf

Pega este contenido (cambia solo los campos entre [ ... ]):

[Interface]
PrivateKey = [CLAVE_PRIVADA_DEL_MOVIL]
Address = 10.0.0.2/32
DNS = 8.8.8.8

[Peer]
PublicKey = [CLAVE_PUBLICA_DEL_SERVIDOR]
Endpoint = [TU_DOMINIO_O_IP_PUBLICA]:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

Rellena cada campo:

  • [CLAVE_PRIVADA_DEL_MOVIL] → El contenido de sudo cat /etc/wireguard/clients/mobile_private.key
  • [CLAVE_PUBLICA_DEL_SERVIDOR] → El contenido de sudo cat /etc/wireguard/public.key
  • [TU_DOMINIO_O_IP_PUBLICA] → Tu dominio DuckDNS (ej: tublog.duckdns.org) o tu IP pública si no tienes DNS dinámico

Guarda el archivo.


7. Añadir el móvil como cliente permitido en el servidor

MOBILE_PUBKEY=$(sudo cat /etc/wireguard/clients/mobile_public.key)
sudo wg set wg0 peer $MOBILE_PUBKEY allowed-ips 10.0.0.2/32
sudo wg-quick save wg0

Verifica que aparece el peer:

sudo wg show

Ahora deberías ver una sección peer: adicional con la clave pública del móvil.


8. Preparar el código QR para el móvil

sudo cat /etc/wireguard/clients/mobile.conf | qrencode -t ansiutf8

Esto mostrará un código QR en la terminal.

En tu Android:

  1. Instala la app WireGuard desde Play Store
  2. Abre la app → Botón +Escanear desde código QR
  3. Escanea el código QR de la terminal

La app importará automáticamente la configuración. Solo tendrás que pulsar el interruptor para conectarte.


9. Abrir el puerto en el router (imprescindible para acceso remoto)

Este es el único paso que depende de tu router, pero es sencillo.

Primero, averigua la IP local de tu Raspberry Pi:

hostname -I

Anota la primera IP (ej: 192.168.1.150).

Accede a la web de tu router (normalmente 192.168.1.1 o 192.168.0.1).

Busca la sección «Reenvío de puertos» o «Port Forwarding» y añade una regla:

CampoValor
NombreWireGuard
Puerto externo51820
ProtocoloUDP (importante, no TCP)
IP interna[LA IP DE TU RASPBERRY PI]
Puerto interno51820

Guarda los cambios. Si tu router tiene la opción, reinícialo para aplicar la regla.

Si usas DuckDNS: Asegúrate de que el cliente de actualización está corriendo en tu Raspberry Pi o en el router, para que tu dominio siempre apunte a tu IP pública.


10. Comprobación final

Prueba dentro de casa (WiFi local)

  1. En el móvil, activa WireGuard
  2. Abre el navegador y busca «cuál es mi IP»
  3. Debe mostrar la IP pública de tu casa (la de tu router)

Prueba desde fuera (con datos móviles)

  1. Desactiva el WiFi del móvil
  2. Activa WireGuard
  3. Repite la búsqueda de IP
  4. Sigue debiendo mostrar la IP de tu casa

Si ves la IP de tu casa, la VPN funciona perfectamente.


11. Posibles errores y soluciones (basados en errores reales)

ErrorCausaSolución
iptables: command not foundEl paquete iptables no está instaladosudo apt install iptables -y
El móvil conecta pero no tiene internetFaltan las reglas PostUp en wg0.confAñade las líneas PostUp/PostDown y recarga
wg-quick up falla con RTNETLINK answers: Operation not supportedEl módulo WireGuard no está cargadosudo modprobe wireguard y reinicia
No se puede crear /etc/wireguardPermisosUsa sudo para todos los comandos dentro de ese directorio
El código QR no se ve bienFuente de la terminalUsa una terminal que soporte UTF-8 o importa el archivo .conf manualmente
La IP del móvil no cambia a la de casaAllowedIPs no es 0.0.0.0/0Corrígelo en mobile.conf y vuelve a importar

12. Mantenimiento y buenas prácticas

  • Actualiza regularmente: sudo apt update && sudo apt upgrade -y
  • Monitorea el servicio: sudo systemctl status wg-quick@wg0
  • Revoca el acceso a un dispositivo: Elimina su peer del servidor con sudo wg set wg0 peer [su_clave_publica] remove
  • Copia de seguridad de las claves: Guarda en un lugar seguro (/etc/wireguard/ entero)
  • Puerto seguro: El 51820 UDP es el estándar, pero puedes cambiarlo por cualquier otro si quieres algo menos predecible

13. ¿Qué viene después?

Con la VPN funcionando, ya puedes:

  • Sincronizar contraseñas entre tu PC con Linux y tu Android usando KeePassXC + Syncthing (próximo tutorial)
  • Acceder a tu red doméstica desde cualquier lugar (NAS, servidor multimedia, impresora)
  • Usar Pi-hole para bloquear anuncios también en tu móvil cuando estás fuera de casa

Conclusión

Has montado tu propia VPN en una Raspberry Pi sin depender de servicios externos, sin Docker y con software libre. WireGuard es ligero, seguro y una vez configurado, olvidas que está ahí.

¿Te ha servido? ¿Tienes dudas? Puedes dejar un comentario y te ayudaré (porque yo ya pasé por todos los errores posibles mientras escribía este tutorial).


Este tutorial está basado en una instalación real en Raspberry Pi 5 con Raspberry Pi OS, sin Docker, y probado con Android 13.


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio