某种情况下重启了一次持续运行长达半年的代理服务器;重启后v2ray炸了(实际上我也炸了) ; 什么配置都没有改的情况下竟不能使用了。连续两天都没时间看这个问题,今晚抽空解决了下;在此分享下
阐述
客户端通过代理访问网站浏览器报错:ERR_CONNECTION_TIMED_OUT
服务端报错:
1 | rejected common/drain: common/drain: drained connection > proxy/vmess/encoding: invalid user: VMessAEAD is enforced and a non VMessAEAD connection is received. You can still disable this security feature with environment variable v2ray.vmess.aead.forced = false . You will not be able to enable legacy header workaround in the futur |
那么从上我们大概知道,VMess的认证信息淘汰机制发生了变化,而我们要解决的话就是需要配置环境变量: v2ray.vmess.aead.forced = false
;于是我在启动v2ray的时候修改了启动文件,最终确实可以得以解决这个问题。
1 | $ vim /etc/systemd/system/v2ray.service |
问题的如何解决我们已经知道了,但事情的缘由;我们还不知道;于是我通过在网上查找,最终找到了一份比较详细的说明:
1 | if s.userValidator.ShouldShowLegacyWarn() { |
1 | VMess MD5 认证信息 玷污机制 |
不得不说一句这个确实有点坑了。而且是从今年开始的;另外就是在解决这个问题之前;我也曾看到过很多文章上面说,需要修改系统时间或是将额外ID(alterId) 修改为:0 来解决,很不凑巧的是我没在看日志之前,也通过这两种方法尝试过,但都没有解决。建议还是不要走弯路,用原生的方法试下。
更多内容参考:
底层传输配置说明文档:https://www.v2ray.com/chapter_02/05_transport.html
相关源码:
1、https://github.com/v2fly/v2ray-core/blob/a21e4a7deb2d60b40ea4ebcedf6e22a56dcb4d04/proxy/vmess/encoding/server.go#L200
2、https://github.com/v2fly/v2ray-core/blob/3ef7feaeaf737d05c5a624c580633b7ce0f0f1be/proxy/vmess/encoding/server.go#L194