我的第二个 Cloudflare Tunnel
Source: Dev.to

我决定不再使用 Twitter,并且为了支持乌克兰,转而使用 Mastodon、Bluesky 和 LinkedIn。每个平台都有各自的调度工具,这很快就变得麻烦,于是我构建了一个基于 Docker 的应用来统一调度这些平台的帖子。虽然该应用在我家里的 Synology NAS(通过 .local 名称访问)上运行良好,但我需要一种在前往澳大利亚旅行时能够安全访问它的方法,而不暴露我的家庭网络。
问题
快速回顾涉及的隐私和安全问题:
- 端口转发会暴露家庭 IP 地址
- 动态 DNS 需要不断更新
- 打开端口存在安全风险
- SSL 证书管理麻烦
我想要一个能够:
- 保持家庭网络安全
- 自动提供 HTTPS
- 添加身份验证
- 易于维护
使用 Cloudflare Tunnel
Cloudflare Tunnel 在您的网络与 Cloudflare 边缘之间创建一个安全的出站连接。对您域名的请求会通过此隧道路由到您的应用程序,无需任何入站端口。
Flow:
Internet → Cloudflare Edge → Tunnel → NAS → Application
所有连接均从 NAS 出站,防火墙保持不受影响。
Source: …
设置隧道
前置条件
- 一个由 Cloudflare 管理的域名
- 在 NAS 上运行的 Docker 服务
- 你的应用以 Docker 容器的形式运行
创建命名隧道
- 在 Cloudflare Zero Trust 仪表板,进入 Access > Tunnels。
- 点击 Create a tunnel 并选择 Cloudflared。
- 为隧道命名(例如
nas)。 - 复制生成的隧道令牌 —— 稍后会用到。
该令牌用于对隧道进行身份验证。
在 NAS 上运行 cloudflared
拉取官方 Docker 镜像:
docker pull cloudflare/cloudflared:2025.9.1
使用 Synology Docker UI 创建容器,设置如下:
- Container name:
cloudflared - Command:
tunnel --no-autoupdate run - Environment variable:
TUNNEL_TOKEN= - Network: 与你的应用相同的网络(例如
bridge)
为 cloudflared 容器创建指向应用容器的链接:
- Link container: 应用容器的名称(例如
myapp) - Alias: 同名 (
myapp)
这样 cloudflared 就可以通过 http://myapp: 访问应用,而无需暴露任何端口。
配置公共主机名
- 在 Cloudflare 仪表板打开隧道配置。
- 前往 Public Hostname 选项卡,点击 Add a public hostname。
- 设置子域、域名和服务路径(例如
http://myapp:)。
主机名必须与 Docker 链接别名匹配。如果出现类似错误:
dial tcp: lookup wrongname on 192.168.1.254:53: no such host
请检查链接名称和主机名是否不一致。
添加身份验证
如果不做额外保护,任何拥有该 URL 的人都可以访问应用。Cloudflare Access 提供内置的身份验证,无需修改代码。
- 前往 Access > Applications。
- 点击 Add an application > Self‑hosted。
- 填写应用名称、域名和子域名,然后点击 Next。
- 创建策略:
- Policy name: “Allow myself”
- Action: Allow
- Include rule: Emails →
john@doe.it
- 完成后添加该应用。

确保该策略已关联到隧道;否则 Cloudflare 不会强制执行身份验证。
结果
- Cloudflare 显示身份验证页面。
- 您输入电子邮件。
- Cloudflare 发送一次性代码。
- 输入代码后,您已通过身份验证。
- 请求通过隧道代理到应用程序。
现在我可以从任何地方安排帖子。
结论
Cloudflare Tunnel 提供了一种优雅、免费 的自托管解决方案:
- 自动 HTTPS
- 通过 Cloudflare Access 内置身份验证
- 无入站端口,保持家庭网络安全
整个设置大约用了 30 分钟,其中大部分时间用于修复容器名称和策略分配。希望本指南能帮助遇到类似挑战的朋友。
进一步阅读
- Cloudflare Tunnel for Home Assistant
- Cloudflare Access controls
- Cloudflare Policies
- I finally understand Cloudflare Zero Trust tunnels
最初发表于 A Java Geek ,2025 年 11 月 30 日。