摘要

  • IPv6 临时地址通过限定首选寿命,缩短同一接口标识符串联多次出站会话的时间窗口;旧地址降级前,后继地址可以提前生成。
  • “弃用”不是立即删除。弃用地址仍属有效地址,可继续承载既有通信,只是不应在存在合适首选地址时发起新通信;有效寿命结束后才进入无效状态。
  • 轮换不提供匿名、加密或认证。网络前缀、稳定地址、账户、Cookie、日志、流量特征以及链路上的观察仍能建立关联。

设想一张按源地址索引的故障表。同一台笔记本上午出现为一个 IPv6 地址,下午又出现为另一个。若工具把地址当成永久资产编号,它会把一次连续的问题拆成两台设备;若工具因两个地址曾经属于同一接口,就认定所有未来流量都来自同一用户,它又把临时观察夸大成了身份结论。

IPv6 临时地址的意义,正位于这两种误读之间。它让一个外部可见的接口标识符有期限,却没有消除主机、用户或网络的其他线索。

2001 年:把可更换地址加入接口

无状态地址自动配置把路由器通告的前缀与接口标识符组合成 IPv6 地址。早期做法可能从全球唯一的 IEEE 硬件标识符导出接口标识符。主机换到另一个网络时,前缀会变,但地址后半部分仍可能被认出。观察者无需知道姓名,也无需解密应用内容,只凭这个长期不变的值就能把不同地点的活动连接起来。

2001 年 1 月发布的 RFC 3041 增加了随时间变化的接口标识符,并由此生成额外的全局范围地址。这些地址主要用于发起出站会话,使用一段有限时间后被弃用,再由新地址替代。已经建立的连接可以继续使用旧地址,新连接则应转向新的临时地址。

这不是用随机地址替换接口上的一切地址。原有自动配置行为仍在,临时地址作为附加状态出现。隐私效果同时依赖三个动作:生成不同的地址、在发起通信时优先选择它、让这种优先权到期。只生成而不选择,外部仍会看到稳定地址;选择但永不过期,只是创造另一个长期标识符。

2007 年:把生成办法变成可管理策略

RFC 4941 于 2007 年 9 月取代 RFC 3041。它保留了“用于新出站会话、随后弃用、既有连接可延续”的主线,同时调整了实现边界。每一个临时地址都要执行重复地址检测,而非只检查同一接口标识符生成的一组地址中的第一个。用户获得按前缀启用或禁用临时地址的控制。实现可以为不同前缀使用不同接口标识符,生成算法也不再限定为 MD5。

但 RFC 4941 仍建议默认禁用临时地址。它给出的首选寿命默认值为一天,有效寿命默认值为一周。相同随机接口标识符默认还能用于同一接口上的多个前缀,借此减少主机需要加入的 solicited-node 多播组数量。这个选择降低了状态成本,却保留了跨前缀关联的可能。

2021 年:轮换本身也要避免形成规律

2021 年 2 月发布的 RFC 8981 是当前规范,并正式取代 RFC 4941。它取消了“默认禁用”的建议。主机上不同临时地址的接口标识符必须在统计上彼此不同,包括不同前缀和不同接口之间。DESYNC_FACTOR 不再只在系统启动时产生,而是为每一个新临时地址重新计算,使首选寿命不形成整齐、可预测的固定节拍。

RFC 8981 还把临时地址的默认最大有效寿命从七天缩短为两天,同时保留一天的默认首选寿命。变化并非单纯追求更频繁的随机数。跨前缀复用会泄露关联;固定周期会帮助预测接替时刻;过长有效期会让更多旧地址同时留在接口上。当前规范把这些都视为生命周期设计的一部分。

它还允许实现只配置临时地址,而不强制临时地址必须与稳定地址共存。因此,文章不能把“稳定地址一定存在”写成规范要求;同样,也不能看到一个临时地址就推断主机没有其他稳定状态。一个报文只展示了当时选择的源地址,不是接口的完整清单。

首选寿命与有效寿命

RFC 4862 给出了状态语义。地址处于首选状态时,上层协议可以不受限制地使用它。首选寿命结束后,地址进入弃用状态。此时不鼓励继续使用,但并未禁止:如果切换地址会破坏上层活动,既有通信可以继续把它作为源地址;发往这个地址的报文仍应正常处理。若存在合适的非弃用地址,新通信不应再选择它。

有效寿命是第二只时钟。有效寿命结束后,地址不再分配给接口,不能再作为出站源地址,也不能再被接收接口认作目的地址。把弃用等同于无效,会错误地宣称轮换立即终止连接;把有效等同于首选,又会错误地让旧地址继续承接新工作。

RFC 8981 因而要求在旧地址弃用前 REGEN_ADVANCE 时间开始再生成。产生接口标识符和完成重复地址检测并非瞬时动作,提前启动可让后继地址及时进入首选状态。正常情况下,一个前缀和接口最多有一个未弃用的临时地址,只有接替过程会短暂重叠。已经弃用但仍有效的地址可以继续存在,等待上层连接结束。

一天和两天只是可由用户调整的默认值。实际首选寿命与有效寿命还不能超过前缀通告的相应寿命。每地址随机产生的 DESYNC_FACTOR 会进一步缩短首选阶段。仅凭 RFC 默认值去推断某台设备何时换址,并不可靠。

网络位置发生有意义的变化时,生命周期也要重置。当接口连接到不同链路,RFC 8981 要求移除该接口现有临时地址,并为新链路生成新地址,使两个链路上的随机接口标识符不同。实现可以使用链路识别机制区分真正换网与同一链路的短暂掉线,避免无意义地反复生成。

被削弱的关联,以及没有消失的关联

IP 地址必须出现在报文头中,通信对端、路径上的设备以及保存日志的服务都能看到它。一个持续数月或数年的接口标识符,是极低成本的连接键。临时地址把这把长期钥匙切成若干较短区间:新出站会话倾向于使用当前首选地址,之后的会话改用后继地址。仅依赖接口标识符收集和拼接活动,成本因此上升。

这项收益是真实的,但范围有限。前缀可能长期不变,并指向一个家庭、办公室或只有极少主机的网络。稳定地址可能在其他流量中出现。DNS 名称、Cookie、账户登录、应用会话和对端日志都可把多个地址连在一起。默认路由器等同链路观察者能够看到主机使用的全部地址。路径上的观察者即使看不到加密载荷,仍能比较报文大小和时间。

临时地址没有加密报文头或内容,没有认证用户、设备或通信对端,也没有保证匿名。用户若在会话中登录,接收认证信息的一方就能把当时的临时地址与账户关联。轮换也不会撤回早先已经交出的地址、日志或应用标识符。

因此,正确的表述不是“地址变化后无法跟踪”,而是“一个特定观察者失去了一把长期、直接的接口标识符钥匙”。他是否仍能关联,要看前缀、位置、流量特征和应用层证据。

运营观察的边界

轮换会使排障、计费与安全策略更难。按地址聚合的日志可能把一台主机拆成多行。安全设备可能把高频生成误判为源地址伪造。多个同时有效的地址会占用邻居缓存和多播状态。要求多个会话共享同一源地址的应用,也可能在选择变化或旧地址无效时出错。

改进方法不是重新强制永久地址,而是给观察加上时间与上下文。一次有效记录至少应包含源地址、时间戳、前缀、接口或链路、当时的地址状态,以及必要时的传输流或已认证应用会话。一条中午出现的地址,是对那次通信的证据,不是永久设备名称。弃用地址仍承载旧连接,不代表轮换失败;旧地址最终无效,也不代表连接已经安全迁移。

控制权分散在多个参与者手中。路由器通告前缀寿命;主机负责生成、弃用和失效;管理员决定全局或按前缀启用;系统与应用参与源地址选择;对端和网络保存自己的观察。标准规定时钟,却没有让任何一方自动获得用户的全景身份。

IPv6 临时地址留下的历史经验很克制:隐私不必假装地址不可见,也可以从限制默认使用期限开始。真正被撤回的,是旧标识符对“下一次连接”的优先权。

来源