20.04 中的 Systemd-networkd 和 IPv6Token

20.04 中的 Systemd-networkd 和 IPv6Token

我最近一直在玩 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,我按照他的建议做了:

  1. 使用 /etc/netplan/50-cloud-init.yaml 中的以下配置禁用 netplan:

    network:
      version: 2
      renderer: networkd
    
  2. 在 /etc/systemd/network 中设置我的 .network 文件:

     [Match]
     Name=eth0
    
     [Network]
     IPv6Token=prefixstable:myprefix::
     DHCP=ipv4
    
  3. 运行 netplan 尝试测试,效果很好。

  4. 重新启动并且它仍然有效。

相关内容