Xray VLESS协议的fallback功能简析
在使用Xray
的过程中,fallback
(回落)功能是非常强大的。本文简要说明一下这个功能的逻辑以及使用方式。
认识回落
以下面这段配置代码为例:
|
|
这段配置解释如下:
-
Xray
的入站端口[inbound port]
是443
,即由Xray
负责监听443
端口的HTTPS
流量。 -
Xray
的入站协议[inbound protocol]
是vless
,只有vless
协议的流量才会流入Xray
中做后续处理。(VLESS
这个轻量协议开发的初衷就是给xray
及v2fly
等核心引入回落功能、并同时减少冗余校验/加密。目前为止,xray
中的trojan
协议也已完整支持回落功能。) -
回落目标端口
[fallback dest]
是8080
,Xray
接受443
端口的访问流量后,属于vless
协议的流量,由Xray
进行内部处理并转发至出站模块。而其他非vless
协议的流量,则转发至8080
端口。 -
回落给
8080
端口的流量,由后续程序处理,通常由Nginx
或Caddy
处理。
完整数据路线如下:
基于上面的示例,可以了解什么是回落(What)和怎么回落(How),简单地说就是下面这几个要素:
- 回落的时间是流量进入Xray监听端口后;
- 回落的依据是协议类型等流量特征;
- 回落的目标是某个端口;
- 被回落的流量由监听回落端口的后续程序接手。
为什么要回落
最初,是为了防御主动探测(Active Probing)。
主动探测: 简单粗暴的理解,就是指外部通过发送特定的网络请求,并解读服务器的回应内容,来推测服务器端是否运行了xray, v2fly, shadowsocks
等代理工具。一旦可以准确认定,则服务器可能受到干扰或阻断。
之所以可以根据服务器回应内容进行解读,就是因为一次完整的数据请求,其实有很多数据交换的步骤,每一个步骤,都会产生一些软件特征。也说就是:
- 正常的网站的回应,一定会有类似
Nginx, Apache, MySQL
的Web服务、数据库等工具的特征。 - 正常的网站的回应,一定不会有类似
xray, v2fly, shadowsocks
等代理工具的特征。
于是,当我们给Xray
提供了回落功能后(如上例,回落给 Nginx),面对任何用来探测的请求,产生的结果是:
- 探测流量无法掌握你的
VLESS
要素,故都会被回落至Nginx
。 - 探测流量全都回落进入
Nginx
,故VPS服务器的回应一定会有Nginx
的特征。 - 因为
Xray
本身不对探测流量做任何回应,所以VPS的回应一定不会有Xray
的特征。
至此,回落功能就从数据交互逻辑上解决了服务器被主动探测的安全隐患。
重新认识回落
为什么要再次认识回落呢?因为上面仅仅说清楚了基于协议的,抵抗主动探测的回落。
在rprx不断开发迭代VLESS
协议及fallback
功能的过程种,逐渐发现,回落完全可以更加灵活强大,只要在保证抵抗主动探测的前提下,充分利用数据首包中的信息,其实可以做到多元素、多层次的回落。
基于这个开发理念,回落功能逐渐完善,完成了纯伪装 --> ws分流 --> 多协议多特征分流
的进化。最终版甚至完全替代了以前要用Web服务器、其他工具才能完成的分流的功能。且由于上述的回落/分流处理都在首包判断阶段以毫秒级的速度完成,不涉及任何数据操作,所以几乎没有任何过程损耗。
因此,现在完整的回落功能,同时具备下述属性:
- 安全: 充分抵御主动探测攻击
- 高效: 几乎毫无性能损失
- 灵活: 数据灵活分流、常用端口复用(如443)
多层回落示例及解读
理解了完整的回落功能,就可以配置多层回落了。其实,项目已经提供了非常完整的示例,即官方模板中的VLESS-TCP-XTLS-WHATEVER。
服务器配置的443监听段摘抄如下:
|
|
这段配置解释如下:
-
Xray
的入站端口(inbound port)
是443
,即由Xray
负责监听443
端口的HTTPS
流量,并使用certificates
项下设定的TLS
证书来进行验证。 -
Xray
的入站协议(inbound protocol)
是vless
,vless
协议流量直接流入Xray
中做后续处理。 -
非
VLESS
协议流量有4个不同的回落目标:a.
path
为websocket
的流量,回落给端口1234
后续处理; b.path
为vmesstcp
的流量,回落给端口2345
后续处理; c.path
为vmessws
的流量,回落给端口3456
后续处理; d. 其它所有流量,回落给端口1310
后续处理。 -
xver
为1
表示开启proxy protocol
功能,向后传递来源真实IP。
上述回落结构如下图所示:
后续监听处理的配置段摘抄如下:
1、后续处理回落至1310
端口的流量,按照下面的配置验证、处理:
|
|
这里trojan
协议又出现了一个新的fallbacks
。前面已经说过,xray
中的trojan
协议也具有完整的回落能力,此时trojan
协议可以再次做判断和回落:
- 所有
trojan
协议的流量,流入Xray
中做后续处理; - 所有非
trojan
协议的流量,转发至80
端口,完成主动探测的防御。
2、后续处理回落至1234
端口的流量,它其实是vless+ws
:
|
|
3、后续处理回落至2345
端口的流量,它其实是vmess+TCP
:
|
|
4、后续处理回落至3456
端口的流量,它其实是是vmess+ws(+cdn)
:
|
|
至此,模板的完整回落路线为:
以上就是Xray
的回落功能介绍。
- 原文作者:百年孤独
- 原文链接:https://qoanty.github.io/2021/04/xray-vless-fallbacks/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。