El problema
Cada fin de semana, LaLiga y la justicia española obligan a los ISP a bloquear rangos de IP de Cloudflare por temas de piratería. Aunque no tengas nada que ver con esto, si usas Cloudflare Tunnel para acceder a tus servicios domésticos (domótica, webs en desarrollo, servidor Proxmox, etc.), lo sufres igualmente.
Resultado: No puedes acceder a tus propios servicios legítimos durante los partidos de fútbol.
La solución
Montar tu propia infraestructura con:
- VPS con IP limpia (Hetzner, 4-5€/mes)
- Túnel WireGuard cifrado entre el VPS y tu casa
- Nginx Proxy Manager como reverse proxy
- Control total, sin depender de terceros
Arquitectura final
Internet → VPS Hetzner (IP_DEL_VPS)
↓
Nginx Proxy Manager (SSL automático)
↓
Túnel WireGuard cifrado (10.100.0.0/24)
↓
CT WireGuard en Proxmox (192.168.1.X)
↓
Tu red local → Todos tus serviciosRequisitos previos
- Dominio propio, por ejemplo
ejemplo.site - Servidor Proxmox en casa
- Conocimientos básicos de terminal SSH
- ~20€ de prepago inicial para Hetzner (se convierte en saldo)
PASO 1: Generar clave SSH para Hetzner
En tu ordenador principal (en mi caso Arch Linux):
# Generar clave específica para Hetzner
ssh-keygen -t ed25519 -f ~/.ssh/id_hetzner -C "jaume@hetzner-vps"
# Dejar passphrase vacío o añadir una contraseña
# Mostrar la clave pública
cat ~/.ssh/id_hetzner.pubCopiar TODA la línea que empieza por ssh-ed25519 AAAA... y termina en jaume@hetzner-vps.
PASO 2: Contratar VPS en Hetzner
2.1. Crear cuenta en Hetzner
Ve a: https://www.hetzner.com/cloud
2.2. Configuración del servidor
Seleccionar:
- Location: Nuremberg o Helsinki
- Image: Ubuntu 24.04
- Type: Shared vCPU → CX23 (2 vCPU, 4GB RAM, 40GB SSD)
- Precio: 4,22€/mes + IVA ≈ 5,11€/mes
- SSH Keys: Pegar la clave pública generada en el Paso 1
- Backups: NO (no necesario)
- Name:
vps-casao similar
2.3. Prepago inicial
Hetzner requiere un prepago de 20€ que se convierte en saldo de cuenta. Con el CX23 a ~5€/mes, dura casi 4 meses.
Nota: Es una medida anti-fraude estándar en proveedores europeos.
2.4. Obtener IP del VPS
Una vez creado, Hetzner te asigna una IP pública. Anótala (en nuestro ejemplo: IP_DEL_VPS).
PASO 3: Primera conexión al VPS
ssh -i ~/.ssh/id_hetzner root@IP_DEL_VPSLa primera vez preguntará si confías en el host, escribe yes.
Deberías ver:
Welcome to Ubuntu 24.04.3 LTS
root@vps-casa:~#PASO 4: Actualizar el sistema
apt update && apt upgrade -yTardará unos minutos. Si al final te avisa de "Pending kernel upgrade", reinicia:
rebootEspera 30-60 segundos y vuelve a conectar:
ssh -i ~/.ssh/id_hetzner root@IP_DEL_VPSPASO 5: Instalar Docker y Docker Compose
# Instalar dependencias
apt install -y ca-certificates curl gnupg lsb-release
# Añadir repositorio oficial de Docker
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
tee /etc/apt/sources.list.d/docker.list > /dev/null
# Instalar Docker
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# Verificar instalación
docker --versionDebería mostrar: Docker version 29.1.2 o similar.
PASO 6: Instalar WireGuard en el VPS
# Instalar WireGuard
apt install -y wireguard
# Crear directorio para claves
mkdir -p /etc/wireguard
# Generar claves del VPS
wg genkey | tee /etc/wireguard/server_private.key | wg pubkey > /etc/wireguard/server_public.key
# Mostrar las claves
echo "Clave privada VPS:"
cat /etc/wireguard/server_private.key
echo ""
echo "Clave pública VPS:"
cat /etc/wireguard/server_public.keyGuardar ambas claves en un lugar seguro.
PASO 7: Configurar WireGuard en el VPS
nano /etc/wireguard/wg0.confPegar esta configuración (sustituyendo TU_CLAVE_PRIVADA_VPS):
[Interface]
Address = 10.100.0.1/24
ListenPort = 51820
PrivateKey = TU_CLAVE_PRIVADA_VPS
# Habilitar forwarding
PostUp = sysctl -w net.ipv4.ip_forward=1
PostDown = sysctl -w net.ipv4.ip_forward=0
[Peer]
# Proxmox en casa
PublicKey = CLAVE_PUBLICA_PROXMOX
AllowedIPs = 10.100.0.2/32, 192.168.1.0/24
PersistentKeepalive = 25Nota: Dejar CLAVE_PUBLICA_PROXMOX así de momento, la generaremos en el siguiente paso.
Guardar: Ctrl+O, Enter, Ctrl+X
PASO 8: Crear CT WireGuard en Proxmox
Opción recomendada: Script de Proxmox Community
Desde el shell de Proxmox (host):
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/wireguard.sh)"Durante la instalación:
- CT ID: 102 (por defecto)
- OS: Debian 13
- 4GB disco, 1 CPU, 512MB RAM
- WGDashboard: N (no necesario para un túnel fijo)
El script configura automáticamente TUN/TAP y todos los requisitos.
Asignar IP estática al CT
Desde la interfaz web de Proxmox:
- CT 102 → Network
- Doble clic en
eth0 - Cambiar de DHCP a Static
- IPv4/CIDR:
192.168.1.X/24(ajustar según tu red) - Gateway:
192.168.1.1(tu router) - OK y aplicar configuración
PASO 9: Generar claves WireGuard en el CT
# Entrar al CT
pct enter 102
# Generar claves
wg genkey | tee /etc/wireguard/client_private.key | wg pubkey > /etc/wireguard/client_public.key
# Mostrar las claves
echo "Clave privada CT:"
cat /etc/wireguard/client_private.key
echo ""
echo "Clave pública CT:"
cat /etc/wireguard/client_public.keyGuardar ambas claves.
PASO 10: Configurar WireGuard en el CT
Dentro del CT:
nano /etc/wireguard/wg0.confPegar:
[Interface]
Address = 10.100.0.2/24
PrivateKey = TU_CLAVE_PRIVADA_CT
[Peer]
# VPS Hetzner
PublicKey = CLAVE_PUBLICA_VPS
Endpoint = IP_DEL_VPS:51820
AllowedIPs = 10.100.0.1/32
PersistentKeepalive = 25Sustituir:
TU_CLAVE_PRIVADA_CT→ Clave privada del CTCLAVE_PUBLICA_VPS→ Clave pública del VPS
Guardar y salir del CT:
exitPASO 11: Actualizar configuración del VPS
Volver a la terminal del VPS y actualizar la clave pública del CT:
nano /etc/wireguard/wg0.confSustituir:
PublicKey = CLAVE_PUBLICA_PROXMOXPor:
PublicKey = LA_CLAVE_PUBLICA_REAL_DEL_CTGuardar.
PASO 12: Configurar firewall del VPS
# Instalar UFW
apt install -y ufw
# Permitir SSH (¡IMPORTANTE!)
ufw allow 22/tcp
# Permitir WireGuard
ufw allow 51820/udp
# Permitir HTTP y HTTPS
ufw allow 80/tcp
ufw allow 443/tcp
# Activar firewall
ufw enableConfirmar con y.
PASO 13: Arrancar túnel WireGuard
En el VPS:
systemctl enable wg-quick@wg0
systemctl start wg-quick@wg0
wg showEn el CT (Proxmox):
pct enter 102
systemctl enable wg-quick@wg0
systemctl start wg-quick@wg0
wg showDeberías ver:
interface: wg0
peer: [clave pública del otro extremo]
latest handshake: X seconds ago
transfer: XXX B received, XXX B sentVerificar conectividad
Desde el CT, hacer ping al VPS:
ping -c 4 10.100.0.1Debería responder con ~60ms de latencia.
PASO 14: Configurar routing en el CT
Para que el VPS pueda alcanzar tu red local a través del túnel:
# Dentro del CT
pct enter 102
# Habilitar IP forwarding
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
# Añadir regla NAT
iptables -t nat -A POSTROUTING -s 10.100.0.0/24 -o eth0 -j MASQUERADE
# Guardar reglas
apt install -y iptables-persistent
netfilter-persistent save
exitPASO 15: Configurar ruta estática en el router
Esto es CRÍTICO para que las respuestas vuelvan correctamente.
En tu router (en mi caso: Router Smart WiFi 6 de Telefónica):
- Acceder a
http://192.168.1.1 - Usuario:
admin, contraseña: (la del router) - Buscar: Red Local → Enrutamiento estático (o Routing → Static Routes)
- Añadir ruta:
| Campo | Valor |
|---|---|
| Red de destino | 10.100.0.0 |
| Máscara de subred | 255.255.255.0 |
| Puerta de enlace | 192.168.1.X |
| Interfaz | LAN |
- Guardar
Esto hace que toda tu red local sepa cómo responder al VPS.
PASO 16: Instalar Nginx Proxy Manager
En el VPS:
mkdir -p /opt/nginx-proxy-manager
cd /opt/nginx-proxy-manager
nano docker-compose.ymlPegar:
version: "3.8"
services:
app:
image: "jc21/nginx-proxy-manager:latest"
restart: unless-stopped
ports:
- "80:80"
- "443:443"
- "81:81" # Panel de administración
environment:
DB_SQLITE_FILE: "/data/database.sqlite"
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencryptGuardar y arrancar:
docker compose up -dEsperar 30 segundos y acceder: http://IP_DEL_VPS:81
Credenciales por defecto:
- Email:
admin@example.com - Password:
changeme
Al entrar, te pedirá cambiar el email y contraseña.
PASO 17: Instalar Fail2ban (protección)
apt install -y fail2ban
# Crear configuración
nano /etc/fail2ban/jail.localPegar:
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
banaction = ufw
[sshd]
enabled = true
port = 22
logpath = /var/log/auth.log
[nginx-http-auth]
enabled = true
port = http,https
logpath = /var/log/nginx/error.log
[nginx-noscript]
enabled = true
port = http,https
logpath = /var/log/nginx/access.log
[nginx-badbots]
enabled = true
port = http,https
logpath = /var/log/nginx/access.log
[nginx-botsearch]
enabled = true
port = http,https
logpath = /var/log/nginx/access.logArrancar:
systemctl enable fail2ban
systemctl start fail2ban
systemctl status fail2banVer IPs baneadas:
fail2ban-client status sshdPASO 18: Configurar Proxy Hosts
En Nginx Proxy Manager (http://IP_DEL_VPS:81):
Para cada subdominio que quieras exponer:
Proxy Hosts → Add Proxy Host
Ejemplo: Home Assistant
Details:
- Domain Names:
hass.ejemplo.site - Scheme:
http - Forward Hostname/IP:
192.168.1.X - Forward Port:
8123 - Cache Assets: NO marcar
- Block Common Exploits: SÍ marcar
- Websockets Support: SÍ marcar
SSL: Dejar en "None" por ahora
Save
Configuraciones recomendadas por tipo de servicio:
Webs estáticas (web1, web2, web3):
- Cache Assets: ✅
- Block Common Exploits: ✅
- Websockets: ❌
Apps dinámicas (Home Assistant, Zigbee2MQTT, Homepage):
- Cache Assets: ❌
- Block Common Exploits: ✅
- Websockets: ✅
Proxmox / PBS (HTTPS backends):
- Scheme:
https:// - Cache Assets: ❌
- Block Common Exploits: ✅
- Websockets: ✅
- Advanced → Custom Nginx Configuration:
proxy_ssl_verify off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";phpMyAdmin / Piwigo:
- Cache Assets: ❌
- Block Common Exploits: ✅
- Websockets: ❌
PASO 19: Migración DNS
19.1. Exportar configuración actual de Cloudflare
Antes de cambiar nada, exporta tus registros DNS actuales:
Opción A: Capturas de pantalla del panel de Cloudflare
Opción B: Exportación via API (si tienes muchos registros)
19.2. Cambiar nameservers en GoDaddy
- Acceder a: https://dcc.godaddy.com/domains
- Seleccionar
ejemplo.site - Buscar sección "Nameservers"
- Cambiar de Custom (Cloudflare) a Use GoDaddy nameservers
Los nameservers de GoDaddy son:
ns15.domaincontrol.com
ns16.domaincontrol.com19.3. Configurar registros DNS en GoDaddy
En Manage DNS del dominio:
Eliminar:
- ❌ A Record "Parked"
- ❌ CNAME "www"
- ❌ CNAME "_domainconnect"
- ❌ TXT "_dmarc" (a menos que uses email)
Mantener:
- ✅ NS Records (ns15/ns16.domaincontrol.com)
- ✅ SOA Record (auto-generado)
Añadir estos DOS registros:
| Type | Name | Value | TTL |
|---|---|---|---|
| A | @ | IP_DEL_VPS | 600 |
| A | * | IP_DEL_VPS | 600 |
Explicación:
@→ El dominio principal apunta al VPS*→ Wildcard: TODOS los subdominios apuntan al VPS
Guardar cambios.
19.4. Verificar propagación DNS
Esto puede tardar 10-30 minutos (máximo 48h, pero normalmente es rápido).
Verificar consultando directamente a GoDaddy:
dig @ns15.domaincontrol.com ejemplo.site +shortDebería devolver: IP_DEL_VPS
Verificar propagación global:
dig @8.8.8.8 ejemplo.site +short
dig @8.8.8.8 web1.ejemplo.site +shortCuando devuelvan IP_DEL_VPS, ya está propagado.
Limpiar caché DNS local:
Tu ordenador puede tener caché antigua. Prueba en modo incógnito del navegador o edita temporalmente /etc/hosts:
sudo nano /etc/hostsAñadir:
IP_DEL_VPS web1.ejemplo.site
IP_DEL_VPS hass.ejemplo.site
# ... (resto de subdominios)Esto fuerza la resolución mientras propaga el DNS globalmente.
PASO 20: Activar SSL (Let's Encrypt)
Una vez el DNS esté propagado (consultando a @8.8.8.8 devuelve tu IP), activa SSL.
Para CADA Proxy Host:
- Proxy Hosts → Click en los 3 puntos → Edit
- Pestaña SSL
- Configuración:
- SSL Certificate: Request a New SSL Certificate
- ✅ Force SSL
- ✅ HTTP/2 Support
- ✅ HSTS Enabled
- Save
Nginx Proxy Manager pedirá el certificado automáticamente a Let's Encrypt.
Verificar HTTPS
Abre el navegador en modo incógnito:
https://web1.ejemplo.siteDebería cargar con candado verde 🔒
Repite para todos tus subdominios.
PASO 21: Limpieza final
Quitar /etc/hosts temporal
sudo nano /etc/hostsEliminar las líneas que añadiste temporalmente.
Limpiar caché DNS local
Si usas AdGuard Home o Pi-hole:
ssh root@192.168.1.X
systemctl restart AdGuardHome
# o
pihole restartdnsResultado final
¡Felicidades! Ya tienes tu propia infraestructura funcionando:
✅ VPS con IP limpia (sin bloqueos)
✅ Túnel WireGuard cifrado
✅ Nginx Proxy Manager con SSL automático
✅ Fail2ban protegiendo contra ataques
✅ DNS apuntando a tu VPS
✅ HTTPS funcionando en todos los subdominios
Ventajas conseguidas:
- ✅ Adiós bloqueos de LaLiga
- ✅ Control total de tu infraestructura
- ✅ SSL/HTTPS automático
- ✅ Protección básica contra ataques
- ✅ Independencia de Cloudflare
Mantenimiento básico
Verificar estado del túnel
# En el VPS
wg show
# En el CT
pct enter 102
wg showVer logs de Fail2ban
fail2ban-client status
journalctl -u fail2ban -fActualizar Nginx Proxy Manager
cd /opt/nginx-proxy-manager
docker compose pull
docker compose up -dAñadir nuevo subdominio
- Crear registro DNS en GoDaddy (si no usas wildcard)
- Crear Proxy Host en Nginx Proxy Manager
- Activar SSL
Costes mensuales
- VPS Hetzner CX23: ~5,11€/mes
- Dominio: Ya lo tenías (variable según registrar)
- Total: ~5€/mes
A cambio de:
- Infraestructura propia
- Sin bloqueos
- Control total
- Aprendizaje valioso
Próximos artículos
Esta guía es el primero de una serie sobre infraestructura self-hosted:
- ✅ VPS como reverse proxy con WireGuard (este artículo)
- 🔜 Monitorización con Uptime Kuma self-hosted
- 🔜 Backup del VPS remoto a Proxmox Backup Server
Notas finales
Este tutorial está basado en mi experiencia real migrando de Cloudflare Tunnel a infraestructura propia. Los bloqueos de LaLiga cada fin de semana me impedían acceder a mi domótica, webs en desarrollo y servidor Proxmox.
Ahora tengo control total, pago 5€/mes por tranquilidad, y de paso he aprendido un montón sobre redes, túneles VPN y reverse proxies.
¿Vale la pena? Para mí, absolutamente sí.
Recursos adicionales
- Hetzner Cloud: https://www.hetzner.com/cloud
- Nginx Proxy Manager: https://nginxproxymanager.com
- WireGuard: https://www.wireguard.com
- Proxmox Community Scripts: https://community-scripts.github.io/ProxmoxVE/
¿Te ha sido útil?
Ayúdame a mejorar con tu puntuación y comentarios.
💬 Comentarios
Los comentarios están gestionados por GitHub Discussions. Necesitas una cuenta de GitHub para participar. ¡Es gratis y rápido!