该方法需要自备一个域名并已将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 的主程序:
- 下载 Xray-Core:
bash <(curl -L https://raw.githubusercontent.com/XTLS/Xray-install/main/install-release.sh)
备用脚本链接: htthttps://cloud.zhzxs.site/s/ETZBRJSHjkFwsFK
- 检查是否安装成功:
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. 验证配置
- 使用客户端连接到服务器。
- 测试是否可以正常访问网络。
9. 自动更新证书
Certbot 默认会设置自动更新任务,但您可以手动验证:
sudo certbot renew --dry-run
原理
整个过程的核心就在于通过 HTTPS 加密和反向代理 的伪装,绕过防火墙的检测。下面我们再用更清晰的逻辑梳理一下这个过程:
- HTTPS 建立加密连接
客户端发起请求: 客户端会先发起一个 HTTPS 请求,例如访问 https://example.com/ws。
防火墙只看到 HTTPS 流量: HTTPS 是加密的,防火墙只能看到流量目标是 example.com 的端口 443,却无法解密和分析其中的内容。
因为 HTTPS 的 TLS 加密保护了数据,防火墙无法区分这是真正的网页访问还是代理流量。
这是伪装的关键。
- 反向代理转发流量
在服务器上,Nginx 或其他反向代理软件会监听 443 端口(即 HTTPS 的默认端口),负责处理这个请求。
流量分流: Nginx 根据请求路径分流,例如:
如果路径是 /ws,将流量转发给 V2Ray 的 WebSocket 服务(比如监听在 127.0.0.1:10000)。
如果路径是 / 或其他路径,返回正常的网页内容。
- WebSocket 转到 V2Ray
当请求路径是 /ws 时,Nginx 会将该请求转发到本地的 V2Ray 服务(例如 http://127.0.0.1:10000)。
V2Ray 的工作:
解密流量:V2Ray 接收 WebSocket 流量后,从中提取加密的 Vmess 数据包。
验证用户:通过 UUID 验证客户端是否有权限使用代理。
转发流量:将流量通过 Vmess 协议转发到目标网站。
- 客户端与目标网站通信
完成上述过程后:
客户端与目标网站建立通信:
V2Ray 将目标网站的响应通过 WebSocket 返回给 Nginx,Nginx 再通过 HTTPS 加密发回客户端。
对于外界观察者(如防火墙):
这只是一次普通的 HTTPS 请求。
伪装流程的好处
隐蔽性强:
整个过程看起来和正常 HTTPS 网站访问几乎没有区别。
防火墙无法识别其中的代理特征。
绕过审查:
防火墙通常不会封锁 HTTPS 流量,因为封锁 HTTPS 意味着大量正常网站也会被封。
安全性高:
HTTPS 和 Vmess 的双重加密,保护数据不被窃听或篡改。
总结
流程图总结如下:
客户端:发起 https://example.com/ws 请求。
防火墙:只能看到加密的 HTTPS 流量,无法深入分析。
Nginx:
/ws 转发到 V2Ray。
其他路径返回正常网页内容。
V2Ray:解密并处理代理流量,将目标网站内容返回给客户端。
通过这种方式,客户端通过 HTTPS 建立的加密连接成功隐藏了代理流量,绕过了防火墙的检测。










