VPNSmith
self-host-vpn-headINFO

Auto-alojar VPN en Raspberry Pi 5: guía WireGuard completa 2026

Monta un VPN WireGuard en Raspberry Pi 5 en 2026: hardware, OS, config servidor, port forwarding, DuckDNS, clientes iOS/Android/Mac/Windows. Caudal típico ~80 Mbps, ~6W de consumo.

Por Eric Gerard · Fundador · VPNSmith - Especialista en VPN self-host y VPS GDPR8 min de lecturaPhoto : Alexandre Debiève - Unsplash

Un Raspberry Pi 5 8 GB es un excelente servidor WireGuard always-on. Espera un caudal del orden de tu subida doméstica (a menudo ~80 Mbps), un consumo en torno a 6-8W, y un coste total a 5 años muy por debajo de una sola suscripción anual a NordVPN. Esta guía te da cada comando, en orden, sin omisiones.

Para decidir si el Pi 5 es la elección correcta frente a un VPS cloud o Tailscale, empieza por nuestra comparativa de las mejores soluciones VPN auto-alojadas 2026.

Por qué Raspberry Pi 5 para un VPN doméstico

Un Raspberry Pi 5 a 100 € vs un VPS a 5 €/mes - el punto de equilibrio llega a los 20 meses. Después, son ahorros puros menos 10-12 €/año en electricidad.

Pero el coste no es la única razón. Argumentos concretos para elegir un Pi sobre un VPS:

  • Control total del hardware y los logs - Nada sale de tu casa. Un VPS, aunque esté cifrado, implica un proveedor gestionando el hipervisor.
  • Acceso LAN nativo - Desde tu conexión VPN accedes a tu NAS, impresoras y cámaras IP directamente por IP local. Imposible con un VPS.
  • Coinstalación Pi-hole - Bloqueo de anuncios por DNS para todos tus dispositivos móviles, en cualquier parte del mundo. Una lista de bloqueo típica elimina una parte significativa de las consultas DNS (la cifra exacta se muestra en el dashboard de Pi-hole).
  • Aprendizaje práctico de redes - La mejor forma de entender NAT, IP forwarding, PKI y WireGuard es configurarlo todo uno mismo.

Limitaciones honestas: dependes de la conectividad doméstica y la electricidad. Para un VPN crítico en viajes de trabajo, consulta la sección de mantenimiento.

Hardware necesario

Esta es una configuración de hardware típica para este montaje, con precios indicativos en EUR de principios de 2026:

ComponenteModeloPrecio indicativo
Raspberry Pi 58 GB RAM (recomendado)~100 €
AlimentadorUSB-C 27W oficial (PI-PSU)~12 €
microSDSanDisk Extreme 32 GB UHS-I~12 €
Carcasa + disipadorArgon NEO 5 o carcasa oficial + Active Cooler~15-20 €
Cable EthernetCat 5e/6, 2 m~5 €
Total~145-150 € una sola vez

¿Por qué 8 GB de RAM? Si coinstalar Pi-hole + eventualmente Nextcloud o Home Assistant, 4 GB puede ser justo. Con 8 GB tienes margen para 3 años de evolución del setup.

¿Por qué la alimentación oficial de 27W? El Pi 5 bajo carga VPN + Pi-hole puede consumir hasta 12W en el rail USB-C. Una alimentación barata de 15W provoca throttling silencioso del CPU (bajo voltaje). La oficial garantiza voltaje estable.

Ethernet obligatorio: nunca pongas un servidor VPN en WiFi. La latencia adicional (2-5 ms) y las microdesconexiones WiFi desestabilizan el túnel. Cable directo al router.

Configuración del OS - Raspberry Pi OS 64-bit

Filas de servidores en un centro de datos
Filas de servidores en un centro de datos

Flash de la tarjeta

  1. Descargar Raspberry Pi Imager (Windows/Mac/Linux)
  2. Seleccionar Raspberry Pi OS Lite 64-bit (Bookworm - Debian 12) - no hace falta escritorio
  3. Hacer clic en el icono de engranaje (opciones avanzadas):
    • Hostname: vpn-pi
    • Activar SSH: clave pública (pegar tu ~/.ssh/id_ed25519.pub)
    • Usuario: eric (no pi, desactivado por defecto desde 2022)
    • Locale: tu zona horaria, distribución de teclado correcta
  4. Flashear en la microSD. Insertar en el Pi, conectar Ethernet, encender.

Primer acceso SSH e IP estática

# Desde tu Mac/PC, encontrar el Pi en la red local
ssh eric@vpn-pi.local

# IP estática en /etc/dhcpcd.conf
sudo nano /etc/dhcpcd.conf

Añadir al final del archivo:

interface eth0
static ip_address=192.168.1.10/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1
sudo reboot
# Reconectar con IP fija:
ssh eric@192.168.1.10

Firewall UFW

sudo apt install -y ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp          # SSH (cambiar si modificas el puerto)
sudo ufw allow 51820/udp       # WireGuard
sudo ufw enable
sudo ufw status verbose

Instalación de WireGuard

Paquetes y generación de claves

sudo apt update && sudo apt upgrade -y
sudo apt install -y wireguard qrencode

# Generar claves del servidor
wg genkey | sudo tee /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key
sudo chmod 600 /etc/wireguard/server_private.key

# Mostrar claves
SERVER_PRIVKEY=$(sudo cat /etc/wireguard/server_private.key)
SERVER_PUBKEY=$(sudo cat /etc/wireguard/server_public.key)
echo "Privada: $SERVER_PRIVKEY"
echo "Pública: $SERVER_PUBKEY"

Configuración del servidor wg0.conf

sudo nano /etc/wireguard/wg0.conf
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = <SERVER_PRIVKEY>

# NAT - reemplaza eth0 con tu interfaz (verificar con: ip route | grep default)
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

IP Forwarding y arranque

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

# Iniciar WireGuard
sudo systemctl enable --now wg-quick@wg0
sudo wg show  # debe mostrar la interfaz wg0 activa

Configuración de red - router, DuckDNS, MTU

Port forwarding en el router

Cada ISP tiene una interfaz diferente, pero la regla es la misma: UDP, puerto externo 51820 → IP local 192.168.1.10, puerto interno 51820.

Probar desde otra red (4G móvil): nc -zvu TU_IP_PUBLICA 51820.

DuckDNS - DNS dinámico gratuito

# Crear cuenta en duckdns.org, anotar tu token
# Crear el script de actualización
mkdir -p ~/duckdns
cat > ~/duckdns/duck.sh <&lt; 'EOF'
#!/bin/bash
echo url="https://www.duckdns.org/update?domains=mivpn&token=TU_TOKEN&ip=" | curl -k -o ~/duckdns/duck.log -K -
EOF
chmod +x ~/duckdns/duck.sh

# Cron cada 5 minutos
(crontab -l 2>/dev/null; echo "*/5 * * * * ~/duckdns/duck.sh >/dev/null 2>&1") | crontab -

Optimización de MTU

WireGuard usa por defecto MTU 1420. Si ves paquetes fragmentados:

# Test de fragmentación
ping -M do -s 1392 8.8.8.8

# Si falla, añadir en [Interface] de wg0.conf:
# MTU = 1380

Para el detalle completo de plantillas WireGuard y casos de MTU, consulta nuestra guía de plantillas de configuración WireGuard.

Configuración de clientes - Mac, Windows, iOS, Android

Generar una config de cliente

# En el servidor, para cada cliente:
CLIENT_PRIVKEY=$(wg genkey)
CLIENT_PUBKEY=$(echo $CLIENT_PRIVKEY | wg pubkey)

cat <&lt; EOF
[Interface]
PrivateKey = $CLIENT_PRIVKEY
Address = 10.8.0.2/32
DNS = 10.8.0.1

[Peer]
PublicKey = $SERVER_PUBKEY
Endpoint = mivpn.duckdns.org:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
EOF

Añadir el cliente al servidor:

sudo wg set wg0 peer $CLIENT_PUBKEY allowed-ips 10.8.0.2/32
sudo wg-quick save wg0  # persiste la configuración

Código QR para iOS y Android

# Guardar la config del cliente en un archivo
cat > /tmp/client1.conf <&lt; 'EOF'
[Interface]
PrivateKey = CLIENT_PRIVKEY_AQUI
Address = 10.8.0.2/32
DNS = 10.8.0.1

[Peer]
PublicKey = SERVER_PUBKEY_AQUI
Endpoint = mivpn.duckdns.org:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
EOF

# Mostrar código QR en el terminal
qrencode -t ansiutf8 &lt; /tmp/client1.conf

# Eliminar tras escanear (no dejar claves privadas a la vista)
rm /tmp/client1.conf

Escanear con la app oficial WireGuard (iOS App Store / Google Play). La conexión se establece en <2 segundos.

macOS y Windows: descargar la app oficial WireGuard e importar el archivo .conf directamente.

Para comparar con la alternativa Tailscale que elimina toda esta configuración manual, lee la guía de exit node Tailscale. Y para entender cómo Cloudflare WARP se compara con tu configuración Pi, consulta WARP vs WireGuard self-host.

Optimizaciones y mantenimiento

Actualizaciones de seguridad automáticas

sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades
# Elegir "Sí" para activar las actualizaciones de seguridad automáticas

Monitoreo con journalctl

# Logs WireGuard en tiempo real
sudo journalctl -u wg-quick@wg0 -f

# Ver peers conectados y estadísticas
sudo wg show

# Tráfico por peer (bytes recibidos/enviados)
sudo wg show all dump

fail2ban contra escaneos SSH

sudo apt install -y fail2ban

cat | sudo tee /etc/fail2ban/jail.local <&lt; 'EOF'
[sshd]
enabled = true
port = 22
maxretry = 3
bantime = 3600
findtime = 600
EOF

sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd

Backup de la configuración WireGuard

# Backup semanal automático a USB o NAS local
(crontab -l; echo "0 3 * * 0 sudo cp -r /etc/wireguard ~/backup/wg-$(date +%Y%m%d)") | crontab -

Swap si usas 4 GB de RAM

Si usas el modelo de 4 GB con Pi-hole + WireGuard activos:

sudo dphys-swapfile swapoff
sudo nano /etc/dphys-swapfile  # Establecer CONF_SWAPSIZE=1024
sudo dphys-swapfile setup
sudo dphys-swapfile swapon

Monitorear la temperatura

Con una carcasa pasiva tipo Argon NEO 5, un Pi 5 se mantiene típicamente en los 40 °C bajo carga VPN + Pi-hole. Sin carcasa se calienta bastante más - el throttling del CPU comienza a 80°C, así que se recomienda un disipador o carcasa.

# Temperatura en tiempo real
watch -n 2 vcgencmd measure_temp

Para una visión completa de la configuración de red avanzada que necesitarás al ejecutar varios clientes simultáneos, consulta nuestra guía VPN multi-cliente Contabo con WireGuard - los conceptos NAT son idénticos en Pi.


Qué esperar: un caudal del orden de tu subida doméstica, una latencia añadida de pocos milisegundos en el lado LAN, un consumo de ~6-8W, y buena seguridad con fail2ban y SSH solo por clave. Un punto a anticipar: un corte eléctrico en casa tira el túnel - un SAI pequeño (p. ej. APC 500VA) lo mantiene durante los microcortes.

Para conectar tus pares rápidamente, nuestro generador de configuración de WireGuard gratuito crea una configuración de servidor y cliente coherente en tu navegador, lista para copiar en la Pi.

★ Datacenter Núremberg GDPR · ✓ IPv4 dedicada incluida · 200+ Mbps garantizados

Aloja tu VPN en tu propio VPS → ContaboAcceso root completo · IPv4 pública · elige tu región

Preguntas frecuentes

¿Qué ancho de banda real se puede esperar de un VPN en Raspberry Pi 5?
En un Pi 5 8 GB con una conexión de fibra doméstica típica, el cuello de botella es la subida de la conexión, no el Pi. Espera un caudal del orden de tu upstream (p. ej. ~80 Mbps en una subida de 80-100 Mbps). La implementación WireGuard en kernel del Pi 5 maneja 200+ Mbps por CPU: con una conexión simétrica de gigabit, el Pi 5 puede alcanzar varios cientos de Mbps.
¿Cómo proteger SSH contra ataques de fuerza bruta?
Tres medidas obligatorias: 1) Deshabilitar PasswordAuthentication en sshd_config (solo claves SSH). 2) Cambiar el puerto SSH del 22 a uno no estándar (ej. 2222). 3) Instalar fail2ban con jail SSH: maxretry 3, bantime 1h. Con login solo por clave y fail2ban, los intentos SSH automatizados permanentes que recibe todo host expuesto nunca llegan a autenticarse.
¿Qué pasa si se va la luz en casa?
El VPN se cae durante el corte - esa es la limitación fundamental frente a un VPS cloud. Soluciones: SAI de 30-60 minutos para microcortes (~30 € para un APC Back-UPS 500). Para un VPN de misión crítica, mantén un VPS Contabo a 5,50 €/mes como respaldo - ver nuestra [guía VPN auto-alojado en Contabo](/es/blog/auto-alojar-vpn-contabo-wireguard-2026).
Pi 5 vs Pi 4 para WireGuard, ¿qué diferencia hay?
Significativa. El Pi 4 (Cortex-A72 a 1.8 GHz) tiene un techo de 80-120 Mbps con WireGuard en modo kernel. El Pi 5 (Cortex-A76 a 2.4 GHz) supera los 200 Mbps - es una ganancia CPU pura del 60-70%. Si ya tienes un Pi 4 y tu subida doméstica es &lt;80 Mbps, el Pi 4 es suficiente. Si apuntas a 100 Mbps+, invierte en el Pi 5.
¿Cuál es el consumo eléctrico real?
Un Pi 5 8 GB consume típicamente alrededor de 5-6W en reposo y 7-8W bajo carga WireGuard + Pi-hole (mide el tuyo con un enchufe inteligente). En un año: ~65 kWh, unos 10-12 € en electricidad. Un VPS Contabo cuesta ~60 €/año - un Pi en casa puede amortizarse en ~18 meses solo por el criterio eléctrico vs VPS.
¿Puedo ejecutar Pi-hole y WireGuard juntos?
Sí, es una combinación clásica. Pi-hole escucha en 53/UDP/TCP localmente, WireGuard enruta el DNS de los clientes hacia 10.8.0.1 (el Pi). Cada cliente VPN obtiene el bloqueo de anuncios de Pi-hole. La única restricción: asignar 512 MB de RAM a Pi-hole. Con 4 u 8 GB en el Pi 5, es completamente manejable.
¿Necesito IP fija de mi ISP?
No. DuckDNS resuelve esto gratuitamente. El cron cada 5 minutos actualiza el DNS cuando cambia tu IP. En la práctica, la mayoría de ISPs cambian la IP menos de una vez al mes. El tiempo de caída máximo es de 5 minutos - aceptable para un VPN doméstico.
¿Es WireGuard en Pi 5 tan seguro como un servicio VPN comercial?
La criptografía es idéntica (Curve25519, ChaCha20-Poly1305, BLAKE2s) - WireGuard está auditado y se usa en producción en miles de empresas. La diferencia: gestionas tú mismo las actualizaciones y el hardening SSH. Con fail2ban, UFW y solo claves SSH, la superficie de ataque es mínima. Lo que pierdes vs uno comercial: no hay kill switch nativo en clientes Windows (configurar manualmente) y no hay multi-servidor geográfico.