原文地址:https://lala.im/8225.html,請支持原作者!該處僅作轉載。
在今年6月份的时候,cloudflare官方发布了一个支持linux的warp客户端,具体看这里:
https://blog.cloudflare.com/announcing-warp-for-linux-and-proxy-mode/
这个客户端有一个非常大的亮点就是支持本地代理模式,用这个模式可以指定某一个程序是否走warp。
再说详细一点就是,开启了warp的本地代理模式后,warp客户端会在本地启一个http/socks5服务,对于要走warp代理的程序我们就给这个程序配置连接warp提供的socks5即可。
在这个基础上,我们就可以配置xray的outbounds来连接warp提供的socks5,再利用xray的路由功能实现按域名分流。
整个连接的流程就是:本地电脑上的xray—>服务器上的xray—>服务器上的warp—>外部网络。
首先安装warp客户端,这里把需要用到的基本工具装一下:
apt -y update
apt -y install gnupg curl wget nginx python3-certbot-nginx
systemctl enable --now nginx
导入cloudflare存储库的gpg密钥:
curl https://pkg.cloudflareclient.com/pubkey.gpg | gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg
添加cloudflare存储库:
echo 'deb [arch=amd64 signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ bullseye main' | tee /etc/apt/sources.list.d/cloudflare-client.list
安装warp客户端:
apt -y install cloudflare-warp
检查客户端是否正常运行:
systemctl status warp-svc
注册warp,只有注册了之后才能使用:
warp-cli register
把模式改为代理:
warp-cli set-mode proxy
默认情况下socks5是监听在本地的40000端口上,如果要修改这个端口,可以使用下面的命令:
warp-cli set-proxy-port 30000
检查warp的配置,查看当前的代理模式:
warp-cli settings
如果正常的话会有如下回显:
Mode: WarpProxy
Proxy listening on: 127.0.0.1:40000
现在就可以连接了:
warp-cli connect
查看连接是否成功:
warp-cli warp-stats
正常会有类似如下回显:
Endpoints: 162.159.xxx.xxx, 2606:4700:d0::xxxx:xxxx
Time since last handshake: 31s
Sent: 480.7kB; Received: 5.0MB
Estimated latency: 2ms
Estimated loss: 0.00%;
建议开启永久连接功能:
warp-cli enable-always-on
关于warp的设置就到这里,下面列出一些常用的warp客户端命令:
warp-cli disconnect // 断开连接
warp-cli disable-always-on // 关闭永久连接
warp-cli delete // 删除注册
接下来安装xray:
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install -u root --version v1.5.0
生成一个uuid复制下来:
xray uuid
编辑xray的配置文件:
nano /usr/local/etc/xray/config.json
写入如下配置:
{
"log": {
"loglevel": "warning"
},
"inbounds": [
{
"listen": "127.0.0.1",
"port": 50000,
"protocol": "vless",
"settings": {
"clients": [
{
"id": "9a3ac31c-6d39-4d0e-a71d-e5bdd49867e6" # 填写你的uuid
}
],
"decryption": "none"
},
"streamSettings": {
"network": "grpc",
"grpcSettings": {
"serviceName": "debian",
"multiMode": true
}
}
}
],
"outbounds": [
{
"tag": "warp",
"protocol": "socks",
"settings": {
"servers": [
{
"address": "127.0.0.1", // warp代理模式提供的socks服务
"port": 40000, // warp的socks端口
"users": []
}
]
}
},
{
"tag": "direct",
"protocol": "freedom"
}
],
"routing": {
"rules": [
{
"type": "field",
"outboundTag": "warp",
"domain": [
"geosite:netflix"
]
}
]
}
}
在这个配置示例中分流了netflix的流量,只要访问netflix就走warp,其他网站还是走服务器自己的网络。
关于geosite的更多可用配置名,可以看这里:https://github.com/v2fly/domain-list-community/tree/master/data
至于协议用什么都无所谓,这个示例中我用的是vless+grpc。你也可以直接用vmess,这样配置起来会简单一些。
由于用到了grpc,现在新建nginx站点配置文件:
nano /etc/nginx/conf.d/grpc.conf
写入如下配置:
server {
listen 80;
server_name debian.example.com;
root /var/www/html;
index index.nginx-debian.html;
location /debian/TunMulti {
client_max_body_size 0;
grpc_set_header X-Real-IP $remote_addr;
grpc_pass grpc://127.0.0.1:50000;
}
}
注意nginx配置里面location的path,在xray中设置的serviceName是debian,并且开启了multimode,那么在nginx中的path就是/debian/TunMulti。
使用certbot签发ssl证书:
certbot --nginx
在证书签发完成之后,重新编辑刚新建的nginx站点配置文件:
nano /etc/nginx/conf.d/grpc.conf
在这一行加入http2的设置:
listen 443 ssl http2; # managed by Certbot
重载nginx使其生效:
systemctl reload nginx
客户端的配置:
额外补充一点和这没多大关系的内容。
如果不使用warp客户端的本地代理模式,直接代理服务器全部流量的话肯定会导致服务器无法连接。
有时候是需要用到这个模式的,因为开了这个模式后可以很方便的检查连接的ip是否能够解锁一些内容,比如netflix。
在使用这个模式之前,你可以先找一台跳板机登录,或者在xshell里面设置一个代理,用代理来登录服务器。
之后使用如下命令把你的跳板机ip或者代理的ip添加到排除路由:
warp-cli add-excluded-route 1.2.3.4
这样你的ssh连接不会断开,接着再把模式改为代理全部流量:
warp-cli set-mode warp
切换模式后,需要重新连接:
warp-cli disconnect
warp-cli connect
现在你可以使用工具或者脚本来检查连接的ip是否能够解锁一些内容,比如说netflix:
wget https://github.com/sjlleo/netflix-verify/releases/download/2.61/nf_2.61_linux_amd64
chmod +x nf_2.61_linux_amd64
./nf_2.61_linux_amd64