更新到15.10后,网络接口名称会更改 – udev更改

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

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

关于编辑或删除/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 服务器/etc/network/interfaces 网络接口卡,而XUbuntu没有。 也许它正在使用network-manager或其他东西。

在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

ArchWiki初学者指南提供了一种更简单的方法。

首先获取您的设备MAC地址

 $ ip link 

输出显示为喜欢

 3: wlan0:  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地址。

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

试试这个: 编辑你的/etc/default/grub 。 改变行

 GRUB_CMDLINE_LINUX="" 

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

最后运行:

 # update-grub 

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

我知道这可能有点晚了,10-network.rules的添加似乎有所帮助但并非完全。 我必须添加要重命名的设备的内核名称。 这是我如何让/etc/udev/rules.d/10-network.rules工作……

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

并将KERNEL ==“”更改为内核在引导时命名设备的内容。

HTH

KC

如果您有全新的安装

 apt-get remove biosdevname 

然后

 update-initramfs -u 

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

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

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

重启

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

 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"