升级到16.04后无法启动升级网络接口

我刚刚将虚拟14.04服务器机器升级到16.04。 重新启动VM后,我看到以下错误:

[FAILED] Failed to start Raise network interfaces. See 'systemctl status networking.service' for details 

登录后我可以运行上面提到的命令并获得以下输出(图像因为我无法连接):

在此处输入图像描述

/etc/network/interfaces看起来很好 – 具有手动配置的eth0(此处不使用dhcp)

让我疑惑的是ifconfig -a列表

  • ens160

我期待的地方

  • 为eth0

尝试通过提升eth0设备

 sudo ifup -v eth0 

输出:

 ... Cannot find device "eth0" Failed to bring up eth0. 

虚拟有线网络设备本身仍然像以前一样在VM本身中配置。

ip link显示了loens160 – 其中ens160在vmware中为单个配置的虚拟网络设备配置了mac地址。

UPDATE

如果我将/etc/network/interfaces中eth0的所有引用更改为ens160,我能够解决问题。

但是 – 由于以下几个原因,这对我来说是错误的:

  1. 我想了解这个问题
  2. 我想坚持eth0而不是ens160

所以请有人解释这个改变,这个改变并没有发生在同一台服务器上的其他几台14.04机器上,我也升级到了16.04。

原因

问题是由systemd / udev的Predictable-Network-Interface-Names引起的。

可能的方案

根据这个来源,您可以:

  • 您禁用固定名称的分配,以便再次使用不可预测的内核名称。 为此,只需屏蔽udev的默认策略规则文件:ln -s / dev / null /etc/udev/rules.d/80-net-setup-link.rules
  • 您可以创建自己的手动命名方案,例如通过命名接口“internet0”,“dmz0”或“lan0”。 为此,在/ etc / systemd / network /中创建自己的.link文件,为您的一个,部分或全部接口选择显式名称或更好的命名方案。 有关更多信息,请参见systemd.link(5)。
  • 您在内核命令行上传递net.ifnames = 0

应用解决方案

我在/etc/udev/rules.d/创建了一个新文件10-rename-network.rules并添加了以下内容:

 SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="ff:ff:ff:ff:ff:ff", NAME="eth0" 

哪里

  • eth0 =所需的网络接口名称,在/etc/network/interfaces
  • ff:ff:ff:ff:ff:ff =网络设备的硬件mac地址

我建议在完成此操作后重新启动,以确保更改是粘性的。

通过更改文件/etc/network/interfaces.d/setup解决了以下问题:

 auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp 

至:

 auto lo iface lo inet loopback allow-hotplug eth0 iface eth0 inet dhcp 

在我的情况下,这个问题与尝试启动我的桥梁br0 。 我忘记这样做了:

 sudo apt-get install bridge-utils 

之前,所以我的适配器无法启动。

您可能希望删除/修改udev缓存以获取持久/一致的网络接口名称,位于: /etc/udev/rules.d/70-persistent-net.rules