使用别名的持久网络名称,而不是重命名

使用别名的持久网络名称,而不是重命名

如何将持久网络名称(例如enx00b56d00d500)更改为 Linux ( ) 给出的标准名称的别名(而不是替换)eth0

我希望能够使用这两个名称,但 systemd.link 目前会破坏原始接口名称,并且没有明显的方法告诉它不要这样做。

背景

我正在运行 Debian GNU/Linux。我了解持久命名的好处并希望继续使用它们,但令人沮丧的是我不能依赖从命令行运行的简单 Linux 名称。

例如,我的一些机器没有任何内置以太网,而我的工作台上有十几个不同的 USB 转以太网适配器。我希望我插入的任何一个都可以用作两者eth0以及 systemd 想要赋予它的任何持久名称。

我知道从Debian 维基我可以使用net.ifnames=0内核参数禁用网络重命名,但该页面还指出它是不是可以创建别名,以便可以自由使用任一名称。我相信这可能是旧信息,因为 Linux 已经有了添加备用网络名称的能力自2019年以来。

请注意,我不想手动重命名接口。理想情况下,解决方案可以防止 systemd 删除原始名称,但如果有某种自动方法可以将 Linux 名称添加回来作为替代方案,那就更好了。

答案1

如果您运行的是 Debian 11(或更高版本),您应该已经具有您想要的行为。接口的自动配置altnameAlternativeNamesPolicy设置在/usr/lib/systemd/network/99-default.link.使用默认配置:

[Match]
OriginalName=*

[Link]
NamePolicy=keep kernel database onboard slot path
AlternativeNamesPolicy=database onboard slot path
MACAddressPolicy=persistent

如果我使用 启动 Debian 11 系统net.ifnames=0,我会得到:

2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 52:54:00:f7:e2:94 brd ff:ff:ff:ff:ff:ff
    altname eth0

我可以将此接口称为enp1s0eth0

root@debian:~# ip -br link show eth0
enp1s0           UP             52:54:00:f7:e2:94 <BROADCAST,MULTICAST,UP,LOWER_UP>
root@debian:~# ip -br link show enp1s0
enp1s0           UP             52:54:00:f7:e2:94 <BROADCAST,MULTICAST,UP,LOWER_UP>

如果您运行的 Debian 版本早于 Debian 11,我想您可能会不走运:iproute早期发行版上的软件包不支持altname


回复您的评论:

Debian 是否有办法禁用它(以及*.link将来可能创建的任何其他文件)?

*.link您无法禁用“将来可能创建的任何其他文件”,但您可以禁用或用等效命名的文件替换任何特定文件/etc/systemd/network(这对于任何类型的 systemd 单元文件都是如此)。对于“禁用”情况,最简单的解决方案是将文件符号链接到/dev/null;从https://www.freedesktop.org/software/systemd/man/systemd.link.html:

/etc/ 中的文件具有最高优先级,/run/ 中的文件优先于 /usr/lib/ 中的同名文件。如果需要,这可用于用本地文件覆盖系统提供的链接文件。作为一种特殊情况,空文件(文件大小为 0)或指向 /dev/null 的同名符号链接会完全禁用配置文件(它被“屏蔽”)。

因此,您可以73-usb-net-by-mac.link通过运行以下命令来屏蔽文件:

ln -s /dev/null /etc/systemd/network/73-usb-net-by-mac.link

相关内容