Chcesz otworzyć panel Home Assistanta w pociągu. Router mówi „nie”: dostawca trzyma cię za CGNAT albo przekierowanie portów byłoby możliwe, ale wolisz nie wystawiać całej domowej sieci do internetu po to, żeby zapalić światło. Mały VPS rozwiązuje oba problemy. Dom łączy się z nim na zewnątrz przez WireGuard, a VPS jest jedyną publiczną twarzą: z prawdziwą domeną, prawdziwym certyfikatem i niczym w domu nasłuchującym świata.
Jak działa ta konfiguracja
phone ──HTTPS──> VPS (Caddy :443) ──WireGuard──> Home Assistant :8123 at home
▲
home box dials out on UDP 51820
Na VPS-ie działają dwie rzeczy: serwer WireGuard i Caddy jako reverse proxy. W domu klient WireGuard (na hoście Home Assistanta, na Raspberry Pi albo na routerze) utrzymuje otwarty tunel. Gdy wchodzisz na https://ha.example.com, Caddy przekazuje żądanie przez tunel do 10.8.0.2:8123.
Czego potrzebujesz
- Planu z dedykowanym IP. VPS musi przyjmować przychodzący ruch na 443 i UDP 51820. Nano-IP za $8 miesięcznie to aż nadto: przenosi kilka kilobajtów ruchu z panelu bez wysiłku. Plany NAT nie przyjmują połączeń przychodzących poza twoim osobistym portem SSH (jak działa u nas NAT).
- Domeny z rekordem A wskazującym na IP VPS-a.
- Klienta WireGuard w domu, który widzi Home Assistanta w sieci lokalnej.
1. Serwer WireGuard na VPS-ie
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. Strona domowa
Na dowolnej maszynie z Linuksem w domu (albo w dodatku klienta WireGuard dla Home Assistanta) utwórz peera. Keepalive jest ważny: utrzymuje tunel otwarty przez NAT domowego routera.
[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
Jeśli klient WireGuard działa na innej maszynie niż Home Assistant, przekieruj 10.8.0.2:8123 do hosta HA w sieci lokalnej; albo, prościej, uruchom klienta bezpośrednio na hoście HA.
3. HTTPS z Caddy
cat > /etc/caddy/Caddyfile <<'EOF'
ha.example.com {
reverse_proxy 10.8.0.2:8123
}
EOF
systemctl reload caddy
Caddy sam pobiera certyfikat i obsługuje połączenie WebSocket, z którego korzysta aplikacja Home Assistant.
4. Powiedz Home Assistantowi, żeby ufał proxy
Bez tego HA odrzuca żądania przechodzące przez proxy. W configuration.yaml:
http:
use_x_forwarded_for: true
trusted_proxies:
- 10.8.0.1
Zrestartuj Home Assistanta, otwórz https://ha.example.com i ustaw ten adres URL jako adres zewnętrzny w aplikacji mobilnej.
Szczerze o kompromisach
HTTPS kończy się na VPS-ie, więc ten serwer widzi ruch z panelu w postaci jawnej, zanim trafi on do tunelu. Serwer jest twój i o to właśnie chodzi, ale traktuj go jak część domowej sieci: tylko klucze SSH, włączone aktualizacje, nic innego na nim nie działa. Zostaw włączone hasło Home Assistanta i logowanie dwuskładnikowe; proxy nie jest warstwą uwierzytelniania.
Płatna oficjalna usługa chmurowa zespołu Home Assistant robi to samo bez żadnej obsługi i finansuje projekt. Jeśli wolisz w ogóle nie utrzymywać serwera, to zupełnie dobra odpowiedź. Droga przez VPS wygrywa, gdy już hostujesz coś sam, chcesz własnej domeny albo chcesz w przyszłości schować za tym samym tunelem inne domowe usługi.
Powiązane poradniki
- Konfiguracja VPN WireGuard na VPS-ie: pełny przewodnik po WireGuardzie
- Reverse proxy Nginx z HTTPS: jeśli wolisz Nginx od Caddy
- Zabezpieczanie nowego VPS-a: zrób to najpierw na każdej maszynie wystawionej do internetu
Komentarze
Brak komentarzy. Bądź pierwszy.