关于 haos-https-tunnel
haos-https-tunnel 是为 Home Assistant OS 配置 Cloudflare Tunnel 的操作指南,面向希望从外网通过 HTTPS 访问 HAOS 的用户。它说明了安装、代理信任、授权和验证步骤,无需开放路由器入站端口。
主要功能
- 01安装并配置 cloudflared 插件
- 02通过 Cloudflare 授权创建 Tunnel
- 03设置 Home Assistant 可信代理
- 04检查连接日志与 HTTPS 响应
- 05提供用户授权和界面设置交接
适用场景
- 01从外网安全访问 HAOS
- 02在不开放路由器端口时发布 HTTPS 地址
- 03配置反向代理的可信来源
- 04排查 Tunnel 连接及访问问题
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ caanio/ agent-skills --skill haos-https-tunnel安装后在 Claude Code 中输入/haos-https-tunnel确认已加载。
详细介绍
通过 Cloudflare Tunnel 为 HAOS 启用 HTTPS
为 HAOS 设备配置公开的 https://ha.<domain>,让你随时随地都能访问,无需开放路由器端口,也无需在客户端设备上安装任何东西。已于 2026-07-10 在 Raspberry Pi 4(HAOS 18.1、Core 2026.6.4)上使用 brenner-tobias/cloudflared 插件
v7.0.9 实测验证;§4 中适用于 ≥ 2026.8 的 UI 操作步骤遵循官方 http
集成页面。以下每个陷阱都是真实遇到的;⚠️ 表示陷阱。
0. 为什么选择这种方案(以及排除了哪些方案)
Tunnel = RPi 与 Cloudflare 建立一条出站的长连接;DNS 是指向
cfargotunnel.com 的 CNAME,永远不会指向你的家庭 IP。无需开放入站端口,动态 IP
也完全不是问题,TLS 使用 Tunnel 令牌在 Cloudflare 处终止。
已排除的替代方案(只有出现新情况时才重新建议):
- HA 原生 SSL(
http: ssl_certificate):会强制全局使用 HTTPS — 本地的http://<ip>:8123将无法使用,而且所有操作都会变慢。实际使用后很后悔。 - DuckDNS + 端口转发 443:会将家庭 IP 和一个入站端口暴露给互联网。
- Nabu Casa:可用,但需要按月付费。
- Tailscale:每台客户端设备都需要安装应用。
1. 前提条件
- 一个在用户 Cloudflare 账户中作为区域添加的域名。通过 Cloudflare
Registrar 购买 → 区域会自动创建。从任何地方验证:
dig +short NS <domain>→ 应返回*.ns.cloudflare.com域名。 - 按照
haos-addon-deploy§0/§8 通过 SSH 访问 HAOS 设备(⚠️ 非交互式的haCLI 调用需要使用ssh ha 'bash -lc "…"',否则会出现unauthorized)。 ha= 指向 Advanced SSH & Web Terminal 插件的 SSH 别名,Protection 模式已关闭。- ⚠️ 你(Agent)可以完成以下所有操作,用户需要执行的步骤除外:Cloudflare 登录授权(§5),以及 Core ≥ 2026.8 时在 UI 中设置代理(§4)——请安排好交接。
2. 安装 cloudflared 插件
ssh ha 'bash -lc "ha store add https://github.com/brenner-tobias/ha-addons && ha store reload"'
ssh ha 'bash -lc "ha store repositories | grep -B2 -A4 -i brenner"' # repo slug: 9074a9fa
ssh ha 'bash -lc "ha apps install 9074a9fa_cloudflared"'
- ⚠️ 子命令是**
ha store add <url>**。没有add-repository;使用错误的 子命令不会报错,而是输出整个商店列表并以状态码 0 退出,因此请验证仓库是否 实际添加成功(ha store repositories),不要只看退出码。 - 已安装插件的 slug 是
<repo-slug>_cloudflared,例如9074a9fa_cloudflared。
3. 配置插件
只需设置一个选项 — 公开主机名:
echo '{"options":{"external_hostname":"ha.<domain>","additional_hosts":[]}}' \
| ssh ha 'bash -lc "curl -sS -X POST -H \"Authorization: Bearer \$SUPERVISOR_TOKEN\" \
-H \"Content-Type: application/json\" -d @- \
http://supervisor/addons/9074a9fa_cloudflared/options"'
(或者在 HA UI 中使用插件的 Configuration 标签页。)保持 tunnel_token 未设置:§5
中的登录流程会创建 Tunnel。完成后,使用相同的 curl 命令,以普通 GET 请求
…/addons/9074a9fa_cloudflared/info,应能看到已设置的 external_hostname
(haos-addon-deploy §4)。
4. 信任代理(首次启动前)
隧道流量会以反向代理请求的形式到达 HA;除非信任代理子网,否则 HA 会拒绝这些请求(或将所有请求都记录为代理的 IP,从而导致 IP 封禁失效)。设置位置取决于 Core 版本(ssh ha 'bash -lc "ha core info"'):
Core ≥ 2026.8 — UI,由用户操作。 HTTP 服务器在 设置 → 系统 → 网络 中配置;保存后会重启 HA。请让用户设置:
Trust X-Forwarded-For 开启;Trusted proxies 172.30.33.0/24(Supervisor docker 子网,加载项所在位置);Enable IP banning 开启(现在有了公共端点——保持开启);Login attempts before ban 3。所有 ≥ 2026.8 的设备(包括全新安装)都使用 UI——文档中提到的 YAML 导入仅是一次性升级步骤。用户确认四项设置已保存,且 HA 重启后恢复运行,即表示完成。
- ⚠️ 跨版本升级到 2026.8 的设备会在首次启动时将旧的
http:块导入.storage/http,此后会忽略 YAML(修复方法:“HTTP YAML configuration is ignored after migration”)。编辑configuration.yaml不会产生任何效果;实际生效的值由 UI 管理。观察于 2026-08-15,Core 2026.8.1。
Core < 2026.8 — configuration.yaml。
http:
use_x_forwarded_for: true
trusted_proxies:
- 172.30.33.0/24 # Supervisor docker subnet, where add-ons live
ip_ban_enabled: true # public endpoint now — keep this on
login_attempts_threshold: 3
- SSH 加载项中的文件位置:
/config/configuration.yaml(/homeassistant/...是同一卷的别名挂载)。 - ⚠️
/config由 root 拥有——在 SSH 加载项中使用cp/sed时需要 sudo。 - 高风险配置编辑:先备份(
sudo cp configuration.yaml configuration.yaml.bak-YYYYMMDD),再编辑,然后在执行ha core restart前运行ha core check。不要跳过检查——损坏的 YAML 会导致 HA 无法启动。
5. 启动并授权(由用户操作)
ssh ha 'bash -lc "ha apps start 9074a9fa_cloudflared"'
ssh ha 'bash -lc "ha apps logs 9074a9fa_cloudflared"'
首次启动时不要设置 tunnel_token:日志会输出
Please open the following URL and log in with your Cloudflare account:,后面跟着
一个 https://dash.cloudflare.com/argotunnel?... 链接。将此 URL 交给用户——用户登录、选择区域并授权。随后 cloudflared 会下载证书、创建隧道,并自行创建 DNS CNAME。用户报告已完成授权,即表示此步骤完成;§6 会进行确认。
6. 验证
ssh ha 'bash -lc "ha apps logs 9074a9fa_cloudflared"' | grep -iE "registered|route|error"
# want: "Added CNAME ha.<domain> …" + 4× "Registered tunnel connection"
curl -s -o /dev/null -w "%{http_code} %{time_total}s\n" https://ha.<domain>/
# want: 200
- ⚠️ 预检信息
UDP Connectivity … QUIC connection failed / degraded transport, will proceed using 'http2'没有问题——有些网络会阻止出站 UDP 7844; http2 回退可正常工作。只有硬性失败才需要处理。 - “Registered tunnel connection” 行中显示附近的边缘位置(例如
<iata>01) = 延迟良好;无需配置。
7. 设置完成后(告知用户)
- 为 HA 账户启用 2FA——登录页面现在已暴露在公共互联网上。 IP 封禁和登录尝试阈值(§4)只是第二道防线,不能替代 2FA。
- 配套应用:外部 URL →
https://ha.<domain>;内部 URL → LAN 地址,仍可正常使用(http://<lan-ip>:8123)。 - 立即进行完整的 HA 备份(配置刚刚更改过),并将备份从设备中取出——
scp ha:/backup/<file>.tar比网页下载更好。如果用户对/config进行版本管理, 请排除.storage/(身份验证令牌)和secrets.yaml。