新版V2ray推出Vless协议不久就公布史前最强配置Vless+Tcp+Xtls+Fallback方案,咋看是四套配置集为一体的方案(Vless+Tcp+Xtls,Vless+Websocket+Tls,VMess+Tcp+http2+Tls,VMess+Websocket+Tls)。
前两种配置为当前主流协议,后两者是为兼顾老设备老版本系统才暂时保留的配置。可以说即新同时又兼容稳定性。鱼和熊掌兼得。本文不讲解这套终极方案服务端的搭建,只讲终极方案通信原理,通过原理图让V2ray变得更简单,不再因为难而复杂,反而通过本文详解让没基础的朋友也能看懂学会使用V2ray终极方案。
V2ray通信协议封包原理图
如上图所示,展示四种不同配置的封装原理,每个协议从左到右是逐级解包过程,最后还原出原始的数据请求包,通常解包过程发生在数据接收端;而从右到左打包过程,最后打包成Tcp数据包,
通常打包过程发生在数据发送端。计算机网络通信端到端通常发送的数据包是TCP数据包或UDP数据包。以下是V2ray网络通信原理图:
{浏览器} <--(socks)--> {V2Ray 客户端 inbound <-> V2Ray 客户端 outbound} <--(Vless)-->{V2Ray 服务器 inbound <-> V2Ray 服务器 outbound} <--(Freedom)--> {目标网站}
这就是整个通信的原理,只不过联网的电脑需要通过互联网的域名解析服务器帮助解析通信的目标域名,即www.yugogogo.ml绑定的IP是多少。域名好比通信录的姓名,而电话号码好比ip地址。
按照上述打包解包图示和V2ray通信原理,这里直接上手分析V2ray最强配置解说, 目的让更多人看懂V2ray配置文件,通过配置文件明白V2ray各种通信协议及作用。
这套终极配置通信首先是从本地(127.0.0.1)V2ray客户端发起,浏览器将请求数据包通过V2ray客户端sock服务提供代理接收,端口是10808,如下图客户端配置文件。
"inbounds": [ { "tag": "proxy", "port": 10808, "listen": "127.0.0.1", "protocol": "socks", "sniffing": { "enabled": true, "destOverride": [ "http", "tls" ] }, "settings": { "auth": "noauth", "udp": true, "ip": null, "address": null, "clients": null, "decryption": null }, "streamSettings": null } ],
V2ray客户端接收数据包请求,并开始进入打包过程,使用UUID加密原始数据包,打包成
Vless数据包,再打包成XTLS包,最后打包成TCP数据包,处于待发状态,
"outbounds": [ { "tag": "proxy", "protocol": "vless", "settings": { "vnext": [ { "address": "hostname.com", "port": 443, "users": [ { "id": "5452c307-70c1-4bff-9a86-c2143f5bf18a", "alterId": 0, "email": "youremail.com", "security": "auto", "encryption": "none", "flow": "xtls-rprx-origin" } ] } ], "servers": null, "response": null },
如上述配置文件标亮处,将打包好的TCP数据包发送到hostname.com主机请求处理,端口号是443。以上完成V2ray客户端数据发送过程解析。
接下来讲解V2ray服务端的运作过程。如下述V2ray服务端配置,inbounds接收远程客户端的outbounds数据请求。然后做解包处理,从TCP->XTLS->Vless->UUID 解密成功的原始数据包将被转发到境外目标网站。这就是Vless+Tcp+XTLS的通信原理。
"inbounds": [ { "port": 443, "protocol": "vless", "settings": { "clients": [ { "id": "5452c307-70c1-4bff-9a86-c2143f5bf18a", "flow": "xtls-rprx-origin" } ], "decryption": "none", }, "streamSettings": { "network": "tcp", "security": "xtls", "xtlsSettings": { "alpn": [ "http/1.1" ], "certificates": [ { "certificateFile": "/usr/local/etc/v2ray/ssl/v2ray_ssl.cr t", "keyFile": "/usr/local/etc/v2ray/ssl/v2ray_ssl.key" } ] } } }, {
接下来引入Fallback分流功能,讲解FallBack在配置文件中的作用。如下述配置
"fallbacks": [ { "dest": 26427 }, { "path": "/vlessws", "dest": 1234, "xver": 1 }, { "path": "/vmesstcp", "dest": 2345, "xver": 1 }, { "path": "/vmessws", "dest": 3456, "xver": 1 } ]
第一个dest将非V2ray数据流分流到对应端口处理,即Caddy监听端口号是26427提供Web服务,第二个dest是将V2ray数据流Vless+WebSocket+Tls转发到对应端口号1234处理模块处理。
以上vmesstcp,vmessws同理不再赘述。以下贴出第二个dest的接收处理模块的配置。
{ "port": 1234, "listen": "127.0.0.1", "protocol": "vless", "settings": { "clients": [ { "id": "5452c307-70c1-4bff-9a86-c2143f5bf18a" } ], "decryption": "none" }, "streamSettings": { "network": "ws", "security": "none", "wsSettings": { "acceptProxyProtocol": true, "path": "/vlessws" } } },
FallBack分流作用目的使v2ray具有同时为多台客户端设备提供不同配置方案使用的功能,以适应不同网络环境的需要。
以下贴出四种配置客户端的配置图。
除了第一套配置实现XTLS黑科技,其他WebSocket,Vmess都不支持XTLS技术。XTLS在V2ray应用中实际上就是减少tls加密嵌套,实际中只有一层。