使用 systemd 重命名网络接口

使用 systemd 重命名网络接口

我想在 Fedora 22 上将由 systemd-networkd(版本 219)管理的网络接口从系统分配的名称重命名enp2s0wan。为此,我创建了以下文件/etc/systemd/network/80-wan.link

[Match]
MACAddress=mac-address
[Link]
Name=wan

但是,这对系统没有影响。重启后,名称仍然是enp2s0。我看到udevadmudev 选择了文件进行配置,但忽略了提供的名称:

~> udevadm info /sys/class/net/enp2s0 
P: /devices/pci0000:00/0000:00:1c.1/0000:02:00.0/net/enp2s0
E: DEVPATH=/devices/pci0000:00/0000:00:1c.1/0000:02:00.0/net/enp2s0
E: ID_BUS=pci
E: ID_MM_CANDIDATE=1
E: ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
E: ID_MODEL_ID=0x8168
E: ID_NET_DRIVER=r8169
E: ID_NET_LINK_FILE=/etc/systemd/network/80-wan.link
E: ID_NET_NAME_MAC=enxMacAddress
E: ID_NET_NAME_PATH=enp2s0
E: ID_OUI_FROM_DATABASE=Shuttle Inc.
E: ID_PATH=pci-0000:02:00.0
E: ID_PATH_TAG=pci-0000_02_00_0
E: ID_PCI_CLASS_FROM_DATABASE=Network controller
E: ID_PCI_SUBCLASS_FROM_DATABASE=Ethernet controller
E: ID_VENDOR_FROM_DATABASE=Realtek Semiconductor Co., Ltd.
E: ID_VENDOR_ID=0x10ec
E: IFINDEX=2
E: INTERFACE=enp2s0
E: SUBSYSTEM=net
E: SYSTEMD_ALIAS=/sys/subsystem/net/devices/enp2s0
E: TAGS=:systemd:
E: USEC_INITIALIZED=24183

即使在激活 udev 调试输出后,任何日志中也没有提及新名称wan。我做错了什么?

答案1

至少在 Debian stretch 上,似乎需要将update-initramfs -u && reboot文件*.link放入/etc/systemd/network/才能使现有接口生效。

似乎网络接口在启动过程中很早就从 initramfs 中重命名了,*.link在文件/etc/systemd/network可用之前……一旦接口被重命名一次(/sys/class/net/*/name_assign_type=4),那么udev-builtin-net_setup_link将不再发射ID_NET_NAME 因为 should_rename返回false

答案2

您使用的是 吗systemd-networkd?我认为这些.link文件只有在您使用时才有意义(而不是默认的 NetworkManager 或旧版启动脚本)。(不过,我承认我还没有深入研究过它。)

我认为你想要的是一个.rules文件/etc/udev/rules.d,类似于

SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="mac-address", NAME="wan"

mac-address当然,你的实际十六进制 MAC 地址在哪里)。

此文件需要订购 /usr/lib/udev/rules.d/80-net-setup-link.rules, 所以上游文档建议/etc/udev/rules.d/70-my-net-names.rules

答案3

由于某些不好的原因,networkmanager 似乎比 networkd 具有优先级(谁能想到呢?)。您可以按如下方式进行测试:

  • systemctl stop NetworkManager
  • 拔下网络接口
  • ip addr

结果:/etc/systemd/network/*.link 规则得到遵守

如果你启动 NetworkManager 并重复测试,/etc/systemd/network/*.link 将不再有效。我使用MACAddressPolicy=random指令进行了测试

相关内容