Xray配置VMess + WebSocket + TLS+warp分流

该方法需要自备一个域名并已将dns解析到服务器ip.

系统:ubuntu22.04 目标:配置vmss+webScoket+tls,并配置warp分流, 将”openai.com”, “chatgpt.com”, “whatismyipaddress.com”, “ipaddress.my”, “whatismyip.com”,”netflix.com”这6个网站走warp的proxy,其它的走默认出口,并nginx反向代理将域名代理到到微软云盘增加隐蔽性。

文章最后有VMess + WebSocket + TLS的原理,需要先了解原理的请跳到文章后面

1. 更新系统

确保系统和软件包是最新的:

sudo apt update && sudo apt upgrade -y

2. 安装必要的软件

安装Nginx和Certbot(用于TLS证书):

sudo apt install nginx certbot python3-certbot-nginx -y

3. 安装 Xray-Core

Xray-Core 是支持 VMess 的主程序:

  1. 下载 Xray-Core:
bash <(curl -L https://raw.githubusercontent.com/XTLS/Xray-install/main/install-release.sh)

备用脚本链接: htthttps://cloud.zhzxs.site/s/ETZBRJSHjkFwsFK

  1. 检查是否安装成功:
xray version

2. 添加 Cloudflare 的官方存储库

运行以下命令添加 Cloudflare 的 GPG 密钥和软件源:

# 添加 GPG 密钥
curl https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --dearmor -o /usr/share/keyrings/cloudflare-warp.gpg

# 添加软件源
echo "deb [signed-by=/usr/share/keyrings/cloudflare-warp.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list

3. 安装 Cloudflare Warp 客户端

更新包列表并安装 Warp 客户端:

sudo apt update
sudo apt install -y cloudflare-warp

4. 登录并启用 Warp

1.登录 Cloudflare Warp:

warp-cli registration new

2.将Warp 设置为 Proxy 模式:

warp-cli mode proxy 

注意,如果这里提示没有这个命令,可能是因为这个命令在当前版本不支持,需要去查看帮助文档查看设置代理模式的新命令,如果这条命令没有执行成功,最好不要执行下面的启用命令,因为warp默认是全局模式,如果你用的xshell等软件连接服务器,那么启用之后会立即断开,需要你到云服务器厂商进行连接关闭warp后才能使用xshell

3.启用 Warp

warp-cli connect

5. 配置 Proxy

Warp 默认会在本地监听 127.0.0.1:40000 端口。你可以通过以下方式验证 Proxy 是否正常工作:

1.查看连接状态:

warp-cli status 

如果显示 Connected,说明 Warp 已成功连接。

2.设置系统代理(可选): 将代理地址配置为 SOCKS5 127.0.0.1:40000

3.通过代理进行测试: 使用 curl 测试代理连接

curl --socks5 127.0.0.1:40000 https://www.cloudflare.com/cdn-cgi/trace 

如果返回了 Cloudflare 的响应信息(如 IP 地址和位置信息),说明代理正常工作。


6. 开机自启动(可选)

如果希望 Warp 在系统启动时自动运行,可以将以下命令添加到开机启动项:

sudo systemctl enable warp-svc

注意事项

  • Proxy 模式使用的是 SOCKS5 协议,你需要确保应用程序支持 SOCKS5 代理。
  • 如果你需要全局模式,可以通过 warp-cli mode warp 将其切换为全局模式。

这样,Cloudflare Client 就在你的 Ubuntu 22.04 上成功配置为 Proxy 模式了!

7. 配置 Nginx

1.创建一个站点配置文件(如 /etc/nginx/sites-available/yourdomain.conf):

sudo vim /etc/nginx/sites-available/yourdomain.conf

2.添加以下内容,将yourdomain.com替换为实际域名:

server {
    listen 80;
    server_name yourdomain.com;

     location / {      #配置反向代理到微软云盘
    proxy_pass https://onedrive.live.com;
        proxy_set_header Host onedrive.live.com;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }


    location /websocket {
        proxy_redirect off;
        proxy_pass http://127.0.0.1:8080; # 转发到 Xray 的 WebSocket
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

3.启用站点:

sudo ln -s /etc/nginx/sites-available/yourdomain.conf /etc/nginx/sites-enabled/ 
sudo nginx -t # 检查配置 
sudo systemctl reload nginx

8. 使用 Certbot 申请 TLS 证书

运行以下命令获取和自动配置TLS证书:

sudo certbot --nginx -d yourdomain.com

验证证书是否生效:

sudo systemctl reload nginx

9. 配置 Xray

1.编辑 Xray 配置文件(通常为 /usr/local/etc/xray/config.json):

sudo vim /usr/local/etc/xray/config.json

2.添加以下内容

{
    "inbounds": [
        {
            "port": 8080,
            "protocol": "vmess",
            "settings": {
                "clients": [
                    {
                        "id": "UUID-REPLACE-WITH-YOUR-OWN", // 替换为实际 UUID
                        "alterId": 0
                    }
                ]
            },
            "streamSettings": {
                "network": "ws",
                "wsSettings": {
                    "path": "/websocket" // 与 Nginx 的路径一致
                }
            }
        }
    ],
    "outbounds": [
        {
            "tag": "direct",
            "protocol": "freedom",
            "settings": {}
        },

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

     "routing": {
        "domainStrategy": "AsIs",
        "rules": [
            {
                "type": "field",
                "domain": [
		    "openai.com",
                    "chatgpt.com",
                    "whatismyipaddress.com",
                    "ipaddress.my",
                    "whatismyip.com",
                    "netflix.com"
                ],
                "outboundTag": "warp"
            }
        ]
    }
}

或使用一个没有配置warp分流的配置文件

{
  "inbounds": [
    {
      "port": 8080,
      "protocol": "vmess",
      "settings": {
        "clients": [
          {
            "id": "UUID-REPLACE-WITH-YOUR-OWN",
            "alterId": 0
          }
        ]
      },
      "streamSettings": {
        "network": "ws",
        "wsSettings": {
          "path": "/websocket"
        }
      }
    }
  ],
  "outbounds": [
    {
      "tag": "direct",
      "protocol": "freedom",
      "settings": {}
    }
  ]
}

3.生成 UUID:

uuidgen 

替换配置文件中的 UUID-REPLACE-WITH-YOUR-OWN

4.重启 Xray:

sudo systemctl restart xray

7. 配置客户端

在客户端(例如 V2RayN)中,添加以下信息:

  • 协议:VMess
  • 地址:你的域名(如 yourdomain.com
  • 端口:443
  • UUID:与服务端配置一致
  • 加密:auto
  • 传输协议:WebSocket
  • 路径/websocket
  • TLS:开启

8. 验证配置

  1. 使用客户端连接到服务器。
  2. 测试是否可以正常访问网络。

9. 自动更新证书

Certbot 默认会设置自动更新任务,但您可以手动验证:

sudo certbot renew --dry-run

原理

整个过程的核心就在于通过 HTTPS 加密和反向代理 的伪装,绕过防火墙的检测。下面我们再用更清晰的逻辑梳理一下这个过程:

  1. HTTPS 建立加密连接

客户端发起请求: 客户端会先发起一个 HTTPS 请求,例如访问 https://example.com/ws。

防火墙只看到 HTTPS 流量: HTTPS 是加密的,防火墙只能看到流量目标是 example.com 的端口 443,却无法解密和分析其中的内容。

因为 HTTPS 的 TLS 加密保护了数据,防火墙无法区分这是真正的网页访问还是代理流量。

这是伪装的关键。

  1. 反向代理转发流量

在服务器上,Nginx 或其他反向代理软件会监听 443 端口(即 HTTPS 的默认端口),负责处理这个请求。

流量分流: Nginx 根据请求路径分流,例如:

如果路径是 /ws,将流量转发给 V2Ray 的 WebSocket 服务(比如监听在 127.0.0.1:10000)。

如果路径是 / 或其他路径,返回正常的网页内容。

  1. WebSocket 转到 V2Ray

当请求路径是 /ws 时,Nginx 会将该请求转发到本地的 V2Ray 服务(例如 http://127.0.0.1:10000)。

V2Ray 的工作:

解密流量:V2Ray 接收 WebSocket 流量后,从中提取加密的 Vmess 数据包。

验证用户:通过 UUID 验证客户端是否有权限使用代理。

转发流量:将流量通过 Vmess 协议转发到目标网站。

  1. 客户端与目标网站通信

完成上述过程后:

客户端与目标网站建立通信:

V2Ray 将目标网站的响应通过 WebSocket 返回给 Nginx,Nginx 再通过 HTTPS 加密发回客户端。

对于外界观察者(如防火墙):

这只是一次普通的 HTTPS 请求。

伪装流程的好处

隐蔽性强:

整个过程看起来和正常 HTTPS 网站访问几乎没有区别。

防火墙无法识别其中的代理特征。

绕过审查:

防火墙通常不会封锁 HTTPS 流量,因为封锁 HTTPS 意味着大量正常网站也会被封。

安全性高:

HTTPS 和 Vmess 的双重加密,保护数据不被窃听或篡改。

总结

流程图总结如下:

客户端:发起 https://example.com/ws 请求。

防火墙:只能看到加密的 HTTPS 流量,无法深入分析。

Nginx:

/ws 转发到 V2Ray。

其他路径返回正常网页内容。

V2Ray:解密并处理代理流量,将目标网站内容返回给客户端。

通过这种方式,客户端通过 HTTPS 建立的加密连接成功隐藏了代理流量,绕过了防火墙的检测。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇