systemd 在网络接口方面应该如何工作?

systemd 在网络接口方面应该如何工作?

众所周知,systemd 将网络接口名称从 eth0 更改为 enp0s25,这称为“可预测的网络接口名称”。

在我的系统上,eth0 称为“enp0s31f6”。

我很抱歉这么说,但我也同意这位用户的说法“我觉得‘可预测’这个词没什么讽刺意味” https://askubuntu.com/questions/704361/why-is-my-network-interface-named-enp0s25-instead-of-eth0

回到主题:

在我的系统(带有一个物理 PCI 以太网适配器的 Debian 9.8)上,我突然发现 DHCP 不再工作。

我需要手动运行 dhclient 来获取 IP。

然后,我查看 /etc/network/interfaces 并看到:

auto eth0
iface eth0 inet dhcp

这不应该是 enp0s31f6 吗?

但是,我应该如何知道要放在那里的内容,如果它再次发生变化怎么办,例如,如果我将以太网 PCI 卡移至不同的插槽?

我真的应该手动编辑这个文件,并将 eth0 更改为 systemd 决定调用我的接口的任何内容吗?

当然,我一定错过了一些关于 systemd 如何工作、Debian 如何工作或可预测网络接口如何工作的重要信息。也许是这些的组合。

我应该引用 /etc/network/interfaces 中的抽象网络接口吗?一些抽象字符串总是意味着“第一个网络接口卡”(这不就是 eth0 吗?)?或者通过一些UID?通过其 PCI 域:总线:设备?

这是非常令人困惑的,很多文档都提到了我认为是一堆遗留脚本、现代 systemd,并且许多发行版似乎使用了旧式脚本和 systemd 功能的组合,这很难掌握。

问题:

  • 为什么它停止工作?

  • 我做错了什么?

  • 为什么是这样曾经当 Debian 使用 systemd 和可预测网络接口时,我的 /etc/network/interfaces 中的 eth0 是什么?

  • 解决这个问题的正确方法是什么?

答案1

为什么它停止工作?我做错了什么?

很难说“突然”发生了什么。在 DHCP 停止工作前后查看您的/var/log/syslog或DHCP 日志,您可能会发现答案。/var/log/messages还要检查 中的修改时间stat /etc/network/interfaces

/etc/network/interfaces当 Debian 使用 systemd 和可预测网络接口时,为什么我的 eth0 会出现?

这是新的默认值自从 Debian 延伸以来。如果您之前安装了系统并且您的系统/etc/network/interfaces源自 jessie(或 wheezy...),那么它是由安装程序 ( netcfg) 使用旧的命名方案创建的。

解决这个问题的正确方法是什么?

无论什么最适合你。

  • 如果您希望在这台机器上有多个以太网接口,那么请考虑如何区分它们。请记住,他们的 ethX 顺序不稳定/不可预测。可预测的网络接口名称为您提供了多种选择,请根据您的用例进行选择。

  • 如果这台机器只有一个以太网接口,那么您可以

    • 回退到使用内核名称,它始终是 eth0 (上面的页面为您提供了几个选项,我最喜欢的是ln -s /dev/null /etc/systemd/network/99-default.link,只是不要忘记之后使用 重新生成 initramfs update-initramfs -u);
    • 或者不关心接口的名称,/etc/network/interfaces完全放弃并使用匹配所有配置切换到 systemd-networkd,例如
[Network]
DHCP=ipv4

in /etc/systemd/network/dhcp.network(选择任意文件名)。抱歉,我无法正确缩进...

相关内容