HomeAssistant从零开始折腾(三) - 出门在外也能访问
HA已经安装好了,在内网使用homeassistant.local域名已经可以愉快地玩耍了,接下来我们解决一个问题:如何搞定外网访问。
最终的效果:在任意可以访问互联网的地方,使用浏览器访问指定域名,即可访问到家里的HA实例。
目前家里环境没有公网 IPv4,仅有 IPv6,这估计也是现在大部分人的网络条件。
我采用的方案是,在公云服务器上部署 frp 进行穿透,并由 Traefik 作为统一入口处理所有入站流量,最终将请求转发至内网 HA 所在 IP。
我在介绍Homelab的时候有提过这个方案的细节,详见这里
总结成一个示意图,大概是这样子:
graph TD
%% 定义样式
classDef user fill:#7df,stroke:#333,stroke-width:2px,color:black;
classDef cloud fill:#e1f5fe,stroke:#01579b,stroke-width:2px,color:black;
classDef local fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px,color:black;
classDef app fill:#fff9c4,stroke:#fbc02d,stroke-width:2px,color:black;
classDef borderless stroke-width:0,fill:none;
subgraph UserSide [ ]
direction TB
User[👤 用户<br/>浏览器]:::user
Domain((inspoy.cc))
end
subgraph AliCloud [☁️ 公网环境: 阿里云 ECS]
frps[frps 服务端]:::cloud
end
subgraph HomeLab [🏠 内网环境: Homelab]
subgraph JumpHost [🖥️ 跳板机]
frpc[frpc 客户端<br/>连接 frps]:::local
traefik[Traefik 反向代理<br/>监听本地流量]:::app
end
HAOS[HAOS 虚拟机<br/>Home Assistant OS]:::local
end
%% 连接关系
User -->|1. HTTPS 请求| Domain
Domain -->|2. DNS 解析指向公网IP| frps
frps -->|3. Frp 隧道转发<br/>| frpc
frpc -->|4. 转发给本地端口<br/>| traefik
traefik -->|5. 根据 Host 路由规则| HAOS
%% 虚线区域示意
style UserSide fill:none,stroke:none
style AliCloud fill:#f0f7ff,stroke:#81d4fa,stroke-dasharray: 5 5
style HomeLab fill:#f1f8e9,stroke:#a5d6a7,stroke-dasharray: 5 5
然后就可以使用你的公网域名来访问HA了。然而如果不出意外,应该就会出意外了,你会遇到400错误,这是因为HA的反代需要设置白名单。在HA的configuration.yaml里添加如下内容并重启
1 | http: |
然后应该就没啥问题了
当然,跟其他所有服务一样,HA反代到公网之后,最好也再套一层WAF进行防护。