使用 addrlabel 和 netplan 选择 IPv6 源地址

使用 addrlabel 和 netplan 选择 IPv6 源地址

我已经通过 netplan 配置了我的 Ubuntu 22.04,如下所示:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      addresses:
        - 192.168.10.10/24
        - 2001:db8:6789::10/64
      gateway4: 192.168.10.1
      gateway6: 2001:db8:6789::1
      nameservers:
          search: [example.com]
          addresses: ['2001:db8:6789::5', 192.168.10.5]

这很有效,我的客户端获得了静态 IPv6 和动态 IPv6。默认情况下,后者是首选源,这对于在互联网上使用服务时的隐私性很有好处。

但是,当我在 LAN 上使用服务(尤其是 NFS)时,我想使用客户端的静态 IPv6。我可以使用以下两个命令使其工作:

ip addrlabel add prefix 2001:db8:6789::5/128 label 99     # NFS server
ip addrlabel add prefix 2001:db8:6789::10/128 label 99    # NFS client

但是我怎样才能使其永久存在,以便在启动之前(也在启动时)addrlabel设置它?nfs-mounts

答案1

netplan 0.100 及更高版本支持label此功能,详情请见https://netplan.readthedocs.io/en/latest/netplan-yaml/#properties-for-all-device-types。Ubuntu 22.04 包含 netplan 0.105,因此支持此功能。

答案2

回答我自己的问题:

首先,Netplan 是不是(systemd-)networkd 或 NetworkManager 的替代方案。Netplan 是一个“网络配置抽象渲染器”,对于上面的例子,netplan 实际上根据 netplan-configuration 创建了一个 systemd-networkd 文件。它保存为/run/systemd/network/10-netplan-enp3s0.network,内容为:

[Match]
Name=enp3s0

[Network]
LinkLocalAddressing=ipv6
Address=192.168.10.10/24
Address=2001:db8:6789::10/64
Gateway=192.168.10.1
Gateway=2001:db8:6789::1
DNS=192.168.10.5
DNS=2001:db8:6789::5
Domains=example.com

因此,为了添加ip addrlabel到我的配置中,我必须创建自己的 systemd-networkd-networkfile。它还需要(按词汇顺序)位于 netplan 自动生成的文件之前。

我的解决方案是创建/etc/systemd/network/01-enp3s0.network以下内容:

[Match]
Name=enp3s0

[Network]
LinkLocalAddressing=ipv6
Address=192.168.10.10/24
Address=2001:db8:6789::10/64
Gateway=192.168.10.1
Gateway=2001:db8:6789::1
DNS=192.168.10.5
DNS=2001:db8:6789::5
Domains=example.com

[IPv6AddressLabel]
Label=99
Prefix=2001:db8:6789::5/128

[IPv6AddressLabel]
Label=99
Prefix=2001:db8:6789::10/128

相关内容