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

duf*_*fte 32 networking ethernet 16.04

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

[FAILED] Failed to start Raise network interfaces.
 See 'systemctl status networking.service' for details
Run Code Online (Sandbox Code Playgroud)

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

在此处输入图片说明

中的配置/etc/network/interfaces看起来不错 - 具有手动配置的 eth0(此处不使用 dhcp)

让我想知道的是ifconfig -a列表

  • ens160

我期望的地方

  • eth0

尝试通过以下方式启动 eth0 设备

sudo ifup -v eth0 
Run Code Online (Sandbox Code Playgroud)

输出:

...
Cannot find device "eth0"
Failed to bring up eth0.
Run Code Online (Sandbox Code Playgroud)

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

ip link节目以及loens160-其中ens160具有在vmware配置用于所述单个配置虚拟网络设备的MAC地址。

更新

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

但是- 这对我来说是错误的,原因有几个:

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

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

duf*_*fte 16

原因

该问题是由 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

应用解决方案

我没有创建一个新的文件10-rename-network.rules/etc/udev/rules.d/,并增加了以下内容吧:

SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="ff:ff:ff:ff:ff:ff", NAME="eth0"
Run Code Online (Sandbox Code Playgroud)

在哪里

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

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


小智 12

通过从以下位置更改文件 /etc/network/interfaces.d/setup 解决:

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
Run Code Online (Sandbox Code Playgroud)

到:

auto lo
iface lo inet loopback
allow-hotplug eth0
iface eth0 inet dhcp
Run Code Online (Sandbox Code Playgroud)