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 Trust → Access → Tunnels,后面就在这里管理隧道。
第一步:安装 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
解释一下配置:
tunnel和credentials-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 面板:你的域名 → Network → WebSocket,确保状态是 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 是目前最省心的方案,没有之一。
有问题评论区聊,或者直接在群里面艾特我。
