VMess 协议的 MD5 认证信息将淘汰,VMess AEAD 协议已经经过同行评议并已经整合了相应的修改,作为对 MD5 的替代。

自 2022 年 1 月 1 日起,服务器端将默认禁用对于 MD5 认证信息的兼容。任何使用 MD5 认证信息的客户端将无法连接到禁用 VMess MD5 认证信息的服务器端。

https://www.v2fly.org/config/protocols/vmess.html#vmess-md5-%E8%AE%A4%E8%AF%81%E4%BF%A1%E6%81%AF-%E6%B7%98%E6%B1%B0%E6%9C%BA%E5%88%B6

如果你发现 2022 年新建的 v2ray 服务端突然不能用了,很可能是这个原因。

如何解决呢?

最好的方法是启用 AEAD ,将服务端和客户端的 alterId 设置为 0 会启动 AEAD。设置好后,即可使用。一些过于古老的客户端没有 alterId 的设置,建议更新客户端,如果实在不方便更新客户端,可以使用下面的方法修改环境变量强制兼容 MD5 。

在服务器端可以通过设置环境变量 v2ray.vmess.aead.forced = true 以关闭对于 MD5 认证信息的兼容。 或者 v2ray.vmess.aead.forced = false 以强制开启对于 MD5 认证信息 认证机制的兼容 (不受到 2022 年自动禁用机制的影响) 。 (v4.35.0+)

如果是手动启动 v2ray 服务,可以在启动前使用下面的命令添加环境变量,再启动 v2ray

1
export V2RAY_VMESS_AEAD_FORCED=false

如果使用 systemctl 启动 v2ray 服务,可以修改 v2ray.service 文件,添加 Environment="V2RAY_VMESS_AEAD_FORCED=false"

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# /etc/systemd/system/v2ray.service
[Unit]
Description=V2Ray Service
Documentation=https://www.v2fly.org/
After=network.target nss-lookup.target

[Service]
# 修改环境变量
Environment="V2RAY_VMESS_AEAD_FORCED=false"
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

然后更新一下 systemd 服务,并重启 v2ray

1
2
systemctl daemon-reload
systemctl restart v2ray

能使用 AEAD 还是尽量用 AEAD 吧,强制支持 MD5 只是临时解决方法,毕竟 MD5 有漏洞。