原因

原因

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

[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.

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

ip link还显示lo-ens160ens160vmware 中为单个配置的虚拟网络设备配置的 mac 地址在哪里。

更新

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

- 我觉得这不对,原因如下:

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

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

答案1

原因

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

在哪里

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

我建议完成此操作后重新启动以确保更改生效。

答案2

通过更改文件 /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

答案3

就我而言,这个问题与尝试启动我的桥有关br0。我忘了这样做:

sudo apt-get install bridge-utils

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

答案4

您可能想要删除/修改持久/一致网络接口名称的 udev 缓存,位于此处: /etc/udev/rules.d/70-persistent-net.rules

相关内容