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
Precios revisados en octubre de 2026: la subida del coste de la memoria llevó el Raspberry Pi 5 de 8 GB de 80 $ en su lanzamiento a 175 $ de precio oficial (subidas anunciadas por Raspberry Pi el 2 de febrero y el 1 de abril de 2026, tras una primera en diciembre de 2025), y el modelo de 4 GB a 110 $. Un kit completo de 8 GB cuesta ahora unos 220 $. Frente a un VPS a 5,50 €/mes, descontando unos 11 €/año de electricidad del Pi, la amortización tarda unos 4 años (unos 3 años con una placa de 4 GB, suficiente para WireGuard + Pi-hole). Si ya tienes un Pi 4 o Pi 5 en un cajón, el servidor en casa sale casi gratis; si lo comprarías solo para el VPN, un Contabo Cloud VPS 4 a 5,50 €/mes (enlace de afiliado) cuesta menos durante los primeros años. Si prefieres un proveedor estadounidense con 30 días de devolución, el VPS Basic de Ultahost cuesta 5,52 $ al mes a 24 meses (1 GB de RAM, IPv4 dedicada, leído el 21 de octubre de 2026), suficiente para un servidor WireGuard de pocos dispositivos.
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:
| Componente | Modelo | Precio indicativo |
|---|---|---|
| Raspberry Pi 5 | 8 GB RAM (recomendado) | 175 $ precio oficial, oct. 2026 (4 GB: 110 $) |
| Alimentador | USB-C 27W oficial (PI-PSU) | ~12 € |
| microSD | SanDisk Extreme 32 GB UHS-I | ~12 € |
| Carcasa + disipador | Argon NEO 5 o carcasa oficial + Active Cooler | ~15-20 € |
| Cable Ethernet | Cat 5e/6, 2 m | ~5 € |
| Total | ~220 $ una sola vez (~155 $ con 4 GB) |
¿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
Flash de la tarjeta
- Descargar Raspberry Pi Imager (Windows/Mac/Linux)
- Seleccionar Raspberry Pi OS Lite 64-bit (Bookworm - Debian 12) - no hace falta escritorio
- 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(nopi, desactivado por defecto desde 2022) - Locale: tu zona horaria, distribución de teclado correcta
- Hostname:
- 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
¿Prefiere no copiar las claves a mano? Nuestro generador de configuración WireGuard gratuito escribe el wg0.conf de la Pi y una configuración por cliente (con código QR para los móviles) en un minuto, con las claves generadas en su navegador y sin enviarlas a ningún sitio. Ponga como endpoint su nombre DuckDNS (se configura más abajo), compruebe que eth0 en su línea PostUp coincide con la interfaz de la Pi y retome la guía en el paso de reenvío IP y arranque. El generador es gratis hasta 10 dispositivos; a partir de ahí, WireGuard Pro (producto propio, 9 EUR en un solo pago, sin suscripción) sube el límite a 250 y añade un ZIP con cada .conf de cliente y su código QR en PNG, práctico para equipar una oficina o una familia entera de una vez.
Genera aquí tus configuraciones WireGuard
Escribe la dirección del servidor, elige el número de dispositivos y escanea cada código QR desde la app.
Todas las claves se generan en tu navegador (Curve25519 / X25519). Nada se envía a nuestros servidores - tu config es 100% privada.
WireGuard Pro
Todas tus configs en un solo ZIP
Se acabó descargar cliente por cliente: hasta 250 archivos .conf, cada uno con su código QR. Hasta 10 dispositivos sigue gratis, sin cuenta.
Opcional. Indica la subred local detrás del servidor y/o detrás de un cliente que hace de pasarela de sitio (un router, una Raspberry Pi, un NAS). El generador añade cada red a los AllowedIPs del servidor, da a cada par las rutas hacia las otras redes y escribe las reglas de reenvío en las pasarelas. Deja un campo vacío para un cliente normal.
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.
¿Puerto abierto pero la prueba sigue fallando? Compruebe el CGNAT
Muchas conexiones de fibra, cable y 4G/5G ya no le dan una IPv4 pública propia: el operador comparte una dirección entre varios clientes (CGNAT), y ninguna regla en su router puede abrir un puerto que está detrás del NAT del operador. Mire la dirección WAN en la página de estado del router: si empieza por 100.64 a 100.127, o no coincide con lo que muestra curl -4 ifconfig.me desde un equipo de casa, está detrás de un CGNAT. Nuestro verificador de puerto WireGuard gratuito hace esa comparación en su navegador.
Tres salidas: pedir una IPv4 pública al operador (algunos lo hacen gratis, muchos no), conectarse por IPv6 si su línea lo tiene (falla en el Wi-Fi de hoteles y en redes móviles sin IPv6), o instalar el servidor WireGuard en un VPS pequeño con su propia IPv4 pública y dejar que la Pi se conecte a él como cliente con PersistentKeepalive = 25, para seguir llegando a la red de casa. Ese relé se explica paso a paso en WireGuard detrás de CGNAT.
★ Datacenter Núremberg GDPR · ✓ IPv4 dedicada incluida · puerto de 200 Mbit/s
Una IPv4 pública siempre accesible para la Pi y sus móviles → Contabo Cloud VPS 45,50 €/mes (consultado el 18/10/2026, primeros 24 meses) · IPv4 pública fija · 4 vCPU, 8 GB de RAM→El enlace de Contabo es un enlace de afiliado: si contrata a través de él recibimos una comisión, sin coste adicional para usted. El tráfico de internet sale entonces con la dirección del VPS, no con la de casa, salvo que lo devuelva a través de la Pi.
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 << '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 << 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 << '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 < /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 << '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
Comprueba la temperatura bajo tu propia carga. Sin carcasa ni disipador un Pi 5 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.
Para tener lo esencial a mano: la WireGuard Cheat Sheet gratuita (PDF de 5 páginas en inglés, descarga directa, sin registro) reúne las tablas de keepalive y MTU, los comandos wg genkey/wg pubkey/wg genpsk y las cuatro comprobaciones de servidor en una línea que conviene lanzar primero cuando un túnel no pasa tráfico. El WireGuard Self-Hosting Kit de pago (9 USD, en inglés) añade una lista de diagnóstico de 12 causas y 11 plantillas de configuración.
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 · puerto de 200 Mbit/s
Aloja tu VPN en tu propio VPS → ContaboAcceso root completo · IPv4 pública · elige tu región→

