界面不会在 systemd 下重命名

Old*_*ool 8 networking systemd ubuntu-16.04

我正在尝试重命名 Ubuntu 16.04 VPS 上的网络接口,但我无法这样做。Systemd 将我的主要网络接口命名为 enp0s3。我想将此接口重命名为 eth0。

根据systemd.link 文档,我创建了一个/etc/systemd/network/10-eth0.link包含以下内容的文件:

[Match]
MACAddress=08:00:27:f7:57:e5

[Link]
Name=eth0
Run Code Online (Sandbox Code Playgroud)

MAC 地址与ip a接口输出中给出的地址相匹配。我还将/etc/network/interfaces文件中的 enp0s3 条目重命名为 eth0 。虽然,当我重新启动机器时,界面仍然命名为 enp0s3。

dmesg输出中的以下条目对我来说很有趣:

e1000 0000:00:03.0 eth0: (PCI:33MHz:32-bit) 08:00:27:f7:57:e5
e1000 0000:00:03.0 eth0: Intel(R) PRO/1000 网络连接
e1000 0 :57:e5 03.0 enp0s3:从 eth0 重命名

很明显,它以 eth0 开始,但随后又被重命名为 enp0s3。我不知道为什么?

当我尝试调试链接文件时,我得到以下输出:

$ sudo udevadm test-builtin net_setup_link /etc/systemd/network/10-eth0.link
calling: test-builtin
=== trie on-disk ===
tool version:          229
file size:         6841778 bytes
header size             80 bytes
strings            1755242 bytes
nodes              5086456 bytes
Load module index
timestamp of 'etc/systemd/network' changed
Parsed configuration file /lib/systemd/network/99-default.link
Parsed configuration file /etc/systemd/network/10-eth0.link
Created link configuration context.
unable to open device '/sys/etc/systemd/network/10-eth0.link'

Unload module index
Unloaded link configuration context.
Run Code Online (Sandbox Code Playgroud)

关于它无法打开设备的线路似乎很奇怪。我不确定它为什么要这样做,/sys 下根本没有 etc 目录,我应该创建它吗?

任何关于为什么我的界面名称不坚持的见解都非常受欢迎。

iwa*_*rue 7

根据https://www.freedesktop.org/software/systemd/man/systemd.link.html,默认命名策略是:

#  /usr/lib/systemd/network/99-default.link
[Link]
NamePolicy=kernel database onboard slot path
MACAddressPolicy=persistent
Run Code Online (Sandbox Code Playgroud)

所以我怀疑你可能想将以下行添加到你的 eth0.link 中:

NamePolicy=mac
Run Code Online (Sandbox Code Playgroud)

我没有测试过这个,所以我不确定,但我怀疑问题是你在 MAC 上匹配,但没有命名策略来实现这一点。

每个策略都可能失败,并使用第一个成功的策略。名称不是直接设置的,而是作为属性“ID_NET_NAME”导出到 udev,默认情况下,udev 规则使用它来设置“NAME”。如果名称已经由用户空间设置,则不执行重命名

这只是一个猜测。

您还应该能够禁用 default.link,至少根据https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/

在我运行的一些 openSUSE 系统上,我遇到了类似的问题,通过在 /etc/udev/rules.d 下创建两个文件(参见https ://unix.stackexchange.com/questions/118272/80-net-setup-link-no-longer-functions-when-i-downgraded-systemd , https://wiki.archlinux.org/index.php/Network_configuration #Device_nameshttps://wiki.gentoo.org/wiki/Udev/Upgrade_Guide):

sudo touch /etc/udev/rules.d/80-net-setup-link.rules (或者只是确保该名称的空文件在该位置)

我创建了/etc/udev/rules.d/10-persistent-network.rules:

ACTION=="add", SUBSYSTEM=="net", KERNEL=="eth*", ATTR{tx_queue_len}="1000"
Run Code Online (Sandbox Code Playgroud)

在您的情况下,您实际上可以使用该文件来设置您想要的名称:

ACTION=="add", SUBSYSTEM=="net",ATTR{address}=="08:00:27:f7:57:e5",NAME="eth0"
Run Code Online (Sandbox Code Playgroud)