如何在 Centos 6.5 上根據介面名稱(不是 MAC)設置 IP
我正在嘗試自動化將在相同盒子上使用的網路介面設置。這些盒子有 3 個不同的 NIC。3 個 NIC 中的每一個都有不同的 MAC 前綴,我可以使用這些前綴來區分它們,並且我設置了 udev 規則,通過使用適當的 MAC 前綴在 MAC 地址上使用萬用字元匹配將它們映射到可預測的名稱。
但是,我無法按名稱將介面映射到 Centos 6.5 上所需的 IP 配置。我不能使用正常方式(HWADDR),因為它使用完整的 MAC 地址,並且每個盒子上的地址都不同,所以我試圖匹配 DEVICE 名稱。問題似乎與 NetworkManager 守護程序有關。
我所做的是在 /etc/sysconf/network-scripts 目錄中設置 ifcfg-*設備文件。*例如,ifcfg-i1:
DEVICE=i1 TYPE=Ethernet BOOTPROTO=none IPADDR=10.102.30.158 PREFIX=24 GATEWAY=10.102.30.1 DEFROUTE=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no ONBOOT=yes UUID=9ff7691b-e65b-4f9b-b6f2-e7549662403b
如果在 NetworkManager 守護程序啟動之前所有介面都出現,那麼一切正常。但是,如果此服務在 3 個介面“就緒”之前啟動,則該服務會將介面設置為與其 ifcfg 文件中的 IP 不同的 IP。以下是 IP 錯誤情況下 /var/log/messages 中的相關行:
Jul 31 18:19:14 centos6 kernel: ADDRCONF(NETDEV_UP): i1: link is not ready Jul 31 18:19:14 centos6 kernel: ADDRCONF(NETDEV_UP): i2: link is not ready Jul 31 18:19:14 centos6 kernel: e1000e: i1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx Jul 31 18:19:14 centos6 kernel: ADDRCONF(NETDEV_CHANGE): i1: link becomes ready Jul 31 18:19:14 centos6 kernel: ADDRCONF(NETDEV_UP): i3: link is not ready Jul 31 18:19:14 centos6 kernel: e1000e: i2 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None Jul 31 18:19:14 centos6 kernel: ADDRCONF(NETDEV_CHANGE): i2: link becomes ready
現在 NetworkManager 服務啟動了,但是 i3 還沒有準備好。
Jul 31 18:19:15 centos6 NetworkManager[2350]: <info> NetworkManager (version 0.8.1-66.el6) is starting... Jul 31 18:19:15 centos6 NetworkManager[2350]: ifcfg-rh: parsing /etc/sysconfig/network-scripts/ifcfg-lo ... Jul 31 18:19:15 centos6 NetworkManager[2350]: ifcfg-rh: parsing /etc/sysconfig/network-scripts/ifcfg-i3 ... Jul 31 18:19:15 centos6 NetworkManager[2350]: ifcfg-rh: read connection 'System i3' Jul 31 18:19:15 centos6 NetworkManager[2350]: ifcfg-rh: parsing /etc/sysconfig/network-scripts/ifcfg-i1 ... Jul 31 18:19:15 centos6 NetworkManager[2350]: ifcfg-rh: read connection 'System i1' Jul 31 18:19:15 centos6 NetworkManager[2350]: ifcfg-rh: parsing /etc/sysconfig/network-scripts/ifcfg-i2 ... Jul 31 18:19:15 centos6 NetworkManager[2350]: ifcfg-rh: read connection 'System i2' Jul 31 18:19:15 centos6 NetworkManager[2350]: ifcfg-rh: parsing /etc/sysconfig/network-scripts/ifcfg-em1 ... Jul 31 18:19:15 centos6 NetworkManager[2350]: ifcfg-rh: read connection 'System em1'
最終 i3 確實準備好了:
Jul 31 18:19:16 centos6 kernel: e1000e: i3 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None Jul 31 18:19:16 centos6 kernel: ADDRCONF(NETDEV_CHANGE): i3: link becomes ready Jul 31 18:19:17 centos6 NetworkManager[2350]: <info> (i1): device state change: 7 -> 8 (reason 0) Jul 31 18:19:17 centos6 NetworkManager[2350]: <info> Policy set 'System i1' (i1) as default for IPv4 routing and DNS. Jul 31 18:19:17 centos6 NetworkManager[2350]: <info> Activation (i1) successful, device activated. Jul 31 18:19:17 centos6 NetworkManager[2350]: <info> Activation (i1) Stage 5 of 5 (IP Configure Commit) complete. Jul 31 18:19:17 centos6 NetworkManager[2350]: <info> (i3): carrier now ON (device state 2) Jul 31 18:19:17 centos6 NetworkManager[2350]: <info> (i3): device state change: 2 -> 3 (reason 40) Jul 31 18:19:17 centos6 NetworkManager[2350]: <info> Auto-activating connection 'System i1'. Jul 31 18:19:17 centos6 NetworkManager[2350]: <info> Activation (i3) starting connection 'System i1' Jul 31 18:19:17 centos6 NetworkManager[2350]: <info> (i3): device state change: 3 -> 4 (reason 0)
但此時 NetworkManager 已決定 i1 為預設策略,並將 i1 IP (10.102.30.158) 也分配給 i3。
我嘗試在 ifcfg-xxx 文件中添加 NM_CONTROLLED=“no”,但 NetworkManager 日誌隨後顯示:
warning: NM_CONTROLLED was false but HWADDR or SUBCHANNELS was missing; device will be managed
對於介面,所以沒有效果。我不能使用 HWADDR,因為我不能使用確切的 MAC 地址。
首先,這是一個錯誤嗎?如果介面在 NetworkManager 啟動之前啟動,則一切正常,因此結果取決於競爭條件。
如果它不是一個錯誤,我該如何完成這個?禁用 NetworkManager 可能不是一個選項。
我將這個問題發佈到 Centos 6 Networking 論壇,得到的回應是使用 HWADDR 是唯一受支持的方法(至少對於 NetworkManager 而言)。
他們建議我在網路啟動之前生成具有確切 MAC 地址的 ifcfg- *device文件。*使用初始化腳本會很簡單。