如果你觉得"端口回源"方案太依赖 CF 代理端口列表、担心源站 IP 泄露,那么 Cloudflare Argo Tunnel(cloudflared)是一个更"优雅"的替代方案。
Argo Tunnel 的核心思路是:VPS 上不开启任何入站端口,通过 cloudflared 守护进程主动向 CF 发起出站连接,建立一条加密隧道。流量从客户端到 CF 边缘后,直接走这条已建立的隧道到达 VPS,源站对公网完全不可见。
这篇文章会完整覆盖:VPS 部署 VLESS+WS-ENC → cloudflared 隧道建立 → CF 域名接入 → CDN 加速 → 优选域名 → 多节点负载均衡,并在最后和"端口回源"方案做一次系统对比。
一、什么是 Cloudflare Argo Tunnel?
Argo Tunnel 是 Cloudflare 提供的一种"反向隧道"技术。传统代理是"客户端连向服务器",Argo Tunnel 是"服务器主动连向 Cloudflare,建立持久隧道,然后 Cloudflare 把流量顺着这条隧道推回服务器"。
1.1 核心特性
- 零入站端口:VPS 防火墙不需要开放任何端口,对公网完全隐身。
- 自动证书管理:CF 自动为你的 tunnel 域名签发 TLS 证书。
- 不走 CF 代理端口限制:隧道内部可以走任意端口(CF 边缘到 tunnel 边缘的部分受 CF 支持,但 tunnel 内部协议不限)。
- 适合动态 IP:VPS IP 经常变动(如住宅宽带、移动网络)也能稳定接入。
1.2 Argo Tunnel vs 端口回源 架构对比
| 维度 | Argo Tunnel(本方案) | 端口回源(前文方案) |
|---|---|---|
| VPS 端口暴露 | ✅ 零暴露,cloudflared 出站连接 | ⚠️ 需开放监听端口(如 10000) |
| 源站 IP 泄露 | ✅ 极低泄露风险 | ⚠️ 有泄露风险(回源 IP 可能出现在日志中) |
| CF 代理端口限制 | ✅ 不受限(tunnel 内部走 CF 边缘网络) | ⚠️ 受限制(只能用 CF 代理端口列表) |
| 免费额度 | ~50GB/月(Fair Use) | 无硬限制(受 VPS 带宽) |
| 延迟 | 略高(多一层隧道封装) | 更低(直连回源) |
| 多节点分摊 | 每个 VPS 一条 tunnel | 每个 VPS 一条 CNAME 记录 |
| 适用场景 | 源站安全要求高、IP 不固定、端口限制是痛点 | 追求更低延迟、大流量、VPS 环境稳定 |
Argo Tunnel:VPS 不开端口,主动连 CF,更安全,适合端口受限或 IP 不固定的场景。
二、前置条件
- 一台海外 VPS(Debian 12 / Ubuntu 24.04)。
- 一个已托管到 CF DNS 的域名。
- CF 账号已开启 Argo Tunnel 功能(免费 Plan 默认可用,在 Zero Trust Dashboard 里能看到 Tunnel 选项)。
- VPS 上能出站访问互联网(cloudflared 需要主动连 CF)。
三、VPS 上部署 VLESS+WS-ENC 源站
3.1 安装 Xray-core
bash -c "$(curl -fsSL https://raw.githubusercontent.com/XTLS/Xray-install/main/install-release.sh)" -s install
3.2 生成 UUID
xray uuid
3.3 配置 Xray(VLESS+WS-ENC)
-ENC 后缀代表这个节点采用了加密 WebSocket(Encrypted WebSocket)。在 Xray 层面,通过在 WS 传输之上启用 security: "tls" 并在 wsSettings 中配置证书实现。在 Argo Tunnel 方案下,建议源站启用 TLS,与 CF 末端的 TLS 形成"双端加密":
{
"inbounds": [{
"port": 10000,
"protocol": "vless",
"settings": {
"clients": [{ "id": "你的UUID", "level": 0, "email": "user" }],
"decryption": "none"
},
"streamSettings": {
"network": "ws",
"security": "tls",
"tlsSettings": {
"certificates": [{
"certificateFile": "/path/to/fullchain.pem",
"keyFile": "/path/to/privkey.pem"
}]
},
"wsSettings": {
"path": "/ws-enc-tunnel"
}
}
}],
"outbounds": [{
"protocol": "freedom"
}]
}
certbot 从 Let's Encrypt 申请证书,或使用 CF Origin CA 证书(推荐,自动签发,专为 CF 回源设计)。CF Origin CA 证书申请:CF Dashboard → Origin CA → Create Certificate → 选择你的域名 → 下载证书和私钥 → 放到 VPS 上。
3.4 启动与自启
systemctl daemon-reload
systemctl enable --now xray
systemctl status xray
ss -tlnp | grep 10000
3.5 开启 ECH(Encrypted Client Hello)可选步骤
如果 cfnew 或 yonggekkk 项目的 ECH 配置对你来说太复杂,source 站也可以手动生成 ECH 配置。不过 Argo Tunnel 方案下,CF 边缘已经终结了 TLS,源站的 ECH 意义相对有限,不是必选项。
四、安装并配置 cloudflared
4.1 安装 cloudflared
# Debian/Ubuntu 一键安装
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 -y cloudflared
# 验证
cloudflared --version
4.2 登录 CF 账号
cloudflared tunnel login
执行后会在终端打印一个 URL,用浏览器打开登录你的 CF 账号,选择要关联的域名(如 yourdomain.com),授权后 cloudflared 会下载一个 cert.pem 到 ~/.cloudflared/。
4.3 创建 Tunnel
cloudflared tunnel create my-vless-tunnel
# 输出类似:
# Tunnel credentials saved to /root/.cloudflared/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.json
# Created tunnel my-vless-tunnel with id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
4.4 配置 Tunnel(config.yml)
编辑 /root/.cloudflared/config.yml:
tunnel: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx # 上一步的 tunnel UUID
credentials-file: /root/.cloudflared/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.json
ingress:
- hostname: node.yourdomain.com
service: http://localhost:10000
originRequest:
noTLSVerify: true # 源站是自签证书时设为 true;CF Origin CA 证书也设为 true
- service: http_status:404 # 必须有一个 fallback
node.yourdomain.com,需要提前在 CF DNS 中没有同名记录(Tunnel 会自动创建 DNS 记录)。service:指向本地 Xray 的监听端口,这里是
http://localhost:10000。noTLSVerify:源站用 CF Origin CA 自签证书时,TLS 握手会验证不过,必须开启。
fallback:最后必须有一个
http_status:404 的 fallback 规则。
4.5 创建 DNS 记录并启动 Tunnel
# 自动创建 CNAME 记录(会把 node.yourdomain.com 指向 tunnel)
cloudflared tunnel route dns my-vless-tunnel node.yourdomain.com
# 启动 tunnel(前台测试)
cloudflared tunnel run my-vless-tunnel
# 确认正常后,设置为 systemd 服务(后台自启)
cloudflared service install
systemctl enable --now cloudflared
五、Cloudflare 侧配置
5.1 SSL/TLS 设置
CF Dashboard → SSL/TLS → 建议选 Full 或 Full (strict)。由于源站已配置了 TLS(CF Origin CA 证书),Full (strict) 可以正常通过验证。
5.2 客户端连接参数
地址: node.yourdomain.com
端口: 443
UUID: 你的 UUID
传输: ws
路径: /ws-enc-tunnel
TLS: On(因为源站已启用 TLS)
sni: yourdomain.com(如果客户端有 SNI 字段,填 CF 域名)
六、优选域名与负载均衡
6.1 CF 优选域名列表
Argo Tunnel 方案下,优选域名主要用在两个地方:客户端连接地址(提高首包速度)和 Tunnel 的 CF 边缘路由。
| 优选域名 | 维护者 | 倾向区域 | 适用场景 |
|---|---|---|---|
yg1~yg13.ygkkk.dpdns.org | 甬哥社区 | 移动→港 · 电信/联通→日韩 | 国内用户首选,序号可轮换 |
cfip.dahua1.com | 社区 | 东亚 | 国内访问稳定 |
cf.0ups.com | 社区 | 全球均衡 | 美、新节点优质 |
cloudflare-ech.com | 社区 | 欧美 | 配合 ECH |
ip.sb | 官方 | 全球 | 验证 CF 出口 IP |
6.2 多节点负载均衡思路
Argo Tunnel 方案的多节点架构和端口回源方案基本一致:
- 准备 N 台 VPS(推荐 2-3 台,不同地区/运营商)。
- 每台 VPS 上独立部署 VLESS+WS-ENC + cloudflared tunnel。
- 每个 Tunnel 注册不同的 CF 域名(如
node1.argo.yourdomain.com、node2.argo.yourdomain.com)。 - 订阅生成时,给每个节点分配不同的优选域名作为连接地址。
- 客户端配置
url-test策略,自动测速择优。
每个 Tunnel 域名绑定一个优选域名作为"表面地址",客户端用 url-test 策略,每 600s 自动测试一次,选最快的连接。zero 成本,效果稳定。
6.3 进阶:Argo Tunnel 的流量路由
Argo Tunnel 支持在 CF Zero Trust Dashboard 中配置更精细的路由规则:
- Access Policy:只有通过 CF Access 认证的用户才能通过 tunnel 访问源站,安全级别最高。
- WAF 规则:在 tunnel 入口配置 CF WAF,拦截恶意流量。
- 负载均衡:在 Zero Trust Dashboard 中创建多个 Origin,配置健康检查,CF 自动在多个 tunnel 之间做负载均衡(需要 Argo Pro 或更高 Plan)。
七、两种方案深度对比
| 对比维度 | Argo Tunnel | 端口回源 |
|---|---|---|
| VPS 防火墙要求 | 无需开放任何端口 | 需开放监听端口(如 10000) |
| 源站 IP 暴露程度 | 极低(主动出站连接 CF) | 中等(回源时 IP 有日志痕迹) |
| CF 代理端口限制 | 不受限 | 受 CF 代理端口列表限制 |
| 延迟表现 | 略高(多一层隧道) | 更低(直连) |
| 免费额度 | ~50GB/月 Fair Use | 无硬限制 |
| 配置复杂度 | 安装 cloudflared + tunnel 配置 + systemd | Xray 配置 + DNS 代理 |
| 动态 IP 兼容 | ✅ 完美支持 | ❌ 换 IP 需更新 DNS |
| 多节点管理 | 每个 VPS 一条 tunnel,自动 DNS 管理 | 每个 VPS 一条 CNAME,手动管理 |
| L7 协议支持 | HTTP/HTTPS 为主(tunnel 层) | 任意 TCP 端口 |
| 容错性 | tunnel 断了立即重连,自动恢复 | VPS 重启后需手动恢复服务 |
| 推荐场景 | 安全优先 · IP 不固定 · 端口受限 · 测试环境 | 性能优先 · 大流量 · 长期稳定 · 已熟悉 xray |
选端口回源:追求最低延迟、VPS 带宽大、IP 稳定、协议需要非 HTTP 端口。
八、进阶:Argo Tunnel + CF Load Balancing
如果你有多台 VPS,每台上都跑 cloudflared tunnel,可以通过 CF Zero Trust Dashboard 实现多 tunnel 负载均衡:
- 每台 VPS 上独立部署 cloudflared,各自注册不同的 tunnel(如
node-us-east、node-hk、node-jp)。 - CF Zero Trust Dashboard → Networks → Load Balancing → 添加各 tunnel 对应的 origin。
- 配置 Health Monitor:定期向各 tunnel 后端发送探活请求,故障节点自动移除。
- 设置负载均衡策略:Dynamic Latency(动态延迟)或 Geo/Region(地域),返回最快/最近的 tunnel 给用户。
- Argo Pro Plan($0/月但有 Fair Use 限制)支持最多 500 个 tunnel;Argo Enterprise 无此限制。
8.1 替代方案:客户端层面负载均衡
如果不想用 CF Load Balancing(免费版限制多),最简单的方式还是在客户端层面做 url-test:给每个 tunnel 域名绑定不同的优选域名,客户端定期测速,自动选最快的。对于 2-3 个节点来说,开销完全可接受。
九、常见问题
Q1:cloudflared 显示 "Connection refused"?
检查:① Xray 是否在 localhost:10000 正常监听?ss -tlnp | grep 10000;② config.yml 的 service 端口是否和 Xray 一致;③ Xray 的 tlsSettings 证书文件路径是否正确。
Q2:Tunnel 连接成功但客户端连不上?
检查 CF DNS 是否已自动为 node.yourdomain.com 创建了 CNAME 记录(指向 .cfargotunnel.com);client 端路径是否和 Xray 的 wsSettings.path 一致;TLS 设置是否匹配(Argo Tunnel 边缘已经做了 TLS 终结,client 端 TLS = On)。
Q3:Argo Tunnel 免费额度用完了怎么办?
① 升级到 Argo Pro($0/月,主要是 Fair Use 限制更宽松);② 或者降级到端口回源方案(不花钱且无硬限制);③ 或者在多个 tunnel 之间分摊流量(每个 tunnel 有独立额度)。
Q4:源站 IP 会不会完全泄露?
Argo Tunnel 极大降低了泄露风险,但不是 100% 免疫。以下场景仍可能泄露:① VPS 上跑了其他暴露在公网的服务;② CF tunnel 日志中记录了源站 IP(CF 内部可见);③ 通过历史 DNS 或 IP 关联分析反推出源站。防护措施:VPS 防火墙只开必需端口、关闭非必须服务、定期检查。
Q5:Argo Tunnel 和端口回源能不能混用?
完全可以。一台 VPS 上同时跑 Xray(端口回源)和 cloudflared(Argo Tunnel),作为互相备份。端口回源走普通 CNAME,Argo Tunnel 走 tunnel 域名,客户端订阅里两个都放进去,互相 fallback。
Q6:VLESS+WS-ENC 和普通 VLESS+WS 有什么区别?
-ENC 代表在 WS 层之上还启用了 TLS 加密(即 streamSettings.security = "tls")。在端口回源方案中通常不需要(因为 TLS 由 CF 边缘处理),但在 Argo Tunnel 方案下,由于流量在 VPS 和 CF 之间也有终接点,推荐源站也启用 TLS,形成双端加密,进一步提升安全性。注意:源站启用 TLS 后,客户端 TLS 开关也要打开,并正确配置 SNI。
十、总结
VPS + Argo Tunnel + VLESS+WS-ENC 是一套"安全优先"的代理节点方案。源站零端口暴露,通过 cloudflared 守护进程主动和 CF 建立加密隧道,VPS 对公网几乎完全隐身。适合对源站安全要求高、IP 经常变动、CF 代理端口不够用的场景。
和端口回源方案的选择本质上是在安全和延迟/性能之间做取舍:Argo Tunnel 多一层隧道封装(延迟略高、免费版有流量限制),但换来了源站隐身和零端口暴露。端口回源更直接、延迟更低、无流量限制,但需要接受源站 IP 的暴露风险和端口限制。
推荐做法是两套方案都掌握,不同场景切换使用,订阅里同时加入两种节点,互为备份。
□ 安装 Xray-core,配置 VLESS+WS-ENC(含 TLS 证书)
□ 安装 cloudflared,执行 cloudflared tunnel login
□ 创建 tunnel,编写 config.yml
□ 执行 tunnel route dns 自动创建 CNAME
□ 启动 cloudflared,验证 tunnel 状态
□ 客户端接入(TLS On,路径、UUID 与源站一致)
□ 访问 ip.sb 确认显示 CF IP
□ 配置优选域名,订阅替换节点地址
□ (进阶)多 VPS 创建多 tunnel,客户端 url-test 负载均衡