你想在火车上打开 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 安全加固:任何面向互联网的机器都应先做这一步
评论
暂无评论。来做第一个吧。