Cloudflare · 安全 · VPS 指南
Cloudflare Tunnel 完全指南 2026:VPS 免费安全隧道,无需开放端口
目录
什么是 Cloudflare Tunnel?
Cloudflare Tunnel(前身为 Argo Tunnel)是 Cloudflare 的一项服务,允许您通过 Cloudflare 的全球网络暴露服务器上运行的服务——Web 应用、SSH 服务器、远程桌面——而无需配置入站防火墙规则或拥有公网 IP 地址。
其核心是一个名为 cloudflared 的轻量级守护进程,安装在您的服务器上。它创建仅出站的加密连接到 Cloudflare 数据中心。Cloudflare 随后使用这些连接将流量代理到您的服务。最终实现通过单条出站连接进行双向流量传输。
这使 Cloudflare Tunnel 非常适合以下场景:
- 需要暴露本地开发服务器的开发者
- 希望 SSH 访问但不开放 22 端口的系统管理员
- 正在实施零信任网络访问(ZTNA)的组织
- 没有静态 IP 的家庭或办公室(NAT/CGNAT 环境)
- 希望隐藏源 IP 以防 DDoS 攻击的 VPS 用户
Cloudflare Tunnel 是 Cloudflare Zero Trust(原 Cloudflare for Teams)的组成部分,基本使用免费——数据截至 2026 年 9 月,请在 cloudflare.com 核实最新条款。
工作原理
1. cloudflared 守护进程
安装在服务器上的 cloudflared 守护进程使用 Anycast 路由创建持久的仅出站连接到 Cloudflare 全球网络——自动连接到最近的数据中心。这些连接经过加密,完全不需要入站防火墙规则。
2. 隧道 UUID
每个隧道都有唯一 UUID,作为源服务器与 Cloudflare 之间的逻辑链路。可在单个隧道中运行多个 cloudflared 进程(连接器)实现高可用性。
3. 流量路由
当请求到达您的域名(如 app.example.com)时,Cloudflare 接收请求,通过隧道路由到服务器上的 cloudflared 守护进程,后者将请求转发到本地服务(如 localhost:3000),响应沿相同路径返回。
主要优势
| 优势 | 详情 |
|---|---|
| 无需开放入站端口 | 大幅减少攻击面——可关闭所有入站防火墙规则 |
| 无需公网 IP | 在 NAT、CGNAT 或不提供静态 IP 的 ISP 环境下均可使用 |
| 隐藏源 IP | 攻击者无法获知真实服务器 IP,内置 DDoS 防护 |
| 自动 TLS | Cloudflare 自动管理 SSL/TLS 证书,无需 Certbot |
| 基本使用免费 | HTTP 隧道在 Cloudflare 免费计划下零成本可用 |
| 全球 Anycast 网络 | 300+ 数据中心,覆盖全球,低延迟访问 |
| 零信任就绪 | 可添加 Access 策略,在访问服务前强制身份验证 |
前提条件
- Cloudflare 账户(在 cloudflare.com 免费注册)
- 已添加到 Cloudflare 且 Nameserver 已指向 Cloudflare 的域名
- 运行 Linux(推荐 Ubuntu 20.04+ / Debian 10+)、macOS 或 Windows 的服务器或 VPS
- 服务器上的 sudo 或 root 权限
- 需要暴露的服务(如运行在 80 或 8080 端口的 Nginx/Apache)
在 Linux 上安装 cloudflared(Ubuntu/Debian)
方式一:通过 apt 仓库安装(推荐)
# 添加 Cloudflare GPG 密钥
curl -fsSL 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 -y
# 验证版本
cloudflared --version
方式二:直接下载二进制文件
# 适用于 Linux x86_64
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared-linux-amd64.deb
RHEL/CentOS 系统
sudo yum install cloudflared
逐步创建隧道
第一步:向 Cloudflare 进行身份验证
cloudflared tunnel login
此命令将打开浏览器,提示您登录 Cloudflare 账户并选择要使用的域名。完成后,cloudflared 将凭证保存至 ~/.cloudflared/cert.pem。
第二步:创建新隧道
cloudflared tunnel create my-tunnel
将 my-tunnel 替换为您偏好的名称。输出结果包含隧道 UUID(如 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)和凭证文件路径,请记录两者。
第三步:路由 DNS
cloudflared tunnel route dns my-tunnel app.example.com
此命令在 Cloudflare DNS 中自动创建 CNAME 记录,将 app.example.com 指向隧道端点(启用 Cloudflare 代理橙色云)。
第四步:创建配置文件
mkdir -p ~/.cloudflared
nano ~/.cloudflared/config.yml
第五步:运行隧道
cloudflared tunnel run my-tunnel
配置 config.yml
单个 Web 应用(HTTP)
tunnel: <您的隧道-UUID>
credentials-file: /root/.cloudflared/<您的隧道-UUID>.json
ingress:
- hostname: app.example.com
service: http://localhost:3000
- service: http_status:404
多个服务
tunnel: <您的隧道-UUID>
credentials-file: /root/.cloudflared/<您的隧道-UUID>.json
ingress:
- hostname: app.example.com
service: http://localhost:3000
- hostname: api.example.com
service: http://localhost:8080
- hostname: dashboard.example.com
service: http://localhost:8443
originRequest:
noTLSVerify: true
- service: http_status:404
配置为 systemd 服务(开机自启)
# 安装 systemd 服务
sudo cloudflared service install
# 启动并设置开机自启
sudo systemctl start cloudflared
sudo systemctl enable cloudflared
# 查看状态
sudo systemctl status cloudflared
常见使用场景
1. 暴露 Web 应用或 API
最常见用例:在 localhost 运行任何 Web 服务器(Nginx、Apache、Node.js、Python Flask 等),通过 cloudflared 经您的域名暴露。
ingress:
- hostname: myapp.example.com
service: http://localhost:3000
- service: http_status:404
2. 通过浏览器 SSH(无需开放 22 端口)
结合 Cloudflare Access,Cloudflare Tunnel 支持基于浏览器的 SSH 访问,完全无需向公网开放 22 端口。
ingress:
- hostname: ssh.example.com
service: ssh://localhost:22
- service: http_status:404
用户通过 Cloudflare Access 身份验证后,使用以下命令连接:cloudflared access ssh --hostname ssh.example.com
3. 远程桌面(RDP)
ingress:
- hostname: rdp.example.com
service: rdp://localhost:3389
- service: http_status:404
4. 私有网络(零信任)
启用 warp-routing,让 Cloudflare WARP 客户端访问私有网络:
tunnel: <UUID>
credentials-file: /root/.cloudflared/<UUID>.json
warp-routing:
enabled: true
5. 快速暴露开发环境
cloudflared tunnel --url http://localhost:3000
无需配置文件,即时生成临时公网 URL,适合 webhook 测试或演示展示。
Cloudflare Tunnel 与传统 VPN 对比
| 特性 | Cloudflare Tunnel | VPN(WireGuard/OpenVPN) |
|---|---|---|
| 需要公网 IP | 不需要 | 需要(或 DDNS) |
| 开放入站端口 | 不需要 | 需要(UDP 51820/TCP 1194) |
| SSL/TLS | 自动 | 手动配置 |
| 费用 | 免费(基本使用) | VPS/服务器成本 |
| DDoS 防护 | 内置(Cloudflare) | 取决于提供商 |
| 零信任/Access | 内置支持 | 需额外组件 |
| 延迟 | 低(Anycast) | 取决于服务器位置 |
| 复杂度 | 低(几条命令) | 较高(配置较多) |
| 全网络路由 | 支持(warp-routing) | 支持(分隧道) |
需了解的限制
- 需要使用 Cloudflare 的域名——未使用 Cloudflare DNS 的域名无法使用 Cloudflare Tunnel
- Cloudflare 可见流量——适合公共服务,对高度敏感数据需权衡考虑
- WebSocket 支持但需额外配置
- UDP 协议(游戏、QUIC)在标准 HTTP 隧道中不支持,需使用 WARP 路由
- 免费计划带宽——Cloudflare 未明确规定上限,但执行合理使用政策,请查阅 cloudflare.com 最新条款
- cloudflared 必须持续运行——进程停止则隧道中断,建议使用 systemd 管理
总结
Cloudflare Tunnel 是在 VPS 或家庭服务器上安全暴露服务的强大免费工具。通过几条命令即可获得自动 SSL、DDoS 防护和零防火墙配置。无论是开发者、系统管理员还是家庭服务器爱好者,都是极佳选择。
常见问题解答
Cloudflare Tunnel 是免费的吗?
基本使用免费,只需 Cloudflare 账户(免费计划)且域名使用 Cloudflare Nameserver。数据截至 2026 年 9 月,请以 cloudflare.com 最新信息为准。
与 VPN 有何不同?
Cloudflare Tunnel 使用仅出站连接——无需开放入站端口,无需公网 IP。传统 VPN 需要两者。
需要公网 IP 吗?
不需要。cloudflared 自动向外连接 Cloudflare 网络,非常适合 NAT 或 CGNAT 后面的服务器。
支持哪些协议?
支持 HTTP/HTTPS(Web 应用)、SSH、RDP(远程桌面)以及其他 TCP 协议。
支持哪些 Linux 发行版?
支持 Ubuntu、Debian、RHEL/CentOS、Arch Linux,以及 macOS(Homebrew)和 Windows。
cloudflared 崩溃会怎样?
隧道将中断。建议将其安装为带 Restart=always 配置的 systemd 服务以实现自动恢复。
可以与任意托管服务商配合使用吗?
可以。cloudflared 可在任何支持 SSH 访问和出站互联网连接的服务器或 VPS 上运行,不受托管服务商限制。