我们都知道/etc/sysconfig/network-scripts/ifcfg-eth*下面的文件,是用于描述LINUX环境下网络设置的。但你可能不知道,因为ifup等脚本的原因,在备份ifcfg-eth*,拷贝成另一个文件时可能会带来一些意向不到的问题。今天就收到用户的报障是与其相关的。下面做一个示例演示。
一、故障现象
根据用户的描述,机器上只有一张网卡,并且配置了一个固定IP地址和网段。如:
/etc/sysconfig/network-scripts
# cat ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.104
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:F0:98:69
inet addr:192.168.1.104 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fef0:9869/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3832 errors:0 dropped:0 overruns:0 frame:0
TX packets:3243 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:463579 (452.7 KiB) TX bytes:431767 (421.6 KiB)
Interrupt:177 Base address:0x1400
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
但路由表显示:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.0.0.0 * 255.255.255.0 U 0 0 0 eth0
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
可见,多出了一个额外的到10.0.0.0网段的路由。而该路由刚好与其防火墙路由网段相同,导致客户端经过防火墙访问该机器时,提示无法连接。但其余相同配置的机器上则没有该问题。
二、故障排查
首先,我怀疑是有人手动增加了一条路由,就删掉它:
# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
再用客户端测试,访问正常。
重启服务器,发现10.0.0.0网段的路由再次被添加。这说明并不是人工加入的,而是在机器启动的时候就激活了。所以,我从机器启动执行的脚本来分析,但查看/etc/rc.sysinit、/etc/rc.d/*、/etc/rc.local等脚本都没发现异常的问题。
以往的经验告诉我,可能与/etc/sysconfig/network-scripts目录有关,所以,我执行:
ifcfg-eth0.081210:IPADDR=10.0.0.1
network-functions-ipv6: # test 10.0.0.0/8 (RFC 1918 / private)
好了,发现问题了。ifcfg-eth0.081210内容如下:
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.0.0.1
NETMASK=255.255.255.0
执行重启网络的步骤,有:
正在关闭接口 eth0: [确定]
关闭环回接口: [确定]
弹出环回接口: [确定]
弹出界面 eth0: [确定]
弹出界面 eth0.081210: [确定]
原来启动网络时多激活了一个eth0.081210网卡,而其DEVICE=eth0,ONBOOT=yes,网段就是10.0.0.0/24,所以路由表中就多出了一条不正常的路由。
三、解决故障
找到原因,解决就不难了,删除多余的配置文件即可。执行:
# service network restart
正在关闭接口 eth0: [确定]
关闭环回接口: [确定]
弹出环回接口: [确定]
弹出界面 eth0: [确定]
# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
四、原因
追究原因,是用户在20081210进行了网络调整,期间为安全期间,把原来的ifcfg-eth0备份成ifcfg-eth0.081210。而网络在启动时,读取到该文件的内容后,误以为这也是一个网卡,就激活了。
/etc/rc.d/network是网络服务的配置文件,其中有:
LANG=C sed -e “$__sed_discard_ignored_files” \
-e ‘/\(ifcfg-lo\|:\|ifcfg-.*-range\)/d’ \
-e ‘/ifcfg-[A-Za-z0-9\._-]\+$/ { s/^ifcfg-//g;s/[0-9]/ &/}’ | \
LANG=C sort -k 1,1 -k 2n | \
LANG=C sed ‘s/ //’)
可见,这会把ifcfg-eth0.081210也视为一个网卡。这就是故障发生的底层原因了。
所以,启动网络服务是依赖脚本执行的,可能会存在一些误判的问题,建议不要在network-scripts目录中放入非必要的配置文件咯,特别是ifcfg开头的文件。
四、测试
我们做个简单的测试,就是利用这样的配置文件,创建一个虚拟网卡。有这样一个配置文件:
DEVICE=eth0:0
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.0.0.1
NETMASK=255.255.255.0
重启网络:
正在关闭接口 eth0: [确定]
关闭环回接口: [确定]
弹出环回接口: [确定]
弹出界面 eth0: [确定]
弹出界面 eth0.0: [确定]
# ifconfig eth0:0
eth0:0 Link encap:Ethernet HWaddr 00:0C:29:F0:98:69
inet addr:10.0.0.1 Bcast:10.0.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:177 Base address:0x1400
明白了吗?O(∩_∩)O哈哈~
解决Asianux 4.0 修改MAC地址后网卡不能启动的错误
补充udev 绑定网卡的方法
多网卡服务器在Asianux 3.0上设定网络绑定的方法
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/linux/111115.html