我最近一直在玩 IPv6,但我的小 Ubuntu 盒子遇到了一个棘手的问题。Systemd-networkd(来自 systemd 245.4)应该理解这样的指令:
IPv6Token=prefixstable:my_prefix
其中 my_prefix 正是我的路由器在其 RA 中发送的内容,64 位,以双冒号 (::) 结尾,经 tcpdump 验证。我希望从中得到的是按照 RFC7217 中所述生成的 IPv6 地址,即低 64 位不基于我的 MAC 地址的稳定地址。
不幸的是,systemd-networkd 似乎不同意。它接受该指令而不加注释,但我仍然得到 EUI-64 地址。即使我将日志级别设置为调试,日志中也没有任何关于此的信息。我尝试了 my_prefix 中的其他形式,但 networkd 急切地告诉我这是错误的,但不是正确的,实际上工作。
我可以通过多种方式解决这个问题,所以我不寻找这个,但让它工作起来会最简单。
我查看了一下,但没有发现任何关于此问题的错误报告,所以我觉得它应该可以工作。有什么想法吗?
答案1
事实证明,是 netplan 干扰了我更改网络配置的尝试。因此,感谢 Usenet 上的 Marko Moock,我按照他的建议做了:
使用 /etc/netplan/50-cloud-init.yaml 中的以下配置禁用 netplan:
network: version: 2 renderer: networkd
在 /etc/systemd/network 中设置我的 .network 文件:
[Match] Name=eth0 [Network] IPv6Token=prefixstable:myprefix:: DHCP=ipv4
运行 netplan 尝试测试,效果很好。
重新启动并且它仍然有效。