我的第二个 Cloudflare Tunnel

发布: (2025年12月4日 GMT+8 17:02)
5 分钟阅读
原文: Dev.to

Source: Dev.to

Cover image for My second Cloudflare Tunnel

我决定不再使用 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 容器的形式运行

创建命名隧道

  1. 在 Cloudflare Zero Trust 仪表板,进入 Access > Tunnels
  2. 点击 Create a tunnel 并选择 Cloudflared
  3. 为隧道命名(例如 nas)。
  4. 复制生成的隧道令牌 —— 稍后会用到。

该令牌用于对隧道进行身份验证。

在 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: 访问应用,而无需暴露任何端口。

配置公共主机名

  1. 在 Cloudflare 仪表板打开隧道配置。
  2. 前往 Public Hostname 选项卡,点击 Add a public hostname
  3. 设置子域、域名和服务路径(例如 http://myapp:)。

主机名必须与 Docker 链接别名匹配。如果出现类似错误:

dial tcp: lookup wrongname on 192.168.1.254:53: no such host

请检查链接名称和主机名是否不一致。

添加身份验证

如果不做额外保护,任何拥有该 URL 的人都可以访问应用。Cloudflare Access 提供内置的身份验证,无需修改代码。

  1. 前往 Access > Applications
  2. 点击 Add an application > Self‑hosted
  3. 填写应用名称、域名和子域名,然后点击 Next
  4. 创建策略:
    • Policy name: “Allow myself”
    • Action: Allow
    • Include rule: Emails → john@doe.it
  5. 完成后添加该应用。

Policy created

确保该策略已关联到隧道;否则 Cloudflare 不会强制执行身份验证。

结果

  1. Cloudflare 显示身份验证页面。
  2. 您输入电子邮件。
  3. Cloudflare 发送一次性代码。
  4. 输入代码后,您已通过身份验证。
  5. 请求通过隧道代理到应用程序。

现在我可以从任何地方安排帖子。

结论

Cloudflare Tunnel 提供了一种优雅、免费 的自托管解决方案:

  • 自动 HTTPS
  • 通过 Cloudflare Access 内置身份验证
  • 无入站端口,保持家庭网络安全

整个设置大约用了 30 分钟,其中大部分时间用于修复容器名称和策略分配。希望本指南能帮助遇到类似挑战的朋友。

进一步阅读

最初发表于 A Java Geek ,2025 年 11 月 30 日。

Back to Blog

相关文章

阅读更多 »