CentOS备份ifcfg-eth*文件带来的网络故障问题,但你可能不知道,因为


我们都知道/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哈哈~


相关内容

    暂无相关文章