是否可以配置 Linux 内核以自动获取RFC4941临时(隐私)IPv6 地址,无需获取RFC4862公共(基于 MAC)IPv6 地址?
通过在我的 Ubuntu 13.04 Linux 系统上进行以下 sysctl 设置,我获得了临时 IPv6 地址,但我也获得了基于 MAC 的公共 IPv6 地址:
net.ipv6.conf.eth0.autoconf=1
net.ipv6.conf.eth0.use_tempaddr=2
我不想要基于 MAC 的 IPv6 地址。我只想要临时隐私地址。我意识到这use_tempaddr=2
对更喜欢临时地址,但应用程序仍然可以bind()
使用基于 MAC 的地址或使用 sockopt IPV6_PREFER_SRC_PUBLIC
(参见RFC5014) 来覆盖此偏好。我预测,像 Adobe Flash 这样的应用程序将允许网站使用基于 MAC 的 IP 将其 Flash 应用程序回拨,这样人们无论走到哪里都更难以避免被营销人员(或政府)跟踪。
使用以下 sysctl 设置:
net.ipv6.conf.eth0.autoconf=0
net.ipv6.conf.eth0.use_tempaddr=2
我没有获得自动配置的 IPv6 地址。没有。
如何在不获取基于 MAC 的 IPv6 地址的情况下获取临时 IPv6 地址?
答案1
抱歉,不行。如果您想要临时地址,则必须使用无状态地址自动配置(您已经知道)或 DHCPv6,后者可以配置为从 DHCPv6 服务器请求临时地址。就您而言,DHCPv6 可能是您想要的方式,而且大多数主要 ISP 都在部署它。
答案2
使用较新的内核(或较新的 NetworkManager 版本),您可以启用RFC 7217地址生成模式,根据秘密种子提供稳定的地址。
对于 NetworkManager ≥ v1.2 的自动配置
NetworkManager 1.2 处理 autoconf 并自行分配地址。
$ nmcli con modify "Ethernet" ipv6.addr-gen-mode stable-privacy
可以通过 为所有新连接设置此项NetworkManager.conf
。
由内核自动配置
较旧的 NM 版本和非 NM 系统依赖内核来分配地址。新的 addrgenmode 可以通过 sysctl 激活:
net.ipv6.conf.default.stable_secret = 1d8b:4da9:888k:5a65:7aaa:7o2d:ce60:ec4e
当然,您需要生成自己的密钥:
$ head -c 16 /dev/urandom | xxd -p | sed "s/..../:&/g; s/://"
用于ip -d link
确保显示“addrgenmode stable_secret”。