![systemd 在网络接口方面应该如何工作?](https://linux22.com/image/150998/systemd%20%E5%9C%A8%E7%BD%91%E7%BB%9C%E6%8E%A5%E5%8F%A3%E6%96%B9%E9%9D%A2%E5%BA%94%E8%AF%A5%E5%A6%82%E4%BD%95%E5%B7%A5%E4%BD%9C%EF%BC%9F.png)
众所周知,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
,只是不要忘记之后使用 重新生成 initramfsupdate-initramfs -u
); - 或者不关心接口的名称,
/etc/network/interfaces
完全放弃并使用匹配所有配置切换到 systemd-networkd,例如
- 回退到使用内核名称,它始终是 eth0 (上面的页面为您提供了几个选项,我最喜欢的是
[Network]
DHCP=ipv4
in /etc/systemd/network/dhcp.network
(选择任意文件名)。抱歉,我无法正确缩进...