网络接口名称在更新为15.10之后更改-udev更改


55

我将运行Ubuntu服务器15.04的虚拟机更新为刚刚发布的新稳定版15.10。

没有明显的问题,但是重新启动后,机器失去了网络连接。lspci显示正确的卡并lsmod证明已加载驱动程序。

关于编辑或删除的提示/etc/udev/rules.d/70-persistent-net.rules没有成功(仍然没有网络,没有新文件),著名的/lib/udev/write_net_rules甚至不存在。

我对udev和systemd的了解不多,所以花了一些时间在/ sys / class / net中发现网络接口名称已更改。它ens32从改名eth0。更改后,/etc/network/interfaces再次启用了网络通信。

但是-为什么会这样呢?如果发生这种情况,接口文件是否不应该自动更新?

现在,我删除了虚拟网卡并创建了另一个虚拟网卡,它eth0变为eno16777728,不是,很好。

这种行为(至少是升级过程的行为)是否应该报告为错误?

而且,现在/etc/udev/rules.d/70-persistent-net.rules过时了吗?并且(尽管只是部分相关)呢/etc/udev/rules.d/70-persistent-cd.rules?)

编辑-其他问题(在接受答案之后)/etc/network/interfaces来自实际接口名称 的依赖性使我感到困扰。我尝试在另一台虚拟机上安装新的* ubuntu。令我惊讶的是,仅/etc/network/interfaces包含对环回设备的引用。但是,对于我的原始VM,此更改阻止了网络启动。那我还需要改变什么?

编辑 好,从另一个测试中,我发现新的Ubuntu Server在中 具有网络接口卡/etc/network/interfaces,而XUbuntu没有。也许它正在使用network-manager或其他。


同一错误在17.04中再次出现。希望仅在预发行阶段。
avtomaton

Answers:


56

在Ubuntu 15.10(Wily Werewolf)中,从systemd / udev开始将为所有本地以太网,Wlan和Wwan接口()自动分配可预测的,稳定的网络接口名称。

udev现在支持以下网络接口的不同命名方案:

  1. 掺入固件/ BIOS名字车载设备提供的索引号(例如:eno1
  2. 掺入固件/ BIOS提供的PCI Express插槽热插拔索引号名称(例如:ens1
  3. 结合了硬件的连接器的物理/地理位置名称(例如:enp2s0
  4. 结合了接口的MAC地址的名称(例如:enx78e7d1ea46da
  5. 经典的,不可预测的内核原生ethX命名(示例:eth0)-已弃用

默认情况下,systemd现在将根据策略命名接口:

  1. 如果固件中的信息适用并且可用,请回退到
  2. 如果固件中的信息适用并且可用,请回退到
  3. 如果适用,则退回到
  4. 默认情况下不使用,但如果用户选择则可用。
  5. 在所有其他情况下。

您如何禁用此功能?

您基本上有以下选择:

  • 创建您自己的手动命名方案,例如,通过命名您的接口internet0或lan0。为此,创建您自己的udev规则文件并设置设备的name属性。确保在默认策略文件之前订购它,例如通过命名它/etc/udev/rules.d/70-my-net-names.rules
  • 更改默认策略文件,以选择其他命名方案,例如,默认情况下在所有接口名称的MAC地址后命名:cp /lib/udev/rules.d/80-net-setup-link.rules /etc/udev/rules.d/80-net-setup-link.rules,然后在此处编辑文件并根据需要更改行。
  • 通过net.ifnames=0内核命令行。

6
就是这个来源是什么?您能否在Ubuntu的官方发行说明页面中添加链接(我确定它在某处,找不到它!)
Rmano

2
是的,这就是来源。
kyodake

4
根本没有任何意义的是他做了升级,而不是全新安装。这听起来像一个实际的Ubuntu错误,因为升级应该使系统保持工作状态。
2015年

1
@kyodake在ubuntu 15.10中没有/ usr / lib / udev文件夹,在/ lib / udev中
EdiD '16

1
@EdiD:好的,已修复错误。
kyodake

39

ArchWiki入门指南告诉您一种更简单的方法。

首先通过以下方式获取设备的MAC地址

$ ip link

输出显示为喜欢

3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000     
          link/ether 20:68:9d:xx:xx:xx brd ff:ff:ff:ff:ff:ff

您设备的MAC地址是

20:68:9d:xx:xx:xx

只需创建文件(只需在文本编辑器中以sudo权限打开即可)

$ nano /etc/udev/rules.d/10-network.rules    

添加以下行

SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="aa:bb:cc:dd:ee:ff", NAME="net1"

将名称替换为所需名称,并将aa:bb:cc:dd:ee:ff替换为设备的MAC地址。

现在,只需重新启动计算机,设备名称应已更改。


最直接,最简单的解决方案!非常感谢!
3bdalla

1
为确保该规则不适用于您的VLAN和网桥接口,请在DRIVERS=="?*",之后添加ACTION=="add",。另请参见askubuntu.com/questions/767786/…–
唐恩·李

16

试试这个: 编辑您的/etc/default/grub。更改行从

GRUB_CMDLINE_LINUX=""

GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"

然后运行:

# update-grub

以root用户身份,然后重新启动系统。


这也适用于netboot。我成功在syslinux.cfg文件中的append语句中添加了以下内容: append (...) net.ifnames=0 (...)
carestad

该解决方案在Ubuntu 16.04上也非常完美!
Nullldata '16

我必须在上面添加(net.ifnames = 0)GRUB参数,并删除udev重命名规则,以使VLAN正常工作,但现在一切都很好。感谢您的解决方案。
艾伯特·韦利

谢谢。我正在无头服务器上安装Ubuntu Server 16.04,却不知道它为网络接口提供了什么名称,因此该服务器不在网络上。我这样做是为了确保/ etc / network / interfaces的接口名称为“ eth0”,并将驱动器放回服务器中。现在在线。就此而言,在Acer Aspire H340上安装Ubuntu的说明已过时,因此,我将写一些东西,希望其他尝试这样做的人不会浪费我太多的时间。
MetalMikester

5

我知道这可能有点晚了,添加10-network.rules似乎有所帮助,但不是完全。我必须添加设备的内核名称才能重命名。这是我使/etc/udev/rules.d/10-network.rules起作用的方式...

SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="MAC:ADDRESS",KERNEL=="enp4s8", NAME="eth0"

并将KERNEL ==“”更改为您的内核在设备启动时的命名。

高温超导

KC


3

如果您是全新安装

apt-get remove biosdevname

然后

update-initramfs -u

检查是否有udev net ruels文件。如果是这样,请将其删除。

rm /etc/udev/rules.d/70-persistent-net.rules

现在编辑/ etc / network / interfaces,将接口重命名为eth0,eth1等。

重启


2

我通过创建文件来完成此工作:

root@odroid:~# cat /etc/udev/rules.d/70-persistent-net.rules
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth0", NAME="eth0"
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.