如何将持久网络名称(例如enx00b56d00d500
)更改为 Linux ( ) 给出的标准名称的别名(而不是替换)eth0
?
我希望能够使用这两个名称,但 systemd.link 目前会破坏原始接口名称,并且没有明显的方法告诉它不要这样做。
背景
我正在运行 Debian GNU/Linux。我了解持久命名的好处并希望继续使用它们,但令人沮丧的是我不能依赖从命令行运行的简单 Linux 名称。
例如,我的一些机器没有任何内置以太网,而我的工作台上有十几个不同的 USB 转以太网适配器。我希望我插入的任何一个都可以用作两者eth0
以及 systemd 想要赋予它的任何持久名称。
我知道从Debian 维基我可以使用net.ifnames=0
内核参数禁用网络重命名,但该页面还指出它是不是可以创建别名,以便可以自由使用任一名称。我相信这可能是旧信息,因为 Linux 已经有了添加备用网络名称的能力自2019年以来。
请注意,我不想手动重命名接口。理想情况下,解决方案可以防止 systemd 删除原始名称,但如果有某种自动方法可以将 Linux 名称添加回来作为替代方案,那就更好了。
答案1
如果您运行的是 Debian 11(或更高版本),您应该已经具有您想要的行为。接口的自动配置altname
由AlternativeNamesPolicy
设置在/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
我可以将此接口称为enp1s0
或eth0
:
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