
鑑於此核心問題等待修復,並且隨機分配 MAC 位址給此 USB3 LAN 適配器:Debian 12 - 突然間,我的 USB3 Lan 轉接器每次重新啟動時都會分配隨機 MAC 位址
我正在嘗試尋找自訂之外的解決方法使用補丁重新編譯內核或者使用舊的核心版本。
基本上我所有的介面配置都是基於使用 udev 設定檔獲得的自訂名稱70-持久網絡規則(某些介面根據其 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 介面。
存在這樣的語法嗎?
謝謝
答案1
看來我已經透過這篇文章找到了答案:USB 裝置如何獨特區分?
閱讀此參考文獻:https://www.reactivated.net/writing_udev_rules.html
看來你可以透過使用將單親水平與實際水平混合ATTRS,所以使用ATTRS{系列}代替ATTR{地址}並使用提供的序號udevadm 資訊 -a -p /sys/class/net/eth1做這份工作。
例子:
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTRS{serial}=="00000000000094", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="lan1"
所以我恢復使用最新的Linux內核,同時等待debian開發人員將補丁放入上游通道,以便可以讀取eeprom中的mac。目前是一種解決方法,但卻是一種可靠的方法。
唯一有趣的部分是,如果設備沒有連接電纜,在我的情況下,lan1 和 eth0 都會出現,lan1 處於活動狀態並且「奇怪」地獲得正確的 mac 位址,而 eth0 仍然處於隨機 mac 位址 1 狀態。
編輯:這一直有效,直到我發現某些設備共享相同的序列̶_(ツ)_/̶所以我開始直接使用USB 根總線編號和設備編號來唯一標識適配器,因為我總是將它們保留在適當的位置無需移動它們。檢查這個問題:在 udev 規則中使用 USB 網路卡位址的 USB 路徑來指派介面名稱而不是 MAC 位址