您想在火車上開啟 Home Assistant 的儀表板。路由器卻不答應:電信業者把您放在了電信業者級 NAT 之後,或者埠轉發雖然可行,但您不想為了開一盞燈就把整個家庭網路掛到網際網路上。一台小 VPS 就能同時解決這兩個問題。您家透過 WireGuard 主動向外連線到它,而 VPS 是唯一的公開門面:有真正的網域、真正的憑證,家裡沒有任何東西在監聽外部世界。
這套方案如何運作
phone ──HTTPS──> VPS (Caddy :443) ──WireGuard──> Home Assistant :8123 at home
▲
home box dials out on UDP 51820
VPS 上執行兩樣東西:一個 WireGuard 伺服器,以及作為反向代理的 Caddy。在家裡,一個 WireGuard 用戶端(執行在 Home Assistant 主機、樹莓派或路由器上)保持通道常開。當您存取 https://ha.example.com 時,Caddy 會把請求透過通道轉給 10.8.0.2:8123。
您需要準備
- 一個帶獨立 IP 的方案。 VPS 必須接受對內的 443 埠和 UDP 51820。每月 $8 的 Nano-IP 綽綽有餘:它只搬運幾千位元組的儀表板流量,毫不費力。NAT 方案除了您的專屬 SSH 埠外不接受任何對內連線(我們的 NAT 如何工作)。
- 一個網域,其 A 記錄指向 VPS 的 IP。
- 家裡的一個 WireGuard 用戶端,能在區域網記憶體取到 Home Assistant。
1. VPS 上的 WireGuard 伺服器
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. 家裡這一端
在家中任意一台 Linux 機器上(或在 Home Assistant 的 WireGuard 用戶端載入項中)建立對端。keepalive 很重要:它能讓通道穿過家用路由器的 NAT 保持開啟。
[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
如果 WireGuard 用戶端執行在與 Home Assistant 不同的機器上,就把 10.8.0.2:8123 轉發到區域網中的 HA 主機;更簡單的做法是直接在 HA 主機上執行用戶端。
3. 用 Caddy 提供 HTTPS
cat > /etc/caddy/Caddyfile <<'EOF'
ha.example.com {
reverse_proxy 10.8.0.2:8123
}
EOF
systemctl reload caddy
Caddy 會自動申請憑證,並處理 Home Assistant 應用依賴的 WebSocket 連線。
4. 讓 Home Assistant 信任代理
缺少這一步,HA 會拒絕經過代理的請求。在 configuration.yaml 中加入:
http:
use_x_forwarded_for: true
trusted_proxies:
- 10.8.0.1
重新啟動 Home Assistant,開啟 https://ha.example.com,並在手機應用中把這個 URL 設為外部位址。
坦誠說說取捨
HTTPS 在 VPS 上終止,所以這台伺服器在流量進入通道前能看到明文的儀表板內容。伺服器是您的,這正是關鍵,但請把它當作家庭網路的一部分來對待:只用 SSH 金鑰登入、開啟自動更新、不跑任何其他東西。請保持 Home Assistant 的密碼和兩步登入開啟;代理並不是一個認證層。
Home Assistant 團隊的官方付費雲服務能以零維護完成同樣的事,還能資助這個專案。如果您完全不想維運伺服器,那是一個非常好的選擇。當您已經在自建服務、想用自己的網域,或者以後想把家裡的其他服務也放到同一條通道後面時,VPS 方案才更勝一籌。
相關指南
- 在 VPS 上搭建 WireGuard VPN:完整的 WireGuard 教學
- 帶 HTTPS 的 Nginx 反向代理:如果您更喜歡 Nginx 而不是 Caddy
- 新 VPS 安全加固:任何面向網際網路的機器都應先做這一步
評論
目前還沒有評論。歡迎成為第一位。