Linux

eth0 和 eth1 在啟動時都分配了相同的 IP

  • June 26, 2012

我在 Sun Fire x4140 上有一個物理 SLES 11 SP2 伺服器,它在重新啟動時給我帶來了網路問題。網卡是板載的。

網路在引導過程中顯示為成功,但網路服務(如 nfs)嚴重失敗。這是因為 eth0 和 eth1 都接收相同的配置並且都是 ifup-ed。一旦一切都超時並且我在控制台,ifconfig 顯示 eth0 和 eth1 已啟動並使用相同的 IP 執行。嘗試 ping 該子網中的任何內容都會失敗。重新啟動網路服務可解決此問題。

eth0 是正確的 NIC,應根據 MAC 地址配置為主網卡。

問題:是什麼導致 eth1 與 eth0 使用相同的配置?

我沒有為 eth1 設置配置腳本:

banjer@harp:~> ls -la /etc/sysconfig/network/
total 104
drwxr-xr-x 6 root root  4096 Jun 11 12:21 .
drwxr-xr-x 6 root root  4096 Apr 10 09:46 ..
-rw-r--r-- 1 root root 13916 Apr 10 09:32 config
-rw-r--r-- 1 root root  9952 Apr 10 09:36 dhcp
-rw------- 1 root root   180 Jun 11 12:21 ifcfg-eth0
-rw------- 1 root root   180 Jun 11 12:21 ifcfg-eth3
-rw------- 1 root root   172 Feb  1 08:32 ifcfg-lo
-rw-r--r-- 1 root root 29333 Feb  1 08:32 ifcfg.template
drwxr-xr-x 2 root root  4096 Apr 10 09:32 if-down.d
-rw-r--r-- 1 root root   239 Feb  1 08:32 ifroute-lo
drwxr-xr-x 2 root root  4096 Apr 10 09:33 if-up.d
drwx------ 2 root root  4096 May  5  2010 providers
-rw-r--r-- 1 root root    25 Nov 16  2010 routes
drwxr-xr-x 2 root root  4096 Apr 10 09:36 scripts

附帶說明一下,eth3 也配置了不同子網中的 IP,但這並沒有造成任何問題。僅供參考,正在使用的核心模組是forcedeth.

banjer@harp:~> sudo cat /etc/sysconfig/network/ifcfg-eth0
BOOTPROTO='static'
BROADCAST=''
ETHTOOL_OPTIONS=''
IPADDR='172.21.64.25/20'
MTU=''
NAME='MCP55 Ethernet'
NETWORK=''
REMOTE_IPADDR=''
STARTMODE='auto'
USERCONTROL='no'
ONBOOT="yes"

這是 eth3,以防您需要查看它:

banjer@harp:~> sudo cat /etc/sysconfig/network/ifcfg-eth3
BOOTPROTO='static'
BROADCAST=''
ETHTOOL_OPTIONS=''
IPADDR='172.11.200.4/24'
MTU=''
NAME='MCP55 Ethernet'
NETWORK=''
REMOTE_IPADDR=''
STARTMODE='auto'
USERCONTROL='no'
ONBOOT="yes"

也許與udev有關? 70-persistent-net-rules對我來說看起來不錯,但我可能無法完全理解。

banjer@harp:~> cat /etc/udev/rules.d/70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.

# PCI device 0x10de:0x0373 (forcedeth)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:18:4f:8d:85:4c", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth2"

# PCI device 0x10de:0x0373 (forcedeth)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:18:4f:8d:85:4a", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

# PCI device 0x10de:0x0373 (forcedeth)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:18:4f:8d:85:4b", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

# PCI device 0x10de:0x0373 (forcedeth)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:18:4f:8d:85:4d", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth3"

# PCI device 0x1077:0x3032 (qla3xxx)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:c1:dd:0e:34:6c", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth4"

關於什麼會導致這種情況的任何其他想法?

更新 1

根據建議,我為所有其他使用的 NIC(eth1 和 eth2)提供了一個配置,例如這裡是 eth1:

banjer@harp:/etc/sysconfig/network> sudo cat ifcfg-eth1
BOOTPROTO='static'
BROADCAST=''
ETHTOOL_OPTIONS=''
IPADDR=''
MTU=''
NAME='MCP55 Ethernet'
NETMASK='255.255.255.0'
NETWORK=''
REMOTE_IPADDR=''
STARTMODE='off'
ONBOOT='no'
USERCONTROL='no'

並將特定添加HWADDR到實際插入的 NIC(eth0 和 eth3)。在測試重新啟動期間,我看到網路按預期啟動,並且 eth1 和 eth2 按預期說“已跳過”。但是,eth1 仍然在使用 eth0 的配置。

我設置udev_log="debug"/etc/udev/udev.conf,現在我有一堆調試消息/var/log/messages這是 的粘貼grep eth1 /var/log/messages但與其他 eth 的 grep 相比,我沒有看到任何突出的東西。

更新 2

認為這是一個 udev 問題,我/lib/udev/rules.d/75-persistent-net-generator.rulesrm /etc/udev/rules.d/70-persistent-net.rules.

# device name whitelist
#KERNEL!="eth*|ath*|wlan*[0-9]|msh*|ra*|sta*|ctc*|lcs*|hsi*", GOTO="persistent_net_generator_end"
KERNEL!="eth[03]|ath*|wlan*[0-9]|msh*|ra*|sta*|ctc*|lcs*|hsi*", GOTO="persistent_net_generator_end"

重新啟動後,這完全符合我的要求(為 eth0、eth3 生成規則),但並沒有解決問題。eth1 仍然被提出。有沒有辦法調試整個啟動過程,例如 strace?我不知道這是從哪裡來的。

作為創可貼,我添加了一個 rc 腳本以在啟動過程的後期重新啟動網路。

你說你沒有 eth1 的配置腳本。為什麼不?是否應該配置?如果是,那麼它應該擁有什麼IP。靜態分配還是 dhcp?

順便說一句,這些是您需要考慮的問題,不一定要在這裡回答。

嘗試為 eth1 創建一個配置,即使它只是一個帶有*ONBOOT=“no”*的最小配置,如果沒有配置文件,suse 可能會做一些瘋狂的預設自動魔法廢話。

使配置文件更具體應該會有所幫助。將以下指令添加到您的 ifcfg-ethX 文件中:

DEVICE=eth0
HWADDR=00:18:4f:8d:85:4a

沖洗、起泡、重複 eth3 等

您也可以(應該?)為 eth1 等添加配置文件:

DEVICE=eth1
HWADDR=00:18:4f:8d:85:4b
ONBOOT=no

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