Linux

旋轉 MAC 的 RHEL/CENTOS6 介面命名和 IP 分配

  • January 18, 2013

背景:

我正在創建一個 RHEL6 作業系統磁碟映像,該映像可能會傳遞給許多具有相同硬體的不同電腦(MAC 等序列號除外)。映像是預先配置的,並在系統設置後複製。(所以沒有 firstboot 等)一旦將圖像放置在 HDD 上,該 HDD 可能會放置在多台不同的電腦中。

我希望所有創建的網路介面都被命名為 eth0 而不管 MAC。我已經刪除/修改了 persistent-net udev 規則,以確保可用的單個網路介面名為 eth0。(使用persistent-net udev 規則,當驅動器在電腦之間傳遞時,eth* 將繼續計數。)因此這是有效的。

問題陳述:

我還希望所有這些電腦都使用靜態 IP 地址。即使沒有有效的網路連接到電腦,我也需要分配 IP 地址。我已修改 ifcfg-eth0 以設置 IP 地址,但這取決於 MAC,因此當我將磁碟移動到另一台電腦時它不起作用。(據我所知,NetworkManager 也依賴於 MAC。)

如果 ifcfg-eth0 文件沒有 HWADDR 行,那麼在電腦之間移動時它可以正常工作。我在 udev 規則的末尾添加了一個 RUN 命令來執行一個腳本,該腳本將從 ifcfg-eth0 中刪除 HWADDR 行,但這不起作用,因為我很確定文件系統在 udev 期間以只讀方式安裝,所以它實際上無法修改 ifcfg-eth0。

我希望電腦上的單個網路介面在啟動時提供一個預先指定的 IP 地址,無論目前 MAC 是什麼。我想我真的很接近,但我似乎無法想出最後的位來強制它將 IP 地址分配給任何可用的介面。

編輯:

ifcfg-eth0:

DEVICE=eth0
IPADDR=10.10.10.10
BROADCAST=10.10.10.255
ONBOOT=yes
NAME=eth0
BOOTPROTO=none
NETMASK=255.255.255.0
TYPE=Ethernet
HWADDR=##:##:##:##:##:##
IPV6INIT=no
USERCTL=no
NM_CONTROLLED=no

如果 HWADDR 行與當時電腦中的 MAC 匹配,則可以。但是如果 HWADDR 行不匹配,核心會在啟動時抱怨:

Bringing up interface eth0:  Device eth0 has different MAC address than expected, ignoring.   [FAILED]

如果 HWADDR 線在啟動時不存在,它可以正常工作,但它會在某個時候自動填充該線,因此下次您移動驅動器時它將無法工作。我想在 udev 期間僅使用 sed 並在啟動時刪除 HWADDR 行,但由於只讀文件系統,我認為這實際上不是一個好主意(或可行)。

在文件上設置不可變位,使其不能被修改(不刪除該位):

chattr +i /etc/sysconfig/network-scripts/ifcfg-eth0

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