在今年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
和我同时发 这就叫心有灵犀么
心有灵犀一点通了属于是
不知道新版warp的bug修復了沒有,实测会出现很多close_wait的连接,不会自动关闭,使用v2ray/xray outbound socks->warp一段时间就会出现无法连接的状况,我当初将socks改为http解决了无法连接的问题,但还是出现了close_wait的情况。lala你用netstat -anop tcp | grep 40000 或者 lsof -i:40000 检测一下。
https://i.imgur.com/NweXjWG.jpg
刚看了一下确实是这样,重启warp-svc服务能解决不?可以的话可以写个systemd.timer定时重启一下。。
应该可以,重启那一下应该影响不大~
netflix:收到,第二天就封了你们
请问Proxy Mode下,如何更换warp呢?试了几种方法都无效:
1.断开重连:warp-cli disconnect 和 warp-cli connect
2.重启systemd: systemctl restart warp-svc,和 systemctl disable –now warp-svc systemctl enable –now warp-svc
3.杀warp-svc的进程,pgrep -f warp-svc | xargs kill -9
4.切换工作模式:warp-cli set-mode dot 和 warp-cli set-mode proxy
5.更换端口:warp-cli set-mode proxy 50000
这个官方的客户端我也没试过如何换ip,试试删除注册,重新注册:
warp-cli delete
warp-cli register
要是不行的话,那就只能用wgcf了。
socks5安全嘛?能否设置密码?
实测warp有BUG,一大堆链接不关闭,连一会就不能用了