Cloudflare Tunnel 配置指南
如果你没有公网 IP,可以使用 Cloudflare Tunnel 安全地暴露 Home Assistant,无需配置端口转发或动态 DNS。
优势:无需公网 IP、无需端口转发、自动 HTTPS、免费使用
什么是 Cloudflare Tunnel?
Cloudflare Tunnel(原 Argo Tunnel)是一个安全的连接工具,它会在你的本地服务和 Cloudflare 边缘网络之间创建一个加密的隧道。 通过这个隧道,你可以安全地暴露本地服务,而无需公网 IP 或开放防火墙端口。
参考文档: Cloudflare Tunnel 官方文档
前置要求
- Cloudflare 账户(免费账户即可)
- 已部署的 Home Assistant(参考 Home Assistant 部署指南)
- 能够运行 cloudflared 的设备(与 Home Assistant 在同一网络)
安装 cloudflared
Linux
# Ubuntu/Debian
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared-linux-amd64.deb
# 或使用包管理器
sudo apt-get update && sudo apt-get install cloudflared
macOS
brew install cloudflared
Windows
下载安装包:
# 从 GitHub 下载最新版本
https://github.com/cloudflare/cloudflared/releases
Docker
docker pull cloudflare/cloudflared:latest
创建 Tunnel
1. 登录 Cloudflare
cloudflared tunnel login
这会打开浏览器,让你登录 Cloudflare 账户并授权。授权后,证书会自动保存。
2. 创建 Tunnel
cloudflared tunnel create home-assistant
这会创建一个名为 home-assistant 的 Tunnel。
记住返回的 Tunnel ID,后续配置需要用到。
3. 创建配置文件
创建配置文件目录:
mkdir -p ~/.cloudflared
创建配置文件 ~/.cloudflared/config.yml:
tunnel: YOUR_TUNNEL_ID
credentials-file: /home/username/.cloudflared/YOUR_TUNNEL_ID.json
ingress:
- hostname: ha.yourdomain.com
service: http://localhost:8123
- service: http_status:404
将 YOUR_TUNNEL_ID 替换为实际的 Tunnel ID,
将 ha.yourdomain.com 替换为你的域名。
配置 DNS 记录
方法 1:使用命令行
cloudflared tunnel route dns home-assistant ha.yourdomain.com
方法 2:在 Cloudflare Dashboard 中配置
- 登录 Cloudflare Dashboard
- 选择你的域名
- 进入 DNS → Records
- 添加 CNAME 记录:
- Name:
ha - Target:
YOUR_TUNNEL_ID.cfargotunnel.com - Proxy status: 已代理(橙色云)
- Name:
运行 Tunnel
临时运行(测试)
cloudflared tunnel run home-assistant
作为系统服务运行(推荐)
安装为系统服务:
sudo cloudflared service install
这会创建一个 systemd 服务,Tunnel 会在系统启动时自动运行。
Docker 方式运行
docker run -d \\
--name cloudflared \\
--restart unless-stopped \\
-v ~/.cloudflared:/etc/cloudflared \\
cloudflare/cloudflared:latest \\
tunnel run home-assistant
验证配置
- 等待 DNS 记录生效(通常几分钟)
- 访问
https://ha.yourdomain.com - 应该能看到 Home Assistant 登录页面
- 使用 Home Assistant 的长期访问令牌测试 API 访问
配置 Home Voice Box
在 Home Voice Box 的环境变量中,将 HA_URL 设置为:
HA_URL=https://ha.yourdomain.com
这样 Home Voice Box 就可以通过 Cloudflare Tunnel 访问你的 Home Assistant 了。
故障排除
Tunnel 无法连接
- 检查 cloudflared 是否正在运行:
cloudflared tunnel list - 检查配置文件路径和内容是否正确
- 查看日志:
cloudflared tunnel info home-assistant
DNS 解析失败
- 确认 DNS 记录已正确配置
- 等待 DNS 传播(最多 24 小时,通常几分钟)
- 使用
nslookup ha.yourdomain.com检查 DNS 解析
无法访问 Home Assistant
- 确认 Home Assistant 在本地可以访问(
http://localhost:8123) - 检查配置文件中的 service 地址是否正确
- 查看 cloudflared 日志获取详细错误信息