早期 IPv6 地址会内嵌网卡的 MAC 地址,让设备跨网络被追踪。本文讲解隐私扩展、RFC 8981 临时地址与 RFC 8064 如何堵上这个漏洞。
早期的 IPv6 地址分配方式,把一个隐私缺陷直接写进了标准本身:设备地址会内嵌网卡的 MAC 地址,而这个值永远不变。这意味着你 IPv6 地址的后 64 位,在你连接的每一个网络中都完全相同——无论是在家、在咖啡馆还是在机场——这就让你接触过的每一个网站和网络运营商,都能借此再次认出你的设备,甚至不需要 Cookie。隐私扩展正是为了堵住这个漏洞而设计的:用一个会随时间轮换的标识符,取代这个固定不变的标识。
核心要点
- 早期的无状态地址自动配置(SLAAC)会通过 RFC 4291 定义的「改进型 EUI-64」格式,从网卡的 MAC 地址推导出 IPv6 地址的后 64 位——这是一个全局唯一、永不改变的值。
- 固定不变的接口标识符,会让设备在加入的每一个网络中都能被重新识别——即使没有 Cookie,因为同一个 64 位后缀会跟着硬件走遍所有地方。
- RFC 8981 规定的隐私扩展会生成随机的临时地址并按计划轮换,用它来代替基于 MAC 地址生成的地址发起对外连接。
- 现代系统还补上了问题的另一半:RFC 8064 明确要求节点不要把固定的链路层地址嵌入标识符,因此如今连那个不轮换的地址也改用 RFC 7217 的方法生成——在同一个网络内保持稳定,换一个网络就完全不同。
- 大多数现代消费级操作系统默认启用隐私扩展,但轮换只隐藏了接口标识符——你的 IPv6 网络前缀依然会暴露你的 ISP 和大致位置,这一点和 IPv4 地址是一样的。
- 你可以通过 BrowserInsight 的 IP 情报和指纹检测工具,准确查看你当前的连接暴露了什么。
早期 IPv6 地址是如何被设计成可追踪的
一个 IPv6 地址长 128 位,通常拆分为 64 位的网络前缀(由你的 ISP 或路由器分配,标识你所在的网络)和 64 位的接口标识符(标识该网络下的具体设备)。在最初的 SLAAC 方案下,设备会用 RFC 4291 定义的「改进型 EUI-64」方法,自动从网卡的 MAC 地址生成接口标识符:把 48 位的 MAC 地址一分为二,在中间插入固定的 FFFE,再翻转一个比特位。得到的这个 64 位值完全来自设备自带的硬件,且永远不会被重新分配。
这种设计对无状态自动配置来说非常实用——不需要 DHCP 服务器来分发地址——但它带来了一个不可避免的副作用。由于 MAC 地址全局唯一且永久不变,由此生成的接口标识符也是如此。把你的笔记本电脑从家里带到图书馆、再带到酒店,IPv6 地址中的网络前缀每次都会随新网络而变化,但最后 64 位每次都完全相同。任何记录了你 IPv6 地址的网站、广告网络或网络运营商,都能通过这个固定后缀,把毫不相关的会话和地点关联起来,构建出一个你从未同意过、却像永久追踪 Cookie 一样有效的持久标识符。
临时地址:隐私扩展如何轮换你的身份
隐私扩展最早由 RFC 4941 规定,后被当前标准 RFC 8981 更新替代,它的解决办法是在固定地址之外,再生成一种地址。操作系统不再从 MAC 地址推导接口标识符,而是用一个以本地保存的种子值启动的伪随机算法生成它,并周期性地丢弃旧值、生成新值。
每个临时地址都带有两个生命周期:
- 首选生命周期——RFC 8981 给出的默认值是 1 天——过后该地址被标记为弃用:已建立的连接可以继续使用它,但新的对外连接会改用更新的地址。
- 有效生命周期——RFC 8981 给出的默认值是 2 天——过后该地址会被彻底废止,无法再使用。
这是标准给出的默认值,而且可以自行配置。更早的 RFC 4941 把有效生命周期默认设为整整一周,一些实现至今仍沿用这个更长的值,这也是为什么你几天前见过的临时地址可能还留在网卡上。真正决定追踪难度的是首选生命周期,因为它决定了网站实际看到的那个地址多久换一次。
操作系统会在当前地址过期之前预先生成新的临时地址,因此始终有一个新地址随时可以接管对外连接,不会造成中断。与之配套的固定地址并不会消失——它通常仍会用于接收连接和本地网络服务——但在启用隐私扩展的情况下,你主动发起的对外连接会以轮换中的临时地址作为源地址,而这正是追踪风险真正存在的地方。
修复的另一半:固定地址也不再取自你的 MAC
轮换的临时地址解决了对外流量的问题,但如果设备同时还配置了一个由 MAC 地址推导出的固定地址,它在加入的每一个网络里依然会亮出一个永久标识符。后续的两份标准补上了这个缺口。
RFC 7217 定义了另一种生成方式:把设备本地保存的一个密钥与所在网络的前缀混合起来,算出接口标识符。这样得到的地址在同一个网络内部是稳定的——需要固定地址的服务照常可用——但换一个网络就完全不同,从而切断了当初让 EUI-64 方案沦为追踪途径的跨网络关联。RFC 8064 随后把这一点定为面向所有设备的建议:节点「不应(SHOULD NOT)采用把固定链路层地址嵌入接口标识符的 IPv6 地址生成方案」,固定地址应默认改用 RFC 7217 的方法。为此,它更新了包括 RFC 4291 在内的十多份文档。
实际结果是:在当下的操作系统上,你通常会在一块网卡上看到两个地址,而且两个都不是从 MAC 地址推导出来的——一个是按网络生成的固定地址,一个是轮换的临时地址。隐私扩展和 RFC 7217 是互补关系:前者让你在不同会话之间无法被串联,后者让你在不同网络之间无法被串联。
检查你的设备是否已启用隐私扩展
如今在大多数消费级操作系统上,隐私扩展默认是启用的——Windows、macOS、iOS 和 Android 都会自动生成并优先使用临时地址。真正因情况而异的是 Linux:内核自身的 use_tempaddr 默认是关闭的,你能不能拿到临时地址,取决于你所用发行版的网络管理组件或 sysctl 默认值怎么设。服务器操作系统和精简的 Linux 配置则更可能干脆关掉这项功能,因为服务器通常需要一个稳定、可预测的地址,而不是不断轮换的地址。
最直接的检查方式,是查看你自己的地址:
- 在命令行中,
ipconfig /all(Windows)或ip -6 addr show(Linux)会同时列出「临时」地址和「永久/稳定」地址(如果隐私扩展已启用);macOS 也可以通过ifconfig看到类似的输出。 - 在浏览器中,BrowserInsight 的 IP 情报工具会显示网站实际能看到的你当前连接的 IPv6 地址,让你无需在操作系统网络设置里翻找,就能确认对外流量到底用的是哪一个地址。
如果你只看到一个 IPv6 地址,而且它看起来是从硬件推导出来的(接口标识符中间是 ff:fe),那么隐私扩展就是关闭的,该设备正在向它加入的每一个网络展示同一个可被追踪的后缀。
不过反过来推就不成立了:地址里没有 ff:fe,并不能证明你用的是临时地址。有了 RFC 7217,如今的固定地址看上去同样像是随机的。真正能区分两者的判据是它会不会变——RFC 7217 固定地址只要你还连在这个网络上就一直不变,而临时地址会按自己的节奏被换掉。
隐私扩展 vs VPN:两者到底各自隐藏了什么
很容易以为轮换的 IPv6 地址和 VPN 做的是同一件事,但其实不然,这个差异很重要。隐私扩展只会随机化接口标识符——地址中与设备相关的那一半。网络前缀——由你的 ISP 分配的那一半——无论接口标识符轮换多少次都保持不变,仅凭这个前缀,就足以让 IP 地理定位大致判断出你所在的 ISP 和地区,和普通 IPv4 地址的情况完全一样。轮换的临时地址能阻止设备被固定后缀跨会话重新识别,但对隐藏你所连接的 ISP 或大致位置毫无作用。
VPN 的工作方式则不同:它会替换掉你整个 IP 地址,包括前缀在内,换成 VPN 服务器的地址,因此位置信号和任何与设备相关的后缀,都会一并隐藏在隧道自己的地址背后。这也是为什么网站如何检测 VPN 和代理及你被屏蔽的原因这篇文章完全没有涉及接口标识符——VPN 检测针对的是整个 IP 地址,而不是隐私扩展专门要解决的设备追踪角度。如果你正在用隧道,又想知道它究竟对外呈现了什么,BrowserInsight 的 VPN/代理检测会针对网站看到的那个 IP,逐项测试那些常见的、会把真实地址泄露出去的通道。
对比:IPv6 隐私扩展 vs VPN
| IPv6 隐私扩展 | VPN | |
|---|---|---|
| 隐藏的内容 | 与设备相关的接口标识符(会轮换) | 整个 IP 地址,包括网络前缀 |
| 不会隐藏的内容 | ISP 与大致位置(网络前缀保持不变) | 默认情况下什么都不隐藏——只是换成另一个同样可追踪的地址 |
| 是否默认启用 | 大多数消费级操作系统上是 | 否——需要安装并连接客户端 |
| 主要防护对象 | 通过固定地址后缀实现的跨会话设备重新识别 | 基于 IP 的地理定位、ISP 可见性、基于 IP 的封锁 |
| 轮换方式 | 自动、按计划(数小时到数天) | 手动——只有重新连接或切换服务器时才会改变 |
两者是互补的,而非可以互相替代:隐私扩展解决的是一个大多数人根本不知道存在的、底层的特定追踪途径,而 VPN 解决的是更宏观的问题——你的 IP 到底暴露了你是谁、身在何处。
如何检查并降低你的暴露程度
- 确认隐私扩展已启用。 在操作系统网络设置或命令行输出中,查找一个不同于 MAC 派生地址的「临时」IPv6 地址;如果未启用,就开启相应设置(大多数操作系统会在网络/隐私设置中提供类似「使用临时地址」的选项)。
- 查看你当前连接暴露了什么。 BrowserInsight 的 IP 情报工具会显示网站在你当前会话中实际能看到的 IPv6(或 IPv4)地址和网络信息。
- 记住网络前缀依然可见。 如果你真正担心的是 ISP 级别的位置暴露,而不是跨会话的设备追踪,那么仅靠隐私扩展并不能解决这个问题——参见IP 地理位置定位:精度与隐私的平衡,了解无论地址如何轮换,你的网络前缀都会暴露些什么。
- 如果还需要隐藏网络前缀,可以叠加使用 VPN。 VPN 和 IPv6 隐私扩展解决的是不同的问题,二者可以同时使用,互不冲突。
常见问题
IPv6 隐私扩展能取代 VPN 吗?
不能。隐私扩展只会轮换 IPv6 地址中与设备相关的那部分;你的 ISP 分配的网络前缀——揭示你大致位置和运营商的那一半——始终保持不变。而 VPN 会替换掉整个地址,包括前缀在内。
IPv6 隐私扩展默认是开启的吗?
在大多数消费级设备和操作系统上是的——Windows、macOS、iOS 和 Android 都默认启用。Linux 则没那么统一:内核默认是关闭的,最终取决于你所用发行版怎么配置。服务器和精简的 Linux 配置通常会关闭它,因为对这些使用场景来说,稳定的地址更方便。
临时地址多久变化一次?
RFC 8981 给出的默认值是首选生命周期 1 天、有效生命周期 2 天,也就是说通常每天生成一个新的临时地址,旧地址再过一天左右彻底废止。这两个值都可以配置,而且一些实现至今仍沿用 RFC 4941 时代长达一周的有效生命周期,因此废止流程可能拖得更久。
我的 IPv6 地址里没有 ff:fe,是不是说明隐私扩展开着?
不一定。自 RFC 8064 起,设备配置的那个固定地址同样不再取自 MAC 地址,而是用 RFC 7217 的方法生成,所以它看上去也是随机的。没有 ff:fe 只能说明这个地址不是 EUI-64 推导出来的,并不能说明它会轮换。要确认,得看是否同时存在第二个临时地址,或者你对外呈现的地址是否会随时间改变。
关闭 IPv6 能彻底避免这个问题吗?
关闭 IPv6 确实能消除接口标识符这一特定的追踪途径,但你仍会被你连接所暴露的 IPv4 地址和其他指纹信号识别出来。这并不是一个通用的隐私解决方案,只是避开了这一种特定机制而已。
结语
早期 IPv6 地址设计中基于 MAC 地址生成的接口标识符,是一条悄无声息的、协议层面的追踪途径,它与 Cookie 或指纹脚本毫无关系——仅仅因为地址格式的规定,它就会跟随设备走遍加入过的每一个网络。隐私扩展通过自动轮换这个标识符,专门堵上了这个漏洞,而且如今在几乎所有重要场景下都默认启用;RFC 8064 又把 MAC 地址从固定的那一半里也拿掉,算是把这件事做完了。它们做不到的是隐藏你的 ISP 或大致位置,因为那部分信息存在于网络前缀,而不是接口标识符——要处理这一层暴露,你仍然需要审视你的 IP 地址整体究竟揭示了什么。
推荐阅读:


