Clash 的不兼容更新排查

很久以前,突然发现 Clash 的线路经常会有问题,往往几十条线路只有几条可以用。曾经认为是由于特殊原因导致线路抽风,就一直没在意(毕竟还有能用的)

为了测试 vless,在 V2RayN 也拉了一下订阅列表,发现在 V2RayN 几乎所有线路都没问题。看上去似乎是 Clash 存在一些问题。

简单调研了下,得知 Clash 并没有使用 v2ray-core 或是 xray-core,而是自己重新实现了 clash-core,因此可能会存在一定的不兼容问题(然而实际上,不兼容仅局限于 Clash 不支持 vless 协议)

看上去似乎 Clash 的问题很莫名其妙,不过好在因为前提是在测试自己的节点,所以可以同时检查服务端和客户端的 log

分别使用 V2RayN 和 Clash 连接自己的 VMess + WebSocket + TLS 线路,发现 Clash 的请求压根没有收到……检查 Clash 的 Log 发现报错是 301 重定向。
为了避免被主动探测,我的节点在外面是套了层网站的,这个 301 是网站首页的重定向。所以看起来原因在于 ws-path 字段的设置

针对性搜了下关键字,发现了这个 issue:[Bug]: 新版本vmess代理不能工作 #2588
简单描述下就是 clash-core 更新了配置文件的格式,并且是不向前兼容的。大致就是把 ws 相关的配置统一移动到 ws-opts
也即

- ws-path: v2ray
- ws-headers: {Host: example.com}

修改为

- ws-opts: {ws-path: v2ray, headers: {Host: example.com}}

实际上这个变动在很久很久之前就已经被公告了,然而似乎各个机场和订阅转换工具都没有更新……(包括 我自己的订阅转换