v2ray升级强制AEAD,导致不能用的解决方法

发布于 2022-06-29  115 次阅读


原文地址

VMess MD5 认证信息 玷污机制
为了进一步对抗可能的探测和封锁,自 v4.24 版本起,每个 VMess 认证数据的服务器端结构都会包含一个一次写入的玷污状态标记,初始状态为无瑕状态,当服务器检测到重放探测时或者因为其他原因入站连接出错以致校验数据不正确时,该连接所对应的请求认证数据会被玷污。
被玷污的认证数据无法被用于建立连接,当攻击者或客户端使用被玷污的认证数据建立连接时,服务器会输出包含 "invalid user" "ErrTainted" 的错误信息,并阻止该连接。
当服务器没有受到重放攻击时,该机制对正常连接的客户端没有影响。如果服务器正在被重放攻击,可能会出现连接不稳定的情况。
拥有服务器 UUID 以及其他连接数据的恶意程序可能根据此机制对服务器发起拒绝服务攻击,受到此类攻击的服务可以通过修改 proxy/vmess/validator.go 文件中 func (v *TimedUserValidator) BurnTaintFuse(userHash []byte) error 函数的 atomic.CompareAndSwapUint32(pair.taintedFuse, 0, 1) 语句为 atomic.CompareAndSwapUint32(pair.taintedFuse, 0, 0) 来解除服务器对此类攻击的安全保护机制。使用 VMessAEAD 认证机制的客户端不受到 VMess MD5 认证信息 玷污机制 的影响。

VMess MD5 认证信息 淘汰机制
VMessAEAD 协议已经经过同行评议并已经整合了相应的修改。 VMess MD5 认证信息 的淘汰机制已经启动。
自 2022 年 1 月 1 日起,服务器端将默认禁用对于 MD5 认证信息 的兼容。任何使用 MD5 认证信息的客户端将无法连接到禁用 VMess MD5 认证信息的服务器端。
在服务器端可以通过设置环境变量 v2ray.vmess.aead.forced = true 以关闭对于 MD5 认证信息的兼容。 或者 v2ray.vmess.aead.forced = false 以强制开启对于 MD5 认证信息 认证机制的兼容 (不受到 2022 年自动禁用机制的影响) 。 (v4.35.0+)。

下面操作都在服务端进行,也就是设置环境变量,关闭 AEAD,就这么简单。

首先下面命令,查看 v2ray 的 systemd 的详细路径和内容:

systemctl cat v2ray

然后会看到类似下面内容:

# /etc/systemd/system/v2ray.service
[Unit]
Description=V2Ray Service
Documentation=https://www.v2fly.org/
After=network.target nss-lookup.target

[Service]
User=nobody
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
NoNewPrivileges=true
ExecStart=/usr/bin/v2ray -config /etc/v2ray/config.json
Restart=on-failure
RestartPreventExitStatus=23

[Install]
WantedBy=multi-user.target

可以看到上面有文件路径:

vi /etc/systemd/system/v2ray.service

然后修改一下,在 Service 区块添加一行:

Environment="V2RAY_VMESS_AEAD_FORCED=false"

然后更新一下 systemd 服务:

systemctl daemon-reload

最后重启一下 v2ray 就好了。

systemctl restart v2ray


或许明日太阳西下倦鸟已归时