我在 Sun Fire x4140 上安装了一台物理 SLES 11 SP2 服务器,重启后出现网络连接问题。NIC 已安装。
启动时网络似乎成功了,但 nfs 等网络服务却严重失败。这是因为 eth0 和 eth1 都接收相同的配置,并且都已通过 ifup。一旦所有操作都超时,我进入控制台,ifconfig 将显示 eth0 和 eth1 已启动并使用相同的 IP 运行。尝试 ping 该子网中的任何内容均失败。重新启动网络服务可修复此问题。
eth0 是正确的 NIC,根据 MAC 地址应配置为主 NIC。
问题:是什么原因导致 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
根据建议,我为所有其他网卡进行了配置不是正在使用(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.rules
并执行了rm /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 脚本以在启动过程的后期重新启动网络。
答案1
您说您没有 eth1 的配置脚本。为什么没有?是否应该配置?如果是,那么它应该具有什么 IP。静态分配还是 dhcp?
顺便说一句,这些都是需要你思考的问题,不一定在这里回答。
尝试为 eth1 创建一个配置,即使它只是一个最小的配置ONBOOT="否",如果没有配置文件,suse 可能会执行一些疯狂的默认自动垃圾操作。
答案2
使配置文件更加具体应该会有所帮助。将以下指令添加到您的 ifcfg-ethX 文件中:
DEVICE=eth0
HWADDR=00:18:4f:8d:85:4a
冲洗、涂抹泡沫,重复 eth3 等步骤
您也可以(应该?)添加 eth1 等的配置文件:
DEVICE=eth1
HWADDR=00:18:4f:8d:85:4b
ONBOOT=no
答案3
尝试添加:
HWADDR='00:18:4f:8d:85:4a'
至/etc/sysconfig/network-scripts/ifcfg-eth0
。您可能还想创建一个ifcfg-eth1
包含如下内容的:
DEVICE='eth1'
BOOTPROTO='none'
HWADDR='00:18:4f:8d:85:4b'
USERCONTROL='no'
ONBOOT='yes'
至少在 RHEL 上,这只会调出没有 IP 配置的接口,并且网络初始化脚本在 SuSE 11 上看起来类似。关于 SuSE 网络配置的另一个解决方案是使用以下命令清除70-persistent-net.rules
:
cat < /dev/null > /etc/udev/rules.d/70-persistent-net.rules
这将清除 udev 规则并告诉 init 使用 ifcfg-eth* 文件进行接口识别。
答案4
我无法确定两个 NIC 在启动时配置相同 IP 和子网这一谜团背后的原因。
然而,问题的最终解决方案是将电缆从第一个 NIC 移到第二个 NIC,即从 eth0 移到 eth1。然后我配置了 ifcfg-eth1 并“取消配置”了 ifcfg-eth0。现在我的网络和与网络相关的服务都完美运行了。
我感觉这可能是一个forcedeth
模块或者 BIOS 问题,但我不会再花时间在这上面了,因为我们现在正在构建具有完全不同硬件的服务器,并从 SLES 转移到 CentOS,所以我不希望这个问题再次出现。