欢迎加入tg交流群:@tlanyantg

V2ray的VLESS协议 引入了分流和回落的概念,一般情况下建议直接监听443端口。习惯了使用Nginx建站或者流量转发的网友,VLESS协议 fallback方式让人一时难以理解。本文就这个问题简要介绍V2ray VLESS协议fallback参数,支持VLESS协议的V2ray客户端请到 V2ray客户端 页面下载。

VLESS协议的fallback参数

VLESS协议 中的 fallback 是可选的,只能用于TLS或XTLS模式下。其值是一个对象数组,每一个对象格式如下:

{
  "alpn": "",
  "path": "",
  "dest": "",
  "xver": ""
}

四个参数中只有 dest 是必须的,alpn一般不用管(或者填["http/1.1"]),path 是回落路径,xver用来指示是否传递真实ip信息(需要填1,不需要填0)。新手建议先忽略dest外的选项,例如 V2ray的VLESS协议介绍和使用教程 中,fallback的值为:

"fallbacks": [
  { 
    "dest": 80 // 回落配置,可以直接转到其他网站,例如"www.baidu.com:443" 
  } 
]

如果有多组转发,则可按照 path 路径配置多组 fallback 对象,例如V2ray官方配置中的 VLESS终极配置 的配置如下:

"fallbacks": [
    {
        "dest": 80 // 或者回落到其它也防探测的代理
    },
    {
        "path": "/websocket", // 必须换成自定义的 PATH
        "dest": 1234,
        "xver": 1
    },
    {
        "path": "/vmesstcp", // 必须换成自定义的 PATH
        "dest": 2345,
        "xver": 1
    },
    {
        "path": "/vmessws", // 必须换成自定义的 PATH
        "dest": 3456,
        "xver": 1
    }
]

在上述配置中,客户端请求 域名:/websocket 时,流量将转发到本机的1234端口;请求 域名:/vmesstcp 时,流量转发到本机的 2345 端口;请求路径为 /vmessws 时转发到 3456 端口;如果是其他请求,则转到到 80 端口。

VLESS协议的fallback参数

从上面可以看到,VLESS协议 的回落按照 path 区分,和Nginx按照域名区分是不同的。于是新手可能会产生如下问题:

服务器上多个域名,fallback怎么配置?

V2ray的VLESS协议 的入栈配置都按照 path 进行回落选择,无法按照域名(SNI)分流。如果要支持多域名共存,请使用如下方案:

  1. v2ray监听非443端口(例如监听8443),Nginx监听443端口;
  2. Nginx使用stream监听443,然后按照域名SNI分流。

如果你不在意v2ray的流量入口不是443端口,建议使用第一种方案,否则请选择第二种方案。

为什么没有VLESS+XTLS+WS?

对于使用TLS伪装的科学上网技术,要想过CDN,几乎都要求WS模式。这也是为什么V2ray流量伪装的WS版本能过CDN,但是原生trojan却无法使用CDN中转(trojan-go可以过CDN中转,推荐使用)。

回到本文主题 VLESS协议,VLESS+XTLS很好很强大,但为什么没有VLESS+XTLS+WS模式呢?如果服务端配置了VLESS+XTLS+WS,V2ray将无法正常启动。通过journalctl -xen -u v2ray --no-pager 查看日志,会发现如下错误信息:

XTLS only supports TCP, mKCP and DomainSocket for now

这是因为WS协议需要首先建立HTTP请求,然后才升级为WS连接。如果第一次请求就使用XTLS加密,CDN或者Nginx等中间件无法识别该加密协议,将直接作为无效请求处理。

因此,有过CDN请求,请使用VLESS+TLS+WS。

其他

V2ray的VLESS协议本身没有加密,用于科学上网时请务必配合TLS等使用。由于XTLS的革命性技术,在客户端支持下建议使用VLESS+XTLS+TCP方式,否则建议VLESS+TLS+WS模式。

参考

  1. V2ray教程
  2. V2ray高级技巧:流量伪装
  3. trojan教程