核心概念澄清
⚠️ 常见误解
- 误解:ProxyIP 是用来访问 Cloudflare 自身服务的代理
- 真相:ProxyIP 是 Workers 用来访问被墙的目标网站的中转服务器
- 误解:优选 IP 是整个链路的顶层入口
- 真相:优选 IP 是客户端用来快速连接到 Cloudflare 边缘节点的优化手段
完整数据流向
→
🌐 CF 优选 IP
Cloudflare 边缘节点
(速度优化)
→
⚙️ CF Workers
运行代理脚本
解析 VLESS 协议
→
→
🌟 CF 优选 IP 的真实作用
- 位置:位于客户端和 Cloudflare Workers 之间
- 目的:优化客户端到 CF 边缘节点的连接速度
- 原理:通过测速选出延迟最低、速度最快的 CF IP
- 作用域:只影响"客户端 ↔ CF"这一段的速度
- 配置位置:在 VLESS 客户端配置中,而非 Workers 代码
🔄 ProxyIP 的真实作用
- 位置:位于 Cloudflare Workers 和目标网站之间
- 目的:帮助 Workers 访问被墙或被限制的网站
- 原理:Workers 不直连目标,而是通过 ProxyIP 中转
- 作用域:影响"Workers ↔ 目标网站"这一段
- 配置位置:在 Workers 脚本中配置(环境变量 PROXYIP)
两种应用场景对比
场景一:不使用 ProxyIP 直连模式
客户端 → CF优选IP → Workers → 目标网站
适用情况:
• 目标网站没有被墙
• CF 到目标网站的连接正常
• 目标网站不限制 CF IP 访问
示例目标:GitHub、Stack Overflow 等
场景二:使用 ProxyIP 代理模式
客户端 → CF优选IP → Workers → ProxyIP → 目标网站
适用情况:
• 目标网站被墙(如 Google)
• CF 直连失败或被限制
• 需要隐藏 CF IP 地址
示例目标:Google、YouTube、Twitter 等
代码中的实现逻辑
// 1. 首先尝试直连目标网站
let tcpSocket = await connectAndWrite(addressRemote, portRemote);
// 2. 如果直连失败,重试函数会启用 ProxyIP
async function retry() {
if (enableSocks) {
// 使用 SOCKS5 代理
tcpSocket = await connectAndWrite(addressRemote, portRemote, true);
} else {
// 使用普通 ProxyIP
tcpSocket = await connectAndWrite(proxyIP || addressRemote, portRemote);
}
}
// 关键:proxyIP 是中转服务器的地址
// 例如:proxyIP = 'proxy.example.com'
💡 ProxyIP 的工作机制
- 替换目标地址:将原本的目标网站地址替换为 ProxyIP 地址
- 反向代理:ProxyIP 服务器充当反向代理,转发到真实目标
- SNI 欺骗:通过 TLS SNI 字段传递真实目标域名
- 突破封锁:ProxyIP 通常位于境外,可访问被墙网站
- 隐藏来源:目标网站看到的是 ProxyIP 的 IP,而非 CF IP
🚫 Cloudflare Workers 的限制
- 不能直连 CF IP:Workers 无法访问 Cloudflare 自己的 IP 段
- 不能用 ProxyIP 访问 CF:这在逻辑上也说不通
- ProxyIP 用途:只用于访问外部被墙网站
- 优选 IP 用途:只用于客户端连接优化
完整的技术栈总结
🎯 三个核心组件
-
1. CF 优选 IP(客户端侧)
• 加速客户端到 CF 的连接
• 在客户端 VLESS 配置中设置
• 不影响 Workers 的行为
-
2. Cloudflare Workers(中间层)
• 解析 VLESS 协议
• 决定是否使用 ProxyIP
• 建立到目标的连接
-
3. ProxyIP(Workers 侧)
• 帮助 Workers 访问被墙网站
• 在 Workers 环境变量中配置
• 充当中转代理角色
✅ 正确理解要点
- 优选 IP 在客户端配置,优化接入速度
- ProxyIP 在Workers 配置,突破访问限制
- 两者作用于不同的网络段,互不冲突
- 完整链路:客户端 → 优选IP → Workers → ProxyIP → 目标
- ProxyIP 只在访问被墙网站时才需要