传统的方案往往伴随着诸多痛点:

  • DDNS + 端口映射:需要宽带拥有动态公网 IPv4,且随时面临运营商封禁 80/443 端口的风险。
  • FRP / Ngrok 等内网穿透:需要自己额外购买并维护一台带公网 IP 的中转云服务器,且带宽受限,配置繁琐。

Tunnel(原 Argo Tunnel)不仅完全免费,还能让你在没有公网 IP、不开放任何路由器端口的情况下,极其安全、优雅地将后端服务器接入互联网

🌟 为什么选择 CF Tunnel?

严谨地说,Cloudflare Tunnel 采用了反向代理隧道技术。你的服务器主动向 Cloudflare 的边缘节点建立长连接(Outbound),而不需要在你的防火墙上开任何“洞”(Inbound)。

这种架构带来了无可比拟的优势:

  1. 极致安全,隐匿无踪:服务器无需开放任何入站端口(Inbound Ports)。黑客无法通过扫描 IP 端口来攻击你的服务器,因为你的真实 IP 被彻底隐藏。
  2. 免公网 IP,无视 NAT:不管你是校园网、大内网还是移动宽带,只要服务器能上网(能 ping 通外网),就能穿透。
  3. 自带企业级防护:流量天然经过 Cloudflare 全球网络,自动享受 DDoS 防护、WAF(Web 应用防火墙)和免费的 SSL/TLS 证书加密。
  4. 全图形化管理(Zero Trust):告别繁琐的 .yaml 配置文件,新增域名、修改端口全部通过网页端控制台一键下发,实时生效。

🛠️ 准备工作

在开始之前,请确保你满足以下条件:

  1. 一个已托管在 Cloudflare 的域名
  2. 一台后端服务器(Linux/Windows/macOS 均可,内网虚拟机、树莓派也可以)。
  3. Cloudflare 账号已绑定支付方式(开通 Zero Trust 免费版需要验证身份,支持双币信用卡或 PayPal,不会扣费)。

🚀 实操步骤

第一步:创建 Tunnel

  1. 登录 Cloudflare 控制台,在左侧导航栏找到并点击 [Zero Trust]
  2. 首次进入会要求选择套餐,选择 Free(免费版) 并完成支付信息的验证。
  3. 进入 Zero Trust 仪表盘后,依次点击左侧菜单的 [Networks] -> [概述]
  4. 点击右上角的 [创建新 cloudflared 隧道](添加隧道)。
  5. 隧道类型选择 [Cloudflared](默认项),点击 Next。
  6. 为你的隧道起个名字(例如:Home-ServerNode1),点击 Save tunnel。

第二步:安装守护程序

upload successful

场景 A:Linux 物理机 / 虚拟机(推荐)

  1. 在页面中选择你的系统架构(如 Linux -> 64-bit 或者 arm64)。
  2. 复制右侧文本框中那段长长的包含了 token 的安装命令。
  3. 登录你的后端服务器,粘贴并执行该命令。
    (示例命令通常长这样:curl -L --output cloudflared.deb https://... && sudo dpkg -i cloudflared.deb && sudo cloudflared service install eyJh...)
  4. 执行完毕后,控制台页面下方会实时亮起 绿色Status: Connected,说明隧道已打通!点击 Next。

场景 B:使用 Docker 部署(极致纯净)
如果你不想污染宿主机环境,可以选择 Docker 方式:

  1. 在页面选择 Docker 环境。
  2. 复制你的专属 Token(紧跟在 --token 后面的那串极长的字符)。
  3. 在你的服务器上执行以下命令启动容器:
1
2
3
4
5
docker run -d \
--name cloudflared-tunnel \
--restart unless-stopped \
cloudflare/cloudflared:latest \
tunnel --no-autoupdate run --token <这里替换为你的专属Token>

第三步:映射内部服务

upload successful
连接器 页面:

  1. Public Hostname(公网访问地址)
    • Subdomain: 填入你想用的子域名,如 nas
    • Domain: 从下拉列表中选择你托管在 CF 的主域名(如 yourdomain.com)。
    • (最终外网访问地址即为:nas.yourdomain.com)
  2. Service(内网服务目标)
    • Type: 通常选择 HTTPHTTPS
    • URL: 填入后端服务器的内网 IP 和端口(例如 localhost:8080localhost:5000)。
  3. 高级设置(Additional application settings)- 极其重要
    • 如果你的后端服务(如 Proxmox VE 面板、OpenWrt 路由器、自签证书的 NAS)使用的是 自签名 HTTPS,请务必展开 TLS 选项卡,将 No TLS Verify 开启(启用跳过证书验证),否则会报错 502 Bad Gateway。
  4. 点击 [Save]

⚠️ 避坑与安全规范

滥用警告

Cloudflare 的免费服务是有边界的。根据其服务条款(TOS Section 2.8),严禁使用免费版 Cloudflare 代理大量的非 HTML 媒体内容(如视频流媒体、超大文件下载)。

  • ❌ 绝对不要:将 Jellyfin、Plex、Emby 等私人影院或网盘大文件下载通过 Tunnel 暴露并全天候高强度使用,这有极高概率导致你的 Cloudflare 账号被永久封禁
  • ✅ 适合场景:API 接口、博客后台、SSH 管理、Git 仓库、NAS 控制面板、智能家居控制中心。

真实 IP 的获取问题

由于流量经过了 CF Tunnel 的反向代理,你的后端服务(如 Nginx 日志、博客评论区)获取到的访客 IP 会全部变成本地回环地址(127.0.0.1)。

  • 解决方案:Cloudflare 会将真实的访客 IP 放在 HTTP Request Header 的 CF-Connecting-IPX-Forwarded-For 字段中。你需要在后端的 Nginx/Apache 或应用代码中配置提取这两个头部字段,以恢复真实访客 IP。

SSH 与 RDP 穿透

CF Tunnel 不仅支持 HTTP/HTTPS,还支持 TCP 流量。你可以用它来安全地暴露 SSH (22) 或 Windows 远程桌面 RDP (3389)。
但由于普通的浏览器不支持直接解析未经封装的 TCP 隧道,使用 SSH/RDP 穿透时,客户端电脑上也必须安装 cloudflared 客户端来进行流量的本地解包。对于需要多端随时随地访问的场景,稍显繁琐,但安全性是极高。