ping6.net
安全

IPv6 隐私扩展:阻止地址跟踪

IPv6 地址可以暴露你的 MAC 地址并在网络间跟踪你。隐私扩展解决了这个问题。以下是如何启用它们。

ping6.net2024年12月14日3 min read
IPv6隐私安全跟踪隐私扩展

IPv6 隐私扩展:阻止地址跟踪#

当你使用 IPv6 连接到网络时,你的设备可能正在广播从你的网卡 MAC 地址派生的永久标识符。这使你可以跨不同的网络和网站进行跟踪。

TL;DR - 快速摘要

要点:

  • EUI-64 地址派生会将你的 MAC 地址暴露在 IPv6 地址中,从而在网络间实现跟踪
  • 隐私扩展(RFC 4941/8981)生成用于出站连接的随机临时地址
  • 现代操作系统默认启用隐私扩展(Windows Vista+、macOS、Linux、iOS 4.3+、Android 8.0+)
  • 服务器、DNS 记录和网络设备需要稳定地址,应禁用隐私扩展
  • 隐私扩展仅保护接口 ID;你的 /64 前缀仍会暴露位置

跳转至: 隐私问题 | 工作原理 | 启用方法 | 何时不使用


隐私问题#

原始 IPv6 地址方案使用 EUI-64 从 MAC 地址生成接口 ID。你的网卡的 MAC 00:1a:2b:3c:4d:5e 成为你的 IPv6 地址的一部分,作为 021a:2bff:fe3c:4d5e

以下是转换的工作原理:

MAC 地址:    00:1a:2b:3c:4d:5e
插入 FF:FE:   00:1a:2b:ff:fe:3c:4d:5e
翻转第 7 位:   02:1a:2b:ff:fe:3c:4d:5e
接口 ID:   021a:2bff:fe3c:4d5e

第 7 位翻转(通用/本地位)是 EUI-64 标准的一部分。00 变成 02,因为该位指示地址是否全局唯一。

这会产生几个问题:

  • 跨网络跟踪:无论你是在家、在咖啡店还是在公共 WiFi 上,你的设备都携带相同的接口 ID
  • 持久识别:网站可以随时间关联访问,即使你清除 cookie
  • MAC 地址泄露:你的硬件标识符在每个数据包中暴露

与隐藏内部地址的 IPv4 的 NAT 不同,IPv6 通常直接为设备分配全局可路由的地址。没有隐私扩展,你就在到处广播相同的标识符。


隐私扩展的工作原理#

RFC 4941(由 RFC 8981 更新)引入了临时地址,取代 EUI-64 派生地址。你的设备不是使用你的 MAC 地址,而是生成随机接口 ID。

该机制创建两种类型的地址:

稳定地址:从你的 MAC 或随机种子生成。用于传入连接并保持网络一致。不用于出站流量。

临时地址:随机生成,用于出站连接,定期轮换(大多数系统上通常每 24 小时)。

当你浏览网页或进行出站连接时,你的操作系统使用临时地址。稳定地址保持可用于需要到达你的设备的服务。

你的设备同时维护多个 IPv6 地址:

2001:db8:1234:5678:021a:2bff:fe3c:4d5e  # 稳定(EUI-64 或稳定私有)
2001:db8:1234:5678:a4b2:c9d1:e3f4:5a6b  # 临时(当前活动)
2001:db8:1234:5678:1234:5678:9abc:def0  # 临时(已弃用,过期)

轮换自动发生。旧地址在完全过期之前进入「已弃用」状态,确保活动连接不会中断。


启用隐私扩展#

Windows#

从 Vista 开始,Windows 上默认启用隐私扩展。使用 PowerShell 验证:

Get-NetIPv6Protocol | Select-Object UseTemporaryAddresses

输出 2 表示为出站连接启用。手动配置:

# 启用临时地址
Set-NetIPv6Protocol -UseTemporaryAddresses Enabled
 
# 禁用(不推荐)
Set-NetIPv6Protocol -UseTemporaryAddresses Disabled

检查你的当前地址:

Get-NetIPAddress -AddressFamily IPv6 -PrefixOrigin RouterAdvertisement

临时地址显示倒计时的 Preferred 生命周期值。

macOS#

在现代 macOS 上默认启用。验证:

sysctl net.inet6.ip6.use_tempaddr

如果启用,返回 1。配置:

# 启用
sudo sysctl -w net.inet6.ip6.use_tempaddr=1
 
# 永久化
echo "net.inet6.ip6.use_tempaddr=1" | sudo tee -a /etc/sysctl.conf

临时地址生命周期(以秒为单位):

sysctl net.inet6.ip6.temppltime  # 首选生命周期
sysctl net.inet6.ip6.tempvltime  # 有效生命周期

Linux#

配置因发行版而异。大多数现代发行版默认启用隐私扩展,但请检查:

sysctl net.ipv6.conf.all.use_tempaddr
  • 0 = 禁用
  • 1 = 启用,优先公共地址
  • 2 = 启用,优先临时地址(推荐)

正确启用:

sudo sysctl -w net.ipv6.conf.all.use_tempaddr=2
sudo sysctl -w net.ipv6.conf.default.use_tempaddr=2

通过编辑 /etc/sysctl.conf 或创建 /etc/sysctl.d/99-ipv6-privacy.conf 永久化:

net.ipv6.conf.all.use_tempaddr = 2
net.ipv6.conf.default.use_tempaddr = 2

应用更改:

sudo sysctl -p

检查活动地址:

ip -6 addr show scope global

临时地址用 temporary 标志标记并显示 preferred_lftvalid_lft 值。

移动设备#

iOS:自 iOS 4.3 以来默认启用隐私扩展。无用户配置可用。

Android:在 Android 8.0+ 上默认启用。早期版本可能使用稳定地址。在设置 → 关于 → 状态中检查,尽管你通常无法禁用隐私扩展。


何时不使用隐私扩展#

隐私扩展破坏需要稳定地址的场景:

服务器和服务:如果你正在运行 Web 服务器、SSH 守护程序或任何需要传入连接的服务,请禁用隐私扩展或专门配置服务以绑定到稳定地址。

# Linux:禁用特定接口
sudo sysctl -w net.ipv6.conf.eth0.use_tempaddr=0

DNS 记录:你不能将 DNS 指向轮换地址。服务器需要稳定的 IP。

网络设备:路由器、防火墙和网络基础设施应使用稳定地址进行管理。

防火墙规则:如果你将特定地址列入白名单,临时地址会在轮换时中断。

日志记录和监控:跨地址更改关联日志变得困难。对于隐私不是问题的内部网络,稳定地址简化了故障排除。


超越隐私扩展#

隐私扩展仅保护接口 ID。你的 /64 前缀仍然暴露你的 ISP 和大致位置。其他措施:

支持 IPv6 的 VPN:通过 VPN 提供商的 IPv6 地址空间隧道所有流量。验证你的 VPN 实际上路由 IPv6 流量;许多完全禁用 IPv6,这会泄漏你的真实 IPv6 地址。

在连接到 VPN 时在 test-ipv6.com 测试泄漏。

前缀轮换:一些 ISP 定期轮换你的 /64 前缀。这很罕见且没有标准化。大多数住宅连接无限期保持相同的前缀。

Tor:Tor 在出口节点支持 IPv6,但许多中继仅支持 IPv4。即使你有 IPv6 连接,你的流量也可能通过 IPv4 退出。

NAT66:IPv6 的网络地址转换存在,但破坏了端到端原则并且有争议。不推荐。

最实用的组合:在客户端设备上启用隐私扩展 + 在需要时使用 VPN 进行完整地址屏蔽。

通过访问 ping6.net 并注意你的接口 ID 是否随时间变化(使用启用的隐私扩展应该)来检查你的当前隐私状况。

隐私扩展是应该在所有客户端设备上启用的基本安全措施。它们不是完美的保护,但它们消除了 IPv6 地址中最明显的跟踪向量。


相关文章#

亲自尝试

使用我们的 IPv6 验证器检查你的当前地址并验证隐私扩展是否正常工作。