7.6 KiB
7.6 KiB
tags, created
| tags | created | |||||||
|---|---|---|---|---|---|---|---|---|
|
2026-06-07 |
科学上网:XRay REALITY + Cloudflare WARP 部署方案
一、整体架构
本机 (v2rayN)
│ VLESS + REALITY over TCP
▼
VPS :50000 (teddysun/xray Docker · host network)
│
├── OpenAI / ChatGPT 域名
│ ▼
│ 127.0.0.1:40000 (Cloudflare WARP · proxy 模式 · SOCKS5)
│ ▼
│ Cloudflare 清洁 IP → ChatGPT / OpenAI
│
└── 其他流量 → 直连出站 (freedom)
├── geoip:cn → blackhole(阻断)
关键设计原则:
- XRay 以
network_mode: host运行,直接访问宿主机 127.0.0.1:40000 - WARP 只接管 OpenAI 相关域名,其余流量直连,不影响速度
- REALITY 伪装为真实 TLS 网站,无需证书,极难被检测
二、REALITY 协议原理
REALITY 是 Xray-core 独有的传输层安全协议,基于 TLS 1.3。
| 特性 | 说明 |
|---|---|
| 无需证书 | 借用真实网站(如 lovelive-anime.jp)的 TLS 握手 |
| 防主动探测 | 没有 privateKey 的探测者只会得到真实网站的响应 |
| x25519 密钥对 | privateKey 存服务端,publicKey 给客户端 |
| shortId | 额外身份验证,8字节随机 hex |
| flow | xtls-rprx-vision — 支持 TLS-in-TLS 的视觉流控 |
握手流程
客户端 ──── ClientHello (SNI=lovelive-anime.jp) ────► 服务端
[含 shortId + publicKey 派生的随机数]
服务端识别到合法客户端 → 建立加密隧道
服务端识别到未知探测者 → 转发到 lovelive-anime.jp:443(真实证书)
三、一键部署脚本
脚本位置: /home/ubuntu/Reality_Docker_Install_AIModify.sh
脚本功能流程
1. 获取公网 IP(可选输入自定义域名)
2. 询问端口(默认 50000)
3. 检测并安装 Docker / docker-compose / qrencode
4. 安装 Cloudflare WARP(官方包,apt 安装)
5. 注册 WARP 账户 → proxy 模式 → 连接
6. 生成 docker-compose.yml(network_mode: host)
7. 生成 REALITY x25519 密钥对 + UUID
8. 生成 config.json(含 WARP 出站 + OpenAI 分流规则)
9. docker compose up -d 启动 xray
10. 输出 VLESS 链接 + 二维码 + 维护命令
历史 Bug 记录
Bug:privateKey 始终为空(2026-06-07 修复)
# 错误写法($3 越界,PrivateKey 行只有两个字段)
privateKey=$(echo "$output" | awk 'NR==2 {print $3}')
# 正确写法
privateKey=$(echo "$output" | grep "^PrivateKey:" | awk '{print $2}')
xray x25519 输出格式:
PrivateKey: <key> ← 2个字段,应取 $2
Password (PublicKey): <key> ← 3个字段,取 $3 正确
四、Cloudflare WARP 配置
安装方式(Ubuntu 22.04 / 24.04)
# 添加 GPG 密钥
curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg \
| gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg
# 添加仓库(noble = Ubuntu 24.04)
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] \
https://pkg.cloudflareclient.com/ noble main" \
| tee /etc/apt/sources.list.d/cloudflare-client.list
apt update && apt install -y cloudflare-warp
初始化配置
systemctl enable --now warp-svc # 启动守护进程
warp-cli --accept-tos registration new # 注册免费账户
warp-cli --accept-tos mode proxy # 切换为 SOCKS5 proxy 模式
warp-cli --accept-tos connect # 连接
WARP 工作模式对比
| 模式 | 说明 | 本方案选用 |
|---|---|---|
warp |
全局 WireGuard,替换默认路由 | ❌ 会断 SSH |
proxy |
SOCKS5 on 127.0.0.1:40000 | ✅ 安全,按需使用 |
tunnel |
仅 DNS 保护 | ❌ 不转发流量 |
常用维护命令
warp-cli --accept-tos status # 查看状态
warp-cli --accept-tos disconnect # 断开
warp-cli --accept-tos connect # 重连
curl --socks5 127.0.0.1:40000 ipinfo.io # 验证出口 IP
五、OpenAI / ChatGPT 分流逻辑
XRay 路由规则(config.json)
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"type": "field",
"domain": [
"geosite:openai",
"domain:openai.com",
"domain:chatgpt.com",
"domain:oaistatic.com",
"domain:oaiusercontent.com",
"domain:ai.com",
"domain:sora.com"
],
"outboundTag": "warp"
},
{
"type": "field",
"ip": ["geoip:cn"],
"outboundTag": "block"
}
]
}
WARP 出站配置
{
"protocol": "socks",
"tag": "warp",
"settings": {
"servers": [{"address": "127.0.0.1", "port": 40000}]
}
}
docker-compose.yml(host 网络模式)
services:
xray:
container_name: xray
image: teddysun/xray
network_mode: host # 关键:容器共享宿主机网络,可访问 127.0.0.1:40000
volumes:
- /root/xray/config:/etc/xray/
restart: always
为什么必须用
network_mode: host? Docker bridge 网络下,容器内的 127.0.0.1 指向容器自身,无法访问宿主机上运行的 WARP SOCKS5 代理。 host 模式下容器与宿主机共享网络命名空间,127.0.0.1 即宿主机本地地址。
规则匹配优先级
OpenAI 域名规则(第1条)→ warp 出站 → WARP SOCKS5 → Cloudflare IP → OpenAI
CN IP 规则(第2条) → block 出站 → 丢弃
其余流量(默认) → direct 出站 → 直连
六、v2rayN 客户端配置
节点参数
| 参数 | 值 |
|---|---|
| 协议 | VLESS |
| 地址 | VPS 公网 IP 或域名 |
| 端口 | 50000(可自定义) |
| UUID | 部署时自动生成 |
| Flow | xtls-rprx-vision |
| 传输 | TCP |
| 安全 | reality |
| SNI | www.lovelive-anime.jp |
| Fingerprint | chrome |
| PublicKey | 部署时自动生成(输出在终端) |
| ShortId | 部署时自动生成 |
常见报错
REALITY: received real certificate (potential MITM or redirection)
原因:客户端 publicKey 与服务端 privateKey 不匹配。服务端把客户端当陌生人,转发到 lovelive-anime.jp,客户端收到真实证书后报错。
解决:更新客户端配置中的 publicKey 为服务端当前生成的值。
七、当前 VPS 配置(43.161.194.203)
协议 : VLESS + REALITY
端口 : 50000
UUID : 7c8bfb9f-c927-44c5-9e79-75bc4312cb6f
SNI : www.lovelive-anime.jp
PublicKey : S6810-8nzf8hPnsmaPPN8elBKm5kQ5X2aHIAHr-fZRY
ShortId : 784799bde6894a7e
WARP IP : 104.28.215.70(Cloudflare)
VLESS 链接:
vless://7c8bfb9f-c927-44c5-9e79-75bc4312cb6f@43.161.194.203:50000?headerType=none&type=tcp&encryption=none&fp=chrome&pbk=S6810-8nzf8hPnsmaPPN8elBKm5kQ5X2aHIAHr-fZRY&sid=784799bde6894a7e&spx=%2F&flow=xtls-rprx-vision&security=reality&sni=www.lovelive-anime.jp#xray-reality
八、排查与维护
查看实时日志
# 所有日志
sudo docker logs -f xray
# 只看 warp/openai 相关
sudo docker logs --tail 100 xray 2>&1 | grep -iE "warp|openai|chatgpt|socks"
# 验证 WARP 出口
curl --socks5 127.0.0.1:40000 ipinfo.io
验证 OpenAI 分流
# 通过 WARP 代理访问 OpenAI,期望返回 HTTP 308 或 200
curl -v -o /dev/null --socks5 127.0.0.1:40000 https://chat.openai.com 2>&1 | grep "< HTTP"
服务重启
cd /root/xray
sudo docker compose restart # 重启 xray
sudo warp-cli --accept-tos connect # 重连 WARP
重新部署(全新生成密钥)
sudo bash /home/ubuntu/Reality_Docker_Install_AIModify.sh