静看光阴荏苒
不管不顾不问不说也不念

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
赞(4)
未经允许不得转载:荒岛 » Debian11安装WARP并配置Xray按域名分流
分享到: 更多 (0)

评论 10

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    和我同时发 :oops: :oops: :oops: 这就叫心有灵犀么

    Yusum7个月前 (12-11) Google Chrome 96.0.4664.93 Google Chrome 96.0.4664.93 Windows 10 x64 Edition Windows 10 x64 Edition回复
    • 心有灵犀一点通了属于是 :oops: :oops: :oops:

      LALA7个月前 (12-11) Google Chrome 86.0.4240.198 Google Chrome 86.0.4240.198 Windows 10 x64 Edition Windows 10 x64 Edition回复
  2. #2

    不知道新版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

    BobMaster7个月前 (12-11) Firefox 95.0 Firefox 95.0 Windows 10 x64 Edition Windows 10 x64 Edition回复
    • 刚看了一下确实是这样,重启warp-svc服务能解决不?可以的话可以写个systemd.timer定时重启一下。。

      LALA7个月前 (12-11) Google Chrome 86.0.4240.198 Google Chrome 86.0.4240.198 Windows 10 x64 Edition Windows 10 x64 Edition回复
      • 应该可以,重启那一下应该影响不大~ :wink:

        BobMaster7个月前 (12-12) Firefox 95.0 Firefox 95.0 GNU/Linux x64 GNU/Linux x64回复
  3. #3

    netflix:收到,第二天就封了你们 :cool:

    橘子7个月前 (12-13) Google Chrome 95.0.4689.53 Google Chrome 95.0.4689.53 Mac OS X  10.5 Mac OS X 10.5回复
  4. #4

    请问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

    CentB7个月前 (12-16) Google Chrome 86.0.4240.198 Google Chrome 86.0.4240.198 Windows 10 x64 Edition Windows 10 x64 Edition回复
    • 这个官方的客户端我也没试过如何换ip,试试删除注册,重新注册:
      warp-cli delete
      warp-cli register
      要是不行的话,那就只能用wgcf了。

      LALA7个月前 (12-18) Google Chrome 86.0.4240.198 Google Chrome 86.0.4240.198 Windows 10 x64 Edition Windows 10 x64 Edition回复
  5. #5

    socks5安全嘛?能否设置密码?

    不得不说有坑6个月前 (12-29) Google Chrome 86.0.4240.198 Google Chrome 86.0.4240.198 Windows 10 x64 Edition Windows 10 x64 Edition回复
  6. #6

    实测warp有BUG,一大堆链接不关闭,连一会就不能用了

    xbox6个月前 (12-30) Google Chrome 95.0.4667.72 Google Chrome 95.0.4667.72 GNU/Linux x64 GNU/Linux x64回复

分享创造快乐

广告合作资源投稿