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


14

我正在使用具有两个物理网卡的无头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

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


1
我认为/ etc / systemd / network将是创建此文件的最佳位置。
NGRhodes

@NGRhodes我根据所引用的示例假设有错字,但谁知道呢?
年长者极客

另外,请检查networkmanager是否未运行,superuser.com
a / 948996/127393

悬赏后,我注意到16.04中有一个新的udev规则文件,该文件始终咨询网络连接之前强制对USB适配器的MAC地址类型命名(/lib/udev/rules.d/73-usb-net-by -mac.rules)。这根本感觉不对……我不得不完全禁用其规则,这使得.link文件再次起作用。不过,我不确定这是否是最正确的选择。
Antti Haapala'9

MACAddress= [Match]link文件中,我也无法使用,因此我最终Path=改为使用。您也应该尝试。您也可以link使用udevadm test-builtin net_setup_link /sys/class/net/enp5s0f1命令检查哪个文件与您的设备匹配
webKnjaZ

Answers:


8

这可能有帮助,也可能没有帮助。.我将检查/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”将名称更改为所需名称


对了 我正要发布一个答案,其中我提到有趣的是,有一些使用Ubuntu的人说@muffel的更改其网络名称的方法不起作用。这就是我要建议的... +1
匿名

赏金应该到这里去。
EKons,2016年

5

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

例:

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

在上面的示例中,peth0是原始接口名称,而eth0是所需名称。插入您当前具有的名称peth0,以及您想要的名称eth0。不需要或建议不重新启动。对第二张接口卡重复该过程

在Ubuntu 16.04上使用内核4.4.0-36-通用#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的相同名称的符号链接会禁用该配置文件完全(被“屏蔽”)”。<-来源


我对您的回复非常有用,谢谢+ 1 @ElderGeek

1
@Alberto我很高兴它有所帮助!
年长者怪杰

可悲的是,它不是持久性的,但仍然是+ 1
delfiler

@delfiler谢谢您的评论。如果我对您的理解正确,那么您正在寻找一种可以在重启后仍然有效的解决方案。我清楚吗?
极客长老


3
  • 所有三种自定义命名方法(在systemd中进行了解释):可预测的网络接口名称与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的情况。


1

您需要initrd使用类似的内容进行更新update-initramfs -k all -c,因为udev在运行时已经应用了这些配置initrd

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


1
奇怪的是,此16.04系统确实如此。啊,但这是一个升级的系统。您是正确的,它不是在全新安装中。
年长者极客

0

我没有足够的声誉来发表评论,但仅添加到已标记的答案中,Ubuntu 16.04的干净安装不会包含/etc/udev/rules.d/70-persistent-net.rules文件。但是,如果您手动创建它,则可以添加一行,如此处的答案所示,该行应与旧版本中的行一样,但有一个明显的区别-KERNEL参数应指定为分配给介面预设。例如,如果系统将接口命名为“ ens160”,而您想将其更改为“ eth0”,则该行可能类似于:

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="xx:xx:xx:xx:xx:xx", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="ens160", NAME="eth0"

这告诉规则仅在与指定的MAC(在ATTR {address}参数中)匹配且内核名称与KERNEL参数匹配的接口上匹配。或者,您可能会完全省略KERNEL参数,并且该参数也应该起作用。

编辑:就像已经提到的,如果您想使用.link文件方法,则需要更新initramfs使其生效。还要注意,自定义.link文件应该在/ etc / systemd / network中创建,而不是在/ lib / systemd / network中创建(两种方法都可以,但是最佳做法是使用/ etc / systemd / network,因为这就是它的作用-到允许自定义.link文件覆盖/ lib / systemd / network中的默认设置)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.