我已经通过 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