Cloudflare Tunnel 完全指南:零成本内网穿透,比 frp 更安全更方便

哥们儿,你家里那台服务器跑着不少服务吧?NA…

哥们儿,你家里那台服务器跑着不少服务吧?NAS、AI 推理、Git 仓库、监控面板……想从外网访问,却卡在公网 IP 和端口开放这道坎上。

我之前写过 frp 内网穿透,也写过 Tailscale + Headscale 自建。它们都很好用,但 frp 需要一台公网 VPS 当中转,Tailscale 的节点数一多管理起来也挺费神。今天聊的 Cloudflare Tunnel,思路完全不同——它让你完全不用买公网 VPS,连端口都不用开放,还白嫖 Cloudflare 的 CDN 加速和 DDoS 防护。

Cloudflare Tunnel 是什么?

Cloudflare Tunnel(以前叫 Argo Tunnel)是 Cloudflare 推出的安全隧道方案。你在内网机器上装一个叫 cloudflared 的客户端,它会主动向 Cloudflare 的边缘网络发起加密连接。公网用户访问你的域名时,请求直接走 Cloudflare 的网络进入隧道,到达你内网的真实服务。整个过程不暴露任何公网 IP,不打开任何防火墙端口

对比一下几套方案:

  • frp → 需要一台公网 VPS 做中转,自己维护服务端,配置稍复杂
  • Tailscale/Headscale → 基于 WireGuard,适合节点互联,但暴露给外部访问需要额外配置
  • Cloudflare Tunnel → 零开放端口,自动 HTTPS,自带 CDN,不需要公网服务器

如果你只有一两个低流量站点需要暴露给外网(比如 NAS 管理界面、AI 面板、个人博客后台),Cloudflare Tunnel 是目前最省心的方案,没有之一。

前置条件

开始之前,你需要准备好三样东西:

  • 一个域名——必须在 Cloudflare 上托管(Nameservers 指向 Cloudflare)
  • 一台内网的 Linux 机器——Debian 或 Ubuntu 都行
  • Cloudflare 账号——免费版就够用,不用花一分钱

登录 Cloudflare 面板,左侧找到 Zero TrustAccessTunnels,后面就在这里管理隧道。

第一步:安装 cloudflared

cloudflared 是 Cloudflare 官方的隧道客户端,贴一下我常用的安装方式:

# Debian/Ubuntu 一键安装
curl -sL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflared.list
sudo apt update && sudo apt install cloudflared

如果你喜欢直接下二进制,用这条:

curl -sL https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -o /usr/local/bin/cloudflared
chmod +x /usr/local/bin/cloudflared

装完验证一下版本:

cloudflared version

第二步:登录认证

运行下面的命令,cloudflared 会打印一个 URL,复制到浏览器打开,登录 Cloudflare 账号并授权域名:

cloudflared tunnel login

授权成功后,服务器上会生成一个证书文件 ~/.cloudflared/cert.pem。这个文件很重要,后面创建和操作隧道都需要它。如果是在纯 SSH 环境,把 URL 复制到本地浏览器打开就行,不要求浏览器和服务器在同一个网络。

第三步:创建隧道

登录认证通过后,创建一条隧道。隧道名按服务命名,比如我要暴露家里的 NAS 管理界面:

cloudflared tunnel create nas-tunnel

这条命令会做两件事:在 Cloudflare 后台注册一条隧道,并在本地生成一个 JSON 凭证文件(~/.cloudflared/<隧道ID>.json)。记下输出的隧道 ID,后面配置域名要用。

第四步:配置流量转发规则

创建隧道后,需要写一个 YAML 配置文件告诉 cloudflared 流量怎么转发。编辑 ~/.cloudflared/config.yml

tunnel: nas-tunnel
credentials-file: /root/.cloudflared/<隧道ID>.json

ingress:
  - hostname: nas.yourdomain.com
    service: http://192.168.1.100:5000
  - hostname: ai.yourdomain.com
    service: http://192.168.1.101:3000
  - service: http_status:404

解释一下配置:

  • tunnelcredentials-file:指定使用哪条隧道和对应的凭证
  • ingress:入口规则,每个 hostname 匹配一个域名,service 指向内网的实际服务地址
  • 最后一条 http_status:404 是兜底——没匹配到的域名一律返回 404

一条隧道可以挂多个域名,不用每条服务都重新创建隧道。这个设计很合理,一个隧道一个用途,配置文件清晰好维护。

第五步:绑定 DNS 并启动

配置写好之后,告诉 Cloudflare 这些域名要走这条隧道:

cloudflared tunnel route dns nas-tunnel nas.yourdomain.com
cloudflared tunnel route dns nas-tunnel ai.yourdomain.com

这一步会在 Cloudflare DNS 面板里自动添加 CNAME 记录,指向你的隧道 ID。不需要手动进 DNS 管理页面操作。

先前台跑一下验证:

cloudflared tunnel run nas-tunnel

看到输出中出现 Connected to Cloudflare Edge,说明隧道已连通。Ctrl+C 停掉,然后注册成系统服务让它后台跑:

sudo cloudflared service install
sudo systemctl start cloudflared
sudo systemctl enable cloudflared

现在打开浏览器访问 nas.yourdomain.com,应该能看到你家 NAS 的管理界面了。注意看地址栏——HTTPS 证书已经自动配好了,Cloudflare 免费帮你签发的,不用自己折腾 Let’s Encrypt。

进阶:加一层访问控制

隧道通了只是第一步。Cloudflare Tunnel 真正的杀手锏是 Zero Trust 访问策略——你可以给暴露的服务加一道身份认证,陌生人连页面都看不到。

回到 Cloudflare Zero Trust 面板 → Access → Applications,新建一个自托管应用:

  • Application Domain:填 nas.yourdomain.com
  • Session Duration:按需设置,我设 24 小时
  • Policy:添加规则——比如只允许特定邮箱登录,或者限制特定国家 / IP 才能访问

配置完成后,打开 nas.yourdomain.com 会先跳转到 Cloudflare 登录页,认证通过才能进入。这对暴露在公网的管理后台特别重要,等于给服务加了一把 Cloudflare 级别的锁。

踩坑记录

最后分享几个我踩过的坑,你大概率也会碰到:

1. WebSocket 需要手动开启

如果你暴露的服务用了 WebSocket(比如 Open WebUI、Code-Server、Jupyter Lab),默认 Cloudflare 代理可能会拦截 WebSocket 连接。需要去 Cloudflare 面板:你的域名 → NetworkWebSocket,确保状态是 On。

2. 免费版有 100 秒超时限制

Cloudflare 免费版对 HTTP 请求有 100 秒的超时。如果你要在隧道后面传大文件或者做长时间计算的 API 调用,超时后请求会被断开。解决方案:分片上传、换付费版($20/月起)、或者大文件走 frp 直连分流。

3. 系统重启后隧道连不上

如果云服务器重启后 cloudflared 启动失败,大概率是网络还没完全就绪。检查 systemd 服务的启动依赖,给单元文件加上:

[Unit]
After=network-online.target
Wants=network-online.target

然后 systemctl daemon-reload && systemctl restart cloudflared,基本能解决。

4. 大流量场景不推荐

Cloudflare Tunnel 适合的是管理类、低流量的服务。如果你要跑视频流、BT 下载、游戏服务器,延迟和吞吐都不如 frp 直连。选方案之前先想清楚场景。

总结

Cloudflare Tunnel 是我近半年用得最频繁的内网穿透方案。它最大的价值不是”比 frp 快”,而是让你彻底忘掉公网 IP、端口转发、SSL 证书续期这些破事。装好 cloudflared、配一个 YAML 文件、启动服务,完事。

也不是全场景适用——大流量、延迟敏感的场景还是得 frp。但日常的 NAS 管理、AI 面板、博客后台这些轻量服务,Cloudflare Tunnel 是目前最省心的方案,没有之一。

有问题评论区聊,或者直接在群里面艾特我。

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注