Linux

如何為持久網路名稱編寫規則?

  • December 20, 2019

我知道一個程序會根據 /lib/udev/rules.d/75-persistent-net-generator.rules 中的規則生成持久網卡名稱。我也知道如何用一個簡單的方法完全禁用這個過程

echo '#' > /etc/udev/rules.d/75-persistent-net-generator.rules

但我讀到我“也可以編寫自己的規則文件來為介面命名——如果已經設置了名稱,持久規則生成器會忽略介面”(/etc/udev/rules.d/README 確認這個有可能)。

您能否提供有關如何編寫此類規則的說明和/或範例?(我主要關心 Debian/Ubuntu,而對 CentOS 則不太關心)。就我而言,我想添加如下規則:

  • MAC A 或 B 的卡應命名為 eth0
  • MAC C 或 D 的卡應命名為 eth1
  • 其他任何東西都遵循預設命名方案

作為我為什麼要編寫自定義規則的一個具體範例:我有兩台相同的伺服器,帶有一個板載 LAN 和一個 PCI LAN。在硬體故障的情況下,我希望能夠將磁碟從 HW#1 移動到 HW#2,重要的是 eth0 繼續指向板載卡,eth1 指向 PCI 卡(沒有人想弄亂中間的電纜硬體故障恐慌)。我目前的解決方法有效,但工作量很大[1] 所以我想知道編寫自定義規則是否可以讓我表達上述規則


[1] 在 HW#1 中安裝作業系統並保留 /etc/udev/rules.d/70-persistent-net.rules 的副本。將磁碟移動到 HW#2 並保留同一文件的第二個副本。連接兩個副本並手動編輯 NAME=“ethX” 部分。將 /etc/udev/rules.d/70-persistent-net.rules 替換為我的版本。最後禁用自動創建一個新的 70-persistent-net.rules 使用

echo '#' > /etc/udev/rules.d/75-persistent-net-generator.rules

要回答您的具體問題,請將其添加到 persistent-net.rules:

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="AA:AA:AA:AA:AA:AA", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME="eth0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="BB:BB:BB:BB:BB:BB", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME="eth0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="CC:CC:CC:CC:CC:CC", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME="eth1"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="DD:DD:DD:DD:DD:DD", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME="eth1"

不理會 persistent-net-generator.rules。udev 不會覆蓋您手動添加的規則,但生成器規則會像往常一樣導致為新卡添加新規則。

引用自:https://serverfault.com/questions/601483