用systemd重命名Ubuntu 16.04中的网络接口失败

我正在使用无头Ubuntu 16.04 LTS服务器和两个物理网卡,名为enp5s0f0和enp5s0f1。

我想重命名这些接口,并按照这个例子 。 因此,我创建了文件/lib/systemd/network/70-myinterface.link (原始源似乎不起作用),这样(我设置了正确的mac地址):

 [Match] MACAddress=12:34:56:78:9a:bc [Link] Name=dmz0 

并重新启动服务器。 不幸的是,即使udevadm显示我的配置文件被使用,接口也没有被重命名:

 $ udevadm info /sys/class/net/enp5s0f1 P: /devices/pci0000:00/0000:00:02.0/0000:01:00.0/0000:02:02.0/0000:05:00.1/net/enp5s0f1 E: DEVPATH=/devices/pci0000:00/0000:00:02.0/0000:01:00.0/0000:02:02.0/0000:05:00.1/net/enp5s0f1 E: ID_BUS=pci E: ID_MODEL_FROM_DATABASE=80003ES2LAN Gigabit Ethernet Controller (Copper) E: ID_MODEL_ID=0x1096 E: ID_NET_DRIVER=e1000e E: ID_NET_LINK_FILE=/lib/systemd/network/70-myinterface.link <-- my file E: ID_NET_NAME_MAC=enx123456789abc E: ID_NET_NAME_PATH=enp5s0f1 E: ID_OUI_FROM_DATABASE=Intel Corporation E: ID_PATH=pci-0000:05:00.1 E: ID_PATH_TAG=pci-0000_05_00_1 E: ID_PCI_CLASS_FROM_DATABASE=Network controller E: ID_PCI_SUBCLASS_FROM_DATABASE=Ethernet controller E: ID_VENDOR_FROM_DATABASE=Intel Corporation E: ID_VENDOR_ID=0x8086 E: IFINDEX=3 E: INTERFACE=enp5s0f1 E: SUBSYSTEM=net E: SYSTEMD_ALIAS=/sys/subsystem/net/devices/enp5s0f1 E: TAGS=:systemd: E: USEC_INITIALIZED=1900192 

你知道为什么重命名不起作用吗?

这可能会或可能没有帮助..我会检查/etc/udev/rules.d,看看你是否有70-persistent-net.rules。 您应该能够使用该文件重命名它们

我看起来像这样:

 SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="e0:cb:ee:d7:ff:9a", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" 

如果您在此文件中有卡片条目,您可以通过更改“NAME = TheNameYouWant”将名称更改为您想要的名称

  • 解释为systemd:Predictable Network Interface Names的所有三种自定义命名方法都与udev规则相关。

    systemd .link的&udev规则具有文件夹优先级。 /etc覆盖/run覆盖/lib

    所以检查当前的设置。

     # links ls -l /*/systemd/network/ # rule that read links ls -l /*/udev/rules.d/80-net-setup-link.rules # rule that check for /etc/.../80-net-setup-link.rules & net.ifnames ls -l /*/udev/rules.d/73-usb-net-by-mac.rules 

    在这些udev规则(添加/删除覆盖文件)的任何更改生效后,应更新引导RAM磁盘:

     sudo update-initramfs -u 

    默认情况下,这些是您可能找到的唯一文件

     ~$ ls -l /*/systemd/network/ /etc/systemd/network/: total 0 /lib/systemd/network/: total 12 -rw-r--r-- 1 root root 404 Jul 12 17:28 80-container-host0.network ##(virtual-interface) -rw-r--r-- 1 root root 482 Jul 12 17:28 80-container-ve.network ##(virtual-interface) -rw-r--r-- 1 root root 80 Jul 12 17:28 99-default.link ~$ ls -l /*/udev/rules.d/80-net-setup-link.rules -rw-r--r-- 1 root root 292 Jul 12 17:28 /lib/udev/rules.d/80-net-setup-link.rules ~$ ls -l /*/udev/rules.d/73-usb-net-by-mac.rules -rw-r--r-- 1 root root 551 Jul 12 16:37 /lib/udev/rules.d/73-usb-net-by-mac.rules 

    我已经在VBox 16.04安装中测试了所有这些,如下面的链接所示,所有方法都按预期工作:

    Ubuntu 16.04复杂的接口名称

  • /etc/udev/rules.d/70-persistent-net-rules来自较旧的版本,取而代之的是systemd .link的(但它们不是自动创建的),我在这里添加它以检查其存在是否存在特定问题但不适用于AnttiHaapala ‘案件。

一个不需要与Ubuntu 16.04以及许多其他Linux版本一起使用的udev规则(systemd-networkingd .link文件的替代方案)的选项是

例:

 ifconfig peth0 down ip link set peth0 name eth0 ifconfig eth0 up 

在上面的示例中,peth0是原始接口名称,eth0是所需名称。 插入当前peth0所在的名称以及eth0所在的名称。 无需重新启动或建议。 对第二个接口卡重复此过程

在Ubuntu 16.04上测试,内核为4.4.0-36-generic#55-Ubuntu

编辑:如果您正在寻找可以在重新启动后继续使用的持久解决方案,请参阅更改网络接口名称Ubuntu 16.04

资料来源: https : //www.freedesktop.org/software/systemd/man/systemd.link.html

http://kernelpanik.net/rename-a-linux-network-interface-without-udev/

测试。

注意:由于@ antti-haapala方法之前工作并突然停止,您可能有兴趣知道“作为一种特殊情况,空文件(文件大小为0)或同名的指向/ dev / null的符号链接会禁用配置文件完全(它被“蒙面”)“。 < -源

您需要使用update-initramfs -k all -c更新initrd ,因为udev在运行initrd已经应用了这些配置。

Ubuntu 16.04不再具有70-persistent-net-rules文件。