考虑到这个内核问题等待修复,并且随机分配 MAC 地址给这个 USB3 LAN 适配器:Debian 12 - 突然间,我的 USB3 LAN 适配器每次重新启动时都会分配随机 MAC 地址
我正在尝试找到一种解决方法,除了使用补丁自定义重新编译内核或使用旧内核版本之外。
基本上我所有的接口配置都是基于使用 udev 配置文件70-persistent-net.rules获得的自定义名称(某些接口根据其 mac 地址进行重命名,但考虑到上述错误,这不再起作用)。
通过查看 udev 文件/etc/udev/rules.d/70-persistent-net.rules的语法
我的conf有不同的行,例如:
SUBSYSTEM="net", ACTION="add", DRIVERS="?*", ATTR{address}="00:....", ATTR{dev_id}="0x0", ATTR{type}="1", KERNEL="eth*", NAME="lan1"
现在我通过调用命令发现了什么:
udevadm 信息 -a -p /sys/class/net/eth1
与 eth2、eth3、eth4、eth5 相同...
是有一个有趣的 ATTR 来唯一地标识接口。
这是一个名为“serial”的属性,但不适用于 eth1、eth2...但适用于它们的直接父开发人员。
事实上,该命令首先说“查看设备”...但在它说“查看父设备”之后...
所以我想知道我是否可以做这样的事情:
SUBSYSTEM="net", ACTION="add", DRIVERS="?*", ATTR{parent>serial}="00000003", ATTR{dev_id}="0x0", ATTR{type}="1", KERNEL="eth*", NAME="lan1"
使用父串行而不是基于 MAC 地址的配置来重命名 LAN 接口。
存在这样的语法吗?
谢谢
我似乎通过这篇文章找到了答案:USB 设备如何独特区分?
阅读此参考文献:https://www.reactivated.net/writing_udev_rules.html
看来您可以使用ATTRS将单亲级与实际级别混合,因此使用ATTRS{serial}而不是ATTR{address}并使用udevadm info -a -p /sys/class/net/eth1 do提供的序列工作。
例子:
所以我恢复使用最新的Linux内核,同时等待debian开发人员将补丁放入上游通道,以便可以读取eeprom中的mac。目前是一种解决方法,但却是一种可靠的方法。
唯一有趣的部分是,如果设备没有连接电缆,在我的情况下,lan1 和 eth0 都会出现,lan1 处于活动状态并且“奇怪”地获得正确的 mac 地址,而 eth0 仍然处于随机 mac 地址 1 状态。
编辑:这一直有效,直到我发现某些设备共享相同的序列 ̶_(ツ)_/̶所以我开始直接使用 USB 根总线编号和设备编号来唯一标识适配器,因为我总是将它们保留在适当的位置无需移动它们。检查这个问题:在 udev 规则中使用 USB 网卡地址的 USB 路径来分配接口名称而不是 MAC 地址