通过 WARP Socks5 代理及 XRAY 路由规则实现解锁 ChatGPT

  • VLESS:出入站协议(私有协议、不加密)可以理解为 Socks5 ,只不过是自定义的私有协议。
  • XTLS:流控方式(xtls-rprx-vision 解决 TLS in TLS 问题)使用新 XTLS 模式,包含内层握手随机填充,支持 uTLS 模拟客户端指纹
  • REALITY:传输层加密,解决 SNI 阻断问题。
  • WARP:CloudFlare 推出的免费代理,可作为 Client 安装到 VPS 中并配置分流规则,用于解锁 ChatGPT、Netflix 等。

  查看当前VPS内核使用的TCP拥塞控制算法

bash

# 确认BBR是否开启(下面命令执行结果为【tcp_bbr】则证明开启)
lsmod | grep bbr
# 确认FQ算法是否开启(下面命令执行结果为【sch_fq】则证明开启)
lsmod | grep fq

  若 VPS 未使用 BBR,手动开启方式如下(下面方法需确保Linux 内核版本大于等于4.9,若不满足要求请升级内核):

bash

echo -e "\nnet.core.default_qdisc=fq\nnet.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf && sysctl -p

  上述命令即将 net.core.default_qdisc=fqnet.ipv4.tcp_congestion_control=bbr 两条配置参数写入 Linux 内核参数配置文件 /etc/sysctl.conf 并使其立即生效。

  再次使用 lsmod 命令查看内核模块,确认 BBR 已被启用。

bash

[root@JPV ~]# lsmod | grep bbr
tcp_bbr                20480  4
[root@JPV ~]# lsmod | grep fq
sch_fq                 20480  3

  参考官方仓库安装脚本,安装Stable版本。

注:VLESS+XTLS+uTLS+REALITY+WARP需要XRAY服务器、客户端(如v2rayN、v2rayNG)内核均为1.8.0版本以上。

  执行如下命令,自动安装XRAY最新Stable版:

bash

bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install

  安装完成后提示如下,可以通过systemctl命令管理XRAY,默认已经启动XRAY且配置了开机自启。

bash

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

  参考配置文件示例,此处使用 VLESS-XTLS-uTLS-REALITY ,配置服务器模块。

  上述Github配置文件示例中,Server端的参考配置(配置文件为 /usr/local/etc/xray/config.json ):

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 keyIdShortIds,其他配置项可根据自身情况灵活配置。

  编辑好配置文件后重启XRAY,查看端口监听状态,此时443端口已被XRAY进程监听。

  可参考上述Github仓库中的客户端配置,实际客户端配置如下:

json

{   
    // 日志记录:不写路径则默认日志文件生成在和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 keyIdShortIds服务器IP地址的值。

image-20231009112514737

  配置好客户端后,可测试XRAY是否可用,此时应该可用通过XRAY访问国际互联网。

  可参考CloudFlare官方文档,安装WARP,下面教程以红帽系Linux演示。

bash

# 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

bash

# 注册
warp-cli registration new

# 设置WARP为代理模式
warp-cli mode proxy

# 连接至ClouudFlare网络
warp-cli connect

  经过上述配置,VPS会在本地监听回环网卡40000端口(默认自启动),该端口提供连接至CloudFlare网络的Socks5代理。

bash

[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)

可访问 ifconfig.me ,查看本机公网地址。若使用了XRAY代理,应该可以看到VPS公网IP地址。

bash

# 测试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

  注意进行下面修改时要满足JSON语法,不要忘记添加逗号。

  为根据域名匹配路由规则,需要在XRAY配置文件的inbounds模块内添加如下内容,开启入站流量嗅探。

  开启流量嗅探后,服务器XRAY内核可以解析入站请求的域名,以便按照域名进行分流。

  上述2.3中的配置已经开启流量嗅探,无需修改。

json

"sniffing": {
                "enabled": true,
                "destOverride": [
                    "http",
                    "tls",
                    "quic"
                ]
            }

  在XRAY配置文件的outbounds模块内,添加如下内容:

json

{
    "tag": "cloudflare-warp",
    "protocol": "socks",
    "settings": {
        "servers": [
            {
                "address": "127.0.0.1",
                "port": 40000
            }
        ]
    }
}

  在XRAY配置文件的routing模块中的rules,添加如下内容:

如果想解锁特定服务,可以手动配置domain中的域名,使其走WARP的流量以实现解锁。

下面配置中将openai.com添加至domain中以解锁ChatGPT,ifconfig.me添加至domain中以查看通过Warp获取的IPv4地址。

json

{
    "type": "field",
    "domain": [
        "openai.com",
        "ifconfig.me"
    ],
    "outboundTag": "cloudflare-warp"
}

  添加一些日志记录的配置项,汇总后的配置文件如下:

json

{
    "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