Você quer abrir o painel do Home Assistant no trem. O roteador diz não: a operadora coloca você atrás de um CGNAT, ou o redirecionamento de porta até seria possível, mas você prefere não pendurar toda a rede de casa na internet para acender uma luz. Um VPS pequeno resolve os dois casos. A sua casa se conecta para fora até ele via WireGuard, e o VPS é a única face pública: com um domínio de verdade, um certificado de verdade e nada em casa escutando o mundo.
Como o setup funciona
phone ──HTTPS──> VPS (Caddy :443) ──WireGuard──> Home Assistant :8123 at home
▲
home box dials out on UDP 51820
O VPS roda duas coisas: um servidor WireGuard e o Caddy como proxy reverso. Em casa, um cliente WireGuard (no host do Home Assistant, num Raspberry Pi ou no roteador) mantém um túnel aberto. Quando você acessa https://ha.example.com, o Caddy passa a requisição pelo túnel até 10.8.0.2:8123.
Do que você precisa
- Um plano com IP dedicado. O VPS precisa aceitar a porta 443 e a UDP 51820 de entrada. O Nano-IP a $8 por mês é mais que suficiente: ele move poucos kilobytes de tráfego do painel sem esforço. Planos NAT não aceitam conexões de entrada além da sua porta SSH pessoal (como o NAT funciona aqui).
- Um domínio com um registro A apontando para o IP do VPS.
- Um cliente WireGuard em casa que alcance o Home Assistant na rede local.
1. Servidor WireGuard no 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. O lado de casa
Em qualquer máquina Linux em casa (ou num add-on cliente WireGuard do Home Assistant), crie o peer. O keepalive é importante: ele mantém o túnel aberto através do NAT do roteador de casa.
[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
Se o cliente WireGuard rodar numa máquina diferente da do Home Assistant, encaminhe 10.8.0.2:8123 para o host do HA na rede local; ou, mais simples, rode o cliente no próprio host do HA.
3. HTTPS com Caddy
cat > /etc/caddy/Caddyfile <<'EOF'
ha.example.com {
reverse_proxy 10.8.0.2:8123
}
EOF
systemctl reload caddy
O Caddy obtém o certificado automaticamente e cuida da conexão WebSocket da qual o app do Home Assistant depende.
4. Diga ao Home Assistant para confiar no proxy
Sem isso, o HA rejeita requisições que passam pelo proxy. No configuration.yaml:
http:
use_x_forwarded_for: true
trusted_proxies:
- 10.8.0.1
Reinicie o Home Assistant, abra https://ha.example.com e defina essa URL como endereço externo no app para celular.
Os prós e contras, com honestidade
O HTTPS termina no VPS, então esse servidor vê o tráfego do painel em texto claro antes de ele entrar no túnel. O servidor é seu, e esse é justamente o ponto, mas trate-o como parte da rede de casa: só chaves SSH, atualizações ativadas, nada mais rodando nele. Mantenha a senha do Home Assistant e o login com dois fatores ativados; o proxy não é uma camada de autenticação.
O serviço de nuvem oficial e pago da equipe do Home Assistant faz o mesmo trabalho sem nenhuma manutenção e financia o projeto. Se você prefere não administrar servidor nenhum, é uma resposta perfeitamente válida. O caminho do VPS vence quando você já faz self-hosting, quer o seu próprio domínio ou quer colocar outros serviços de casa atrás do mesmo túnel no futuro.
Guias relacionados
- Configurar uma VPN WireGuard num VPS: o passo a passo completo do WireGuard
- Proxy reverso Nginx com HTTPS: se você prefere Nginx ao Caddy
- Proteger um VPS novo: faça isso primeiro em qualquer máquina exposta à internet
Comentários
Nenhum comentário ainda. Seja o primeiro.