linux配置ipv6隐私扩展需设内核参数use_tempaddr=2,再用nmcli保持ipv6.method为auto或manual,确保networkmanager不干扰临时地址生成,最后通过ip -6 addr验证temporary地址是否出现。

确认内核已启用 IPv6 隐私扩展支持
IPv6 随机标识符(即临时地址)依赖内核参数 `use_tempaddr`。需检查并设置以下两项:
- `net.ipv6.conf.all.use_tempaddr`:控制所有接口的全局策略
- `net.ipv6.conf.default.use_tempaddr`:作为新接口的默认值
推荐设为 2,表示“优先使用临时地址对外通信”,兼顾隐私与兼容性。执行命令:
sudo sysctl -w net.ipv6.conf.all.use_tempaddr=2<br>sudo sysctl -w net.ipv6.conf.default.use_tempaddr=2<br>sudo sysctl -p
若要永久生效,将两行写入 /etc/sysctl.conf 或独立文件如 /etc/sysctl.d/99-ipv6-privacy.conf。
确保 NetworkManager 不覆盖临时地址行为
NetworkManager 默认会管理 IPv6 地址生命周期,但若连接配置中启用了 `ipv6.ignore-auto-routes` 或禁用 `ipv6.addr-gen-mode`,可能干扰临时地址生成。建议显式保留默认行为:
- 不要设置 `ipv6.addr-gen-mode`(保持默认 `stable-privacy`)
- 避免设置 `ipv6.ignore-auto-routes=yes` 或 `ipv6.never-default=yes` 等限制性选项
- 确认 `ipv6.method` 为 `auto`(SLAAC + 临时地址)或 `manual`(手动地址 + 仍可生成临时地址)均可,只要 `use_tempaddr=2` 生效
例如,对 `eth0` 连接保持基础配置即可:
nmcli connection modify eth0 ipv6.method auto<br>nmcli connection modify eth0 autoconnect yes<br>nmcli connection up eth0
验证临时地址是否生成并活跃
重启网卡或等待几秒后,运行:
ip -6 addr show dev eth0 | grep "temporary\|dynamic"
若看到类似以下输出,说明隐私扩展已工作:
inet6 2001:db8::a1b2:c3d4:e5f6:7890/64 scope global temporary dynamic
注意:
• `temporary` 表示该地址是 RFC 4941 定义的隐私临时地址
• `dynamic` 表示由内核自动创建和轮换(通常每数小时更新一次)
• 它会与同前缀下的稳定地址(如 `stable-privacy` 或 SLAAC 地址)共存,但对外连接默认优先选 `temporary` 地址
可选:禁用稳定地址以强化隐私(谨慎操作)
若仅希望使用临时地址(完全避免基于 MAC 或 DAD 的稳定地址),可额外设置:
sudo sysctl -w net.ipv6.conf.eth0.addr_gen_mode=0
其中 `0` 表示 `eui64`(传统 MAC 派生,不推荐),而 `1` 是 `none`(禁用稳定地址生成)。但注意:
• `addr_gen_mode=1` 会导致无稳定地址可用,某些依赖固定 IPv6 的服务(如 DNS64、部分容器网络)可能异常
• 实际生产中更推荐保留 `stable-privacy`(默认值)+ `use_tempaddr=2` 组合,平衡隐私与可用性











