alterId 是什么,为什么新内核要求它必须是 0
解析 vmess 链接时看到 alterId 非零并被标为过时,原因是 VMess 早已从 MD5 认证换成了 AEAD。本文说明 alterId 的历史作用、为什么它被废弃、以及遇到非零值时该怎么处理。
本文目录(6 节 · 约 2 分钟) +
- 01 它原本是干什么的
- 02 为什么被废弃了
- 03 所以看到非零值该怎么办
- 04 一个容易混淆的地方
- 05 顺带一提:VMess 之外
- 06 小结
一句话结论:alterId 是旧版 VMess 的额外 ID 机制,配合已被淘汰的 MD5 认证使用。 VMess 改用 AEAD 认证后它就没有意义了,mihomo 等新内核不再支持非零值,遇到会直接拒绝连接。看到 alterId 大于 0,基本说明这条链接来自很久以前,或者服务端版本很老。
它原本是干什么的
早期 VMess 的认证依赖时间戳加 MD5。客户端用 UUID 和当前时间生成一个校验值,服务端用同样的方法算一遍比对。这套机制有个弱点:如果攻击者能收集足够多的握手包,就有可能通过重放或统计分析识别出这是 VMess 流量。
alterId 的设计意图是缓解这个问题——它让客户端在主 UUID 之外,再派生出 N 个「备用 ID」,每次连接随机挑一个用。ID 池越大,同一个 ID 重复出现的频率越低,理论上就越难被统计分析盯上。所以老教程里常写 alterId: 64。
为什么被废弃了
alterId 只是给一个有结构性缺陷的认证方式打补丁,代价还不小:
- 客户端和服务端都要预先生成并维护 N 个 ID,内存和计算开销随 N 增长
- 它并没有真正解决问题,只是把统计分析的门槛抬高了一点
- MD5 本身早已不适合用于安全场景
2020 年前后 VMess 引入了 AEAD(Authenticated Encryption with Associated Data)认证,从根上换掉了这套机制。AEAD 把加密和认证合成一步完成,不需要靠 ID 池来增加随机性。于是 alterId 失去了存在理由,官方将其标记为废弃,取值统一为 0。
再往后,新内核干脆移除了对非零 alterId 的支持——不是「不推荐」,是直接不支持。mihomo 遇到非零值会报错拒绝加载该节点。
所以看到非零值该怎么办
如果是机场给的订阅
说明这家机场的服务端还在跑很老的版本,或者订阅生成模板多年没更新。你可以:
- 先试着把
alterId改成 0 —— 如果服务端已经支持 AEAD(大概率支持,只是订阅模板没改),改完就能连 - 改成 0 之后连不上,说明服务端确实还是老版本,那就只能用老客户端,或者换一家
第二种情况值得警惕:一个 2026 年还在用 MD5 认证的服务端,说明运维已经很久没动过了。
如果是自己搭的
升级服务端到支持 AEAD 的版本,然后两边都把 alterId 设为 0。
如果只是想看清一条链接里写了什么
把链接粘进节点链接解析器,它会把 alterId 单独标出来并说明含义,同时解析出传输方式、TLS、伪装域名等全部参数。解析在你的浏览器里完成,链接不会上传。
一个容易混淆的地方
alterId 和 id(UUID)是两回事。id 是你的身份凭证,必须和服务端一致,泄露了别人就能用你的节点。alterId 只是个数字,表示派生多少个备用 ID,本身不是秘密。
解析工具里如果看到 id 字段缺失,那是致命问题——客户端无法完成认证。而 alterId 缺失反而没关系,默认就是 0。
顺带一提:VMess 之外
VLESS 从设计之初就没有 alterId 这类东西。它把加密和认证的责任交给传输层(TLS / Reality),协议本身只做最小化的身份标识,所以配置字段比 VMess 少得多。这也是近几年 VLESS 使用率上升的原因之一。
如果你在对比两条链接的差异,节点链接解析器会把各协议特有的字段分别翻译出来,包括 VLESS 的 Reality 公钥、flow 控制这些。
小结
alterId是 MD5 认证时代的产物,AEAD 之后失去意义- 新内核不支持非零值,会直接拒绝连接
- 遇到非零先试着改成 0,改完连不上说明服务端太老了
- 它和 UUID 是两回事,前者不是秘密
相关文章
订阅地址打开是一大串乱码,那到底是什么
在浏览器里打开机场订阅地址,看到的往往是一长串没有换行的字符。那不是加密,是 Base64 编码的节点清单。本文说明它的结构、为什么要编码、以及三种常见的订阅返回格式怎么区分。
规则写对了却不生效?多半是顺序放错了
Clash 的规则从上往下逐条匹配、命中即停,所以一条宽泛的规则放在前面,会让它后面所有具体规则永远不执行。本文说明正确的排列顺序、GEOIP 为什么必须靠后,以及怎么验证某个域名到底命中了哪条。
Reality 是什么,它和普通 TLS 差在哪
节点链接里出现 security=reality、pbk、sid 这些参数时,说明它用的是 Reality。本文说明它借用真实网站 TLS 特征的原理、为什么不需要自己的域名和证书,以及 pbk / sid / fp 各是什么。