众所周知,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 ?
解决此问题的正确方法是什么?
很难说“突然”发生了什么。在它停止工作时查看您的
/var/log/syslog
或/var/log/messages
DHCP 日志,您可能会发现。还要检查修改时间stat /etc/network/interfaces
。这是自 Debian 伸展以来的新默认值。如果您之前安装了系统并且您的系统
/etc/network/interfaces
来自 jessie(或 wheezy...),那么它是由安装程序 (netcfg
) 使用旧命名方案创建的。什么最适合你。
如果您希望在这台机器上拥有多个以太网接口,那么请考虑您希望如何区分它们。请记住,他们的 ethX 订单将不稳定/不可预测。PredictableNetworkInterfaceNames为您提供了几个选项,请根据您的用例进行选择。
如果这台机器只有一个以太网接口,那么你可以
ln -s /dev/null /etc/systemd/network/99-default.link
,只是不要忘记之后重新生成您的 initramfsupdate-initramfs -u
);/etc/network/interfaces
完全放弃并使用匹配所有配置切换到 systemd-networkdin
/etc/systemd/network/dhcp.network
(选择任意文件名)。抱歉,我无法正确缩进...