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 中配置

  1. 登录 Cloudflare Dashboard
  2. 选择你的域名
  3. 进入 DNSRecords
  4. 添加 CNAME 记录:
    • Name: ha
    • Target: YOUR_TUNNEL_ID.cfargotunnel.com
    • Proxy status: 已代理(橙色云)

运行 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

验证配置

  1. 等待 DNS 记录生效(通常几分钟)
  2. 访问 https://ha.yourdomain.com
  3. 应该能看到 Home Assistant 登录页面
  4. 使用 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 日志获取详细错误信息

参考资源