Quieres abrir el panel de Home Assistant desde el tren y tu router no te deja: el proveedor te tiene detrás de CGNAT, o abrir un puerto sería técnicamente posible pero no quieres colgar toda tu red doméstica de internet para encender una lámpara. Un VPS pequeño resuelve ambas cosas. Tu casa se conecta hacia fuera por WireGuard, y la única cara pública es ese servidor: con un dominio real, un certificado real y ningún puerto de casa escuchando al mundo.
Cómo funciona
phone ──HTTPS──> VPS (Caddy :443) ──WireGuard──> Home Assistant :8123 at home
▲
home box dials out on UDP 51820
El VPS ejecuta dos cosas: un servidor WireGuard y Caddy como proxy inverso. En casa, un cliente WireGuard (en el equipo de Home Assistant, una Raspberry Pi o tu router) mantiene el túnel abierto. Cuando visitas https://ha.example.com, Caddy pasa la petición por el túnel a 10.8.0.2:8123.
Qué necesitas
- Un plan con IP dedicada. El VPS debe aceptar el 443 entrante y el UDP 51820. Nano-IP por $8 al mes es más que suficiente: mueve unos pocos kilobytes de tráfico del panel sin inmutarse. Los planes NAT no aceptan conexiones entrantes salvo tu puerto SSH personal (cómo funciona el NAT aquí).
- Un dominio con un registro A apuntando a la IP del VPS.
- Un cliente WireGuard en casa que llegue a Home Assistant en la red local.
1. Servidor WireGuard en el VPS
apt update && apt install -y wireguard caddy
wg genkey | tee /etc/wireguard/server.key | wg pubkey > /etc/wireguard/server.pub
chmod 600 /etc/wireguard/server.key
cat > /etc/wireguard/wg0.conf <<EOF
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = $(cat /etc/wireguard/server.key)
[Peer]
# the home side
PublicKey = HOME_PUBLIC_KEY
AllowedIPs = 10.8.0.2/32
EOF
systemctl enable --now wg-quick@wg0
ufw allow 51820/udp && ufw allow 80,443/tcp
2. El lado de casa
En cualquier equipo Linux de casa (o en un complemento cliente de WireGuard para Home Assistant), crea el par. El keepalive importa: mantiene el túnel abierto a través del NAT de tu router.
[Interface]
Address = 10.8.0.2/24
PrivateKey = HOME_PRIVATE_KEY
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = ha-vps.example.com:51820
AllowedIPs = 10.8.0.1/32
PersistentKeepalive = 25
Si el cliente WireGuard corre en un equipo distinto al de Home Assistant, redirige 10.8.0.2:8123 al equipo de HA en la red local, o más sencillo: instala el cliente directamente en el equipo de HA.
3. HTTPS con Caddy
cat > /etc/caddy/Caddyfile <<'EOF'
ha.example.com {
reverse_proxy 10.8.0.2:8123
}
EOF
systemctl reload caddy
Caddy obtiene el certificado automáticamente y gestiona la conexión WebSocket de la que depende la app de Home Assistant.
4. Que Home Assistant confíe en el proxy
Sin esto, HA rechaza las peticiones que llegan por el proxy. En configuration.yaml:
http:
use_x_forwarded_for: true
trusted_proxies:
- 10.8.0.1
Reinicia Home Assistant, abre https://ha.example.com y configura esa URL como dirección externa en la app móvil.
Los compromisos, con honestidad
El HTTPS termina en el VPS, así que ese servidor ve el tráfico del panel en claro antes de que entre en el túnel. Es tu servidor, esa es la gracia, pero trátalo como parte de tu red doméstica: solo claves SSH, actualizaciones activadas y nada más corriendo en él. Mantén la contraseña y la verificación en dos pasos de Home Assistant: el proxy no es una capa de autenticación.
El servicio oficial de pago en la nube del equipo de Home Assistant hace lo mismo sin ningún mantenimiento y además financia el proyecto. Si prefieres no gestionar ningún servidor, es una respuesta perfectamente válida. La vía del VPS gana cuando ya alojas tus propios servicios, quieres tu propio dominio o piensas poner más servicios de casa detrás del mismo túnel más adelante.
Guías relacionadas
- Configurar una VPN WireGuard en un VPS: el paso a paso completo de WireGuard
- Proxy inverso Nginx con HTTPS: si prefieres Nginx a Caddy
- Asegurar un VPS nuevo: hazlo primero en cualquier servidor expuesto a internet
Comentarios
Aún no hay comentarios. Sé el primero.