Debian11安装WARP并配置Xray按域名分流

在今年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
全部为采集文章,文中的 联系方式 均不是 本人 的!

发表评论