我有一个静态 IPv6 /62 前缀,我在路由器(运行 Debian)上使用 radvd 将其中的 /64 通告到我的整个网络。除了我的路由器(即 ::1)之外,我让 EUI64 根据 MAC 地址设置后缀(即匹配自动 fe80:: 地址的后缀)。
出于隐私原因,大多数 Linux 都转而屏蔽此地址。我其实并不担心隐私问题,而且,我希望为 sshd 等服务提供一个完全可预测的 IPv6 地址。
理论上,这应该很容易配置。例如,在运行 Raspbian 的 Raspberry Pi 上,我在 /etc/sysctl.conf 文件中添加了:
###################################################################
# 启用 IPv6 EUI64
#
net.ipv6.conf.all.use_tempaddr=0
net.ipv6.conf.默认.use_tempaddr=0
net.ipv6.conf.eth0.use_tempaddr=0
唉,什么都没变。(最后一行是最后一次尝试;前两行确实应该单独起作用。)
这些操作系统中的某些东西阻止了 EUI64 运行。这是什么问题?如何启用它?
这台特殊的机器不是正在运行 NetworkManager,但其中一些是。
答案1
您混淆了两种不同的地址类型:
- 根据 RFC 4941“隐私扩展”生成的临时地址,
- 根据 RFC 7217“不透明接口标识符”生成的永久地址。
前者总是产生此外默认地址并且不要替换它,所以肯定不是你想要的。
后者确实取代了基于 EUI64 的默认地址,但它们不是暂时的与旋钮无关use_tempaddr
。相反,您需要更改主地址生成模式:
如果 SLAAC 由内核执行,请更改此 sysctl:
net.ipv6.conf.default.addr_gen_mode = 0 net.ipv6.conf.eth0.addr_gen_mode = 0
(查看源代码,它似乎没有
all.addr_gen_mode
实现。)如果 SLAAC 由DHCP服务器,请使用此
dhcpcd.conf
选项:slaac hwaddr
如果 SLAAC 由 NetworkManager 执行:
nmcli con modify "Connection name" ipv6.addr-gen-mode eui64