通过 WARP Socks5 代理及 XRAY 路由规则实现解锁 ChatGPT
1.名词解释
- VLESS:出入站协议(私有协议、不加密)可以理解为 Socks5 ,只不过是自定义的私有协议。
- XTLS:流控方式(xtls-rprx-vision 解决 TLS in TLS 问题)使用新 XTLS 模式,包含内层握手随机填充,支持 uTLS 模拟客户端指纹
- REALITY:传输层加密,解决 SNI 阻断问题。
- WARP:CloudFlare 推出的免费代理,可作为 Client 安装到 VPS 中并配置分流规则,用于解锁 ChatGPT、Netflix 等。
2.搭建XRAY服务
2.1 更换TCP拥塞控制算法为BBR(可选)
查看当前VPS内核使用的TCP拥塞控制算法
# 确认BBR是否开启(下面命令执行结果为【tcp_bbr】则证明开启)
lsmod | grep bbr
# 确认FQ算法是否开启(下面命令执行结果为【sch_fq】则证明开启)
lsmod | grep fq
若 VPS 未使用 BBR,手动开启方式如下(下面方法需确保Linux 内核版本大于等于4.9,若不满足要求请升级内核):
echo -e "\nnet.core.default_qdisc=fq\nnet.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf && sysctl -p
上述命令即将 net.core.default_qdisc=fq
和 net.ipv4.tcp_congestion_control=bbr
两条配置参数写入 Linux 内核参数配置文件 /etc/sysctl.conf
并使其立即生效。
再次使用 lsmod 命令查看内核模块,确认 BBR 已被启用。
[root@JPV ~]# lsmod | grep bbr
tcp_bbr 20480 4
[root@JPV ~]# lsmod | grep fq
sch_fq 20480 3
2.2 下载安装XRAY
参考官方仓库安装脚本,安装Stable版本。
注:VLESS+XTLS+uTLS+REALITY+WARP需要XRAY服务器、客户端(如v2rayN、v2rayNG)内核均为1.8.0版本以上。
执行如下命令,自动安装XRAY最新Stable版:
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install
安装完成后提示如下,可以通过systemctl命令管理XRAY,默认已经启动XRAY且配置了开机自启。
installed: /usr/local/bin/xray
installed: /usr/local/share/xray/geoip.dat
installed: /usr/local/share/xray/geosite.dat
installed: /usr/local/etc/xray/config.json
installed: /var/log/xray/
installed: /var/log/xray/access.log
installed: /var/log/xray/error.log
installed: /etc/systemd/system/xray.service
installed: /etc/systemd/system/xray@.service
removed: /tmp/tmp.LU8QGThEVs
info: Xray v1.8.4 is installed.
注意:XRAY配置文件位于
/usr/local/etc/xray/config.json
。
2.3 编辑服务端配置文件
参考配置文件示例,此处使用 VLESS-XTLS-uTLS-REALITY ,配置服务器模块。
上述Github配置文件示例中,Server端的参考配置(配置文件为 /usr/local/etc/xray/config.json
):
{
"log": {
"loglevel": "warning"
},
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"type": "field",
"ip": [
"geoip:cn",
"geoip:private"
],
"outboundTag": "block"
}
]
},
"inbounds": [
{
"listen": "0.0.0.0",
"port": 443,
"protocol": "vless",
"settings": {
"clients": [
{
"id": "chika", // 长度为 1-30 字节的任意字符串,或执行 xray uuid 生成
"flow": "xtls-rprx-vision"
}
],
"decryption": "none"
},
"streamSettings": {
"network": "tcp",
"security": "reality",
"realitySettings": {
"dest": "www.lovelive-anime.jp:443", // 目标网站最低标准:国外网站,支持 TLSv1.3、X25519 与 H2,域名非跳转用(主域名可能被用于跳转到 www)
"serverNames": [ // 客户端可用的 serverName 列表,暂不支持 * 通配符
"www.lovelive-anime.jp" // Chrome - 输入 "dest" 的网址 - F12 - 安全 - F5 - 主要来源(安全),填 证书 SAN 的值
],
"privateKey": "2KZ4uouMKgI8nR-LDJNP1_MHisCJOmKGj9jUjZLncVU", // 执行 xray x25519 生成,填 "Private key" 的值
"shortIds": [ // 客户端可用的 shortId 列表,可用于区分不同的客户端
"6ba85179e30d4fc2" // 0 到 f,长度为 2 的倍数,长度上限为 16,可留空,或执行 openssl rand -hex 8 生成
]
}
},
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls",
"quic"
]
}
}
],
"outbounds": [
{
"protocol": "freedom",
"tag": "direct"
},
{
"protocol": "blackhole",
"tag": "block"
}
],
"policy": {
"levels": {
"0": {
"handshake": 2,
"connIdle": 120
}
}
}
}
需要自行修改上述配置文件中的Private key、Id、ShortIds,其他配置项可根据自身情况灵活配置。
编辑好配置文件后重启XRAY,查看端口监听状态,此时443端口已被XRAY进程监听。
2.4 客户端配置
可参考上述Github仓库中的客户端配置,实际客户端配置如下:
{
// 日志记录:不写路径则默认日志文件生成在和xray.exe同级目录下。
"log": {
"loglevel": "warning",
"access": "access.log",
"error": "error.log",
"dnsLog": false
},
// 路由
"routing": {
// 域名策略【IPIfNonMatch】:如果其他所有规则都匹配不上,那就转化成IP匹配IP的路由规则。
"domainStrategy": "IPIfNonMatch",
// 路由规则:私有IP、国内IP直连
"rules": [
{
"type": "field",
"ip": [
"geoip:cn",
"geoip:private"
],
"outboundTag": "direct"
}
]
// 其他不符合上述规则的流量会走第一个outbounds(即proxy)
},
// 入站规则:通过Socks5和HTTP代理(监听0.0.0.0本机所有网卡,用于为局域网、虚拟机提供代理)
"inbounds": [
{
"listen": "0.0.0.0",
"port": 7897,
"protocol": "socks"
},
{
"listen": "0.0.0.0",
"port": 7898,
"protocol": "http"
}
],
// 出站规则:vless + xtls + reality
"outbounds": [
{
"protocol": "vless",
"settings": {
"vnext": [
{
"address": "???????????",
"port": 443,
"users": [
{
"id": "????????????????????????", // 与服务端一致
"encryption": "none",
"flow": "xtls-rprx-vision"
}
]
}
]
},
"streamSettings": {
"network": "tcp",
"security": "reality",
"realitySettings": {
"fingerprint": "chrome",
"serverName": "www.lovelive-anime.jp", // 与服务端一致
"publicKey": "???????????????????????", // 服务端执行 xray x25519 生成,私钥对应的公钥,填 "Public key" 的值
"shortId": "??????????????????" // 与服务端一致
}
},
"tag": "proxy"
},
// 出站规则:直连
{
"protocol": "freedom",
"tag": "direct"
}
]
}
但如果不只使用XRAY内核,而是使用图形化客户端的话,可参考如下配置,客户端配置需要自行填写 Public key、Id、ShortIds、服务器IP地址的值。
配置好客户端后,可测试XRAY是否可用,此时应该可用通过XRAY访问国际互联网。
3.安装配置WARP
可参考CloudFlare官方文档,安装WARP,下面教程以红帽系Linux演示。
3.1 安装WARP
# Add cloudflare-warp.repo to /etc/yum.repos.d/
curl -fsSl https://pkg.cloudflareclient.com/cloudflare-warp-ascii.repo | sudo tee /etc/yum.repos.d/cloudflare-warp.repo
# Update repo
sudo yum update
# Install
sudo yum install cloudflare-warp
3.2 配置WARP
# 注册
warp-cli registration new
# 设置WARP为代理模式
warp-cli mode proxy
# 连接至ClouudFlare网络
warp-cli connect
经过上述配置,VPS会在本地监听回环网卡40000端口(默认自启动),该端口提供连接至CloudFlare网络的Socks5代理。
[root@JPV ~]# netstat -naotp | grep LIST
tcp 0 0 127.0.0.1:40000 0.0.0.0:* LISTEN 47438/warp-svc off (0.00/0/0)
3.3 测试WARP代理
可访问 ifconfig.me ,查看本机公网地址。若使用了XRAY代理,应该可以看到VPS公网IP地址。
# 测试WARP Socks5连接,回显结果中显示warp=on证明WARP配置正确
curl https://www.cloudflare.com/cdn-cgi/trace/ --proxy socks5://127.0.0.1:40000 | grep warp
# 也可以通过WARP Socks5连接ifconfig.me,查看WARP为VPS分配的公网IP
curl ifconfig.me --proxy socks5://127.0.0.1:40000
4.修改XRAY配置,集成WARP
注意进行下面修改时要满足JSON语法,不要忘记添加逗号。
4.1 开启XRAY入站流量嗅探
为根据域名匹配路由规则,需要在XRAY配置文件的inbounds模块内添加如下内容,开启入站流量嗅探。
开启流量嗅探后,服务器XRAY内核可以解析入站请求的域名,以便按照域名进行分流。
上述2.3中的配置已经开启流量嗅探,无需修改。
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls",
"quic"
]
}
4.2 添加出口规则(outbounds)
在XRAY配置文件的outbounds模块内,添加如下内容:
{
"tag": "cloudflare-warp",
"protocol": "socks",
"settings": {
"servers": [
{
"address": "127.0.0.1",
"port": 40000
}
]
}
}
4.3 添加路由规则(routing-rules)
在XRAY配置文件的routing模块中的rules,添加如下内容:
如果想解锁特定服务,可以手动配置domain中的域名,使其走WARP的流量以实现解锁。
下面配置中将openai.com添加至domain中以解锁ChatGPT,ifconfig.me添加至domain中以查看通过Warp获取的IPv4地址。
{
"type": "field",
"domain": [
"openai.com",
"ifconfig.me"
],
"outboundTag": "cloudflare-warp"
}
4.4 汇总配置文件
添加一些日志记录的配置项,汇总后的配置文件如下:
{
"log": {
"loglevel": "warning",
"access": "/var/log/xray/access.log",
"error": "/var/log/xray/error.log",
"dnsLog": false
},
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"type": "field",
"ip": [
"geoip:cn",
"geoip:private"
],
"outboundTag": "block"
},
{
"type": "field",
"domain": [
"openai.com",
"ifconfig.me"
],
"outboundTag": "cloudflare-warp"
}
]
},
"inbounds": [
{
"listen": "0.0.0.0",
"port": 443,
"protocol": "vless",
"settings": {
"clients": [
{
"id": "????????", // 长度为 1-30 字节的任意字符串,或执行 xray uuid 生成
"flow": "xtls-rprx-vision"
}
],
"decryption": "none"
},
"streamSettings": {
"network": "tcp",
"security": "reality",
"realitySettings": {
"dest": "www.lovelive-anime.jp:443", // 目标网站最低标准:国外网站,支持 TLSv1.3、X25519 与 H2,域名非跳转用(主域名可能被用于跳转到 www)
"serverNames": [ // 客户端可用的 serverName 列表,暂不支持 * 通配符
"www.lovelive-anime.jp" // Chrome - 输入 "dest" 的网址 - F12 - 安全 - F5 - 主要来源(安全),填 证书 SAN 的值
],
"privateKey": "????????????????", // 执行 xray x25519 生成,填 "Private key" 的值
"shortIds": [ // 客户端可用的 shortId 列表,可用于区分不同的客户端
"????????" // 0 到 f,长度为 2 的倍数,长度上限为 16,可留空,或执行 openssl rand -hex 8 生成
]
}
},
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls",
"quic"
]
}
}
],
"outbounds": [
{
"protocol": "freedom",
"tag": "direct"
},
{
"protocol": "blackhole",
"tag": "block"
},
{
"tag": "cloudflare-warp",
"protocol": "socks",
"settings": {
"servers": [
{
"address": "127.0.0.1",
"port": 40000
}
]
}
}
],
"policy": {
"levels": {
"0": {
"handshake": 2,
"connIdle": 120
}
}
}
}
编辑完配置文件后,重启XRAY。重启后按照路由规则匹配流量,可以通过XRAY代理访问ChatGPT。
路由规则流程图如下:
graph LR; A(客户端XRAY) --> |国内流量:直连|B[国内目标服务器] A --> |国外流量:XRAY协议|C(服务端XRAY) subgraph 服务端路由规则 C --> |国内流量| D[阻断所有回国流量] C --> |匹配域名| E[WARP解锁ChatGPT,Netflix] C --> |默认规则| F[国外目标服务器:Google,Youtube] end