Chinaunix首页 | 论坛 | 博客
  • 博客访问: 544374
  • 博文数量: 105
  • 博客积分: 6010
  • 博客等级: 准将
  • 技术积分: 1132
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-15 09:57
文章分类

全部博文(105)

文章存档

2011年(1)

2009年(41)

2008年(63)

我的朋友

分类: 系统运维

2009-01-08 09:07:29

    我们都知道/etc/sysconfig/network-scripts/ifcfg-eth*下面的文件,是用于描述LINUX环境下网络设置的。但你可能不知道,因为ifup等脚本的原因,在备份ifcfg-eth*,拷贝成另一个文件时可能会带来一些意向不到的问题。今天就收到用户的报障是与其相关的。下面做一个示例演示。

一、故障现象
根据用户的描述,机器上只有一张网卡,并且配置了一个固定IP地址和网段。如:
引用
# pwd
/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)

但路由表显示:
引用
# route
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 del -net 10.0.0.0 netmask 255.255.255.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目录有关,所以,我执行:
引用
# grep '10.0.0' *
ifcfg-eth0.081210:IPADDR=10.0.0.1
network-functions-ipv6:         # test 10.0.0.0/8     (RFC 1918 / private)

好了,发现问题了。ifcfg-eth0.081210内容如下:
引用
# cat /etc/sysconfig/network-scripts/ifcfg-eth0.081210
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.0.0.1
NETMASK=255.255.255.0

执行重启网络的步骤,有:
引用
# service network restart
正在关闭接口 eth0:                                        [确定]
关闭环回接口:                                             [确定]
弹出环回接口:                                             [确定]
弹出界面 eth0:                                            [确定]
弹出界面 eth0.081210:                                     [确定]

原来启动网络时多激活了一个eth0.081210网卡,而其DEVICE=eth0,ONBOOT=yes,网段就是10.0.0.0/24,所以路由表中就多出了一条不正常的路由。

三、解决故障
找到原因,解决就不难了,删除多余的配置文件即可。执行:
引用
# mv /etc/sysconfig/network-scripts/ifcfg-eth0.081210 /tmp
# 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是网络服务的配置文件,其中有:
引用
interfaces=$(ls ifcfg* | \
            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开头的文件。

四、测试
我们做个简单的测试,就是利用这样的配置文件,创建一个虚拟网卡。有这样一个配置文件:
引用
# cat /etc/sysconfig/network-scripts/ifcfg-eth0.0
DEVICE=eth0:0
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.0.0.1
NETMASK=255.255.255.0

重启网络:
引用
# service network restart
正在关闭接口 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哈哈~
阅读(1894) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~