出处:转载自赛迪网 作者:曹元其
由于Linux的桌面应用和Windows相比还有一定的差距,所以在企业应用中往往是Linux和Windows操作系统共存形成异构网络。中小企业由于缺少经验丰富的Linux网络管理员,所以对于Linux网络故障分析与排除经常是头痛医头、脚痛医脚,缺乏全面的考虑。
据统计,Linux网络故障有35%在物理层、25%在数据链路层、12%在网络层、10%在传输层、8%在对话层、7%在表示层、3%在应用层。由此可以看出,网络故障通常发生在网络七层模型的下三层,即物理层、链路层和网络层。对应于实际网络也就是使用的网线、连接模块、网卡、交换机、路由器等设备故障。这些故障可能因为产品的质量或性能、磨损老化、人为误操作、不正确的设置、管理缺陷、黑客系统入侵等原因造成。
Linux网络服务功能非常强大,不论是Mail Server、Web Server、DNS Server等都非常完善。但是,也经常听到有人抱怨Linux没有办法连上网络等问题。下面首先看看Linux TCP/IP的网络模型(见图1所示),掌握OSI模型、TCP/IP模型及相关服务对应的层次对于Linux网络故障分析与排除是非常重要的。
图1 Linux TCP/IP网络模型和相关服务列表
解决问题的思路
解决问题的顺序应该是从Linux网络的底层开始,然后慢慢地向上检查,问题的解决流程可以如下:
◆ 检查网卡是否能正常工作;
◆ 局域网络硬件联机确认能不能ping到同一网域中的其它计算机IP(局域网络);
◆ 检查DNS是否设定正确;
◆ 检查主机的服务是否被关掉,检查 inetd.conf /etc/xinetd.d;
◆ 一些服务的权限与端口是否打开。
例如在局域网络接线法中,一般造成网络问题的情况可以分为网络硬件传输部分及操作系统、通信协议或者相关服务的软件设定问题。
1.网络硬件传输问题
(1)网线
在图2中可以发现,网络接口设备中使用最多的是网线。由于网线常接在墙角和门缝处,有可能被压坏。所以,需要注意网线是否因被截断、网线过度扭曲变形、自制网络接头(如RJ-45跳线头)品质不良造成讯号不良;网络接头与设备(如集线器、路由器、交换机)接触不良等。
(2)网卡、集线器、路由器、交换机等网络设备
网卡不稳定、品质不佳,或者与整体系统的兼容性不佳; 各网络设备的接触不良,造成讯号衰减; 网络设备使用方法不良,造成设备功能衰减等都会造成传输问题。
(3) 设备配置的规则
各个设备的配置是有规则的。太长的网络线会造成讯号的衰减,导致网络联机的时间太长甚至无法联机。
(4)UPS电源
UPS电源是一个容易被忽视的环节。由于路由器、交换机、基带式“猫”等网络设备对电压和接地都非常敏感,因此,应当使用性能优良的在线式UPS作为供电电源,最好使用2000W功率以上的,从而可以将所有的网络设备都连接在同一电源,避免不同设备间的电压差别。此外,机房和机柜要有非常好的接地措施,并为所有设备建立一条地线保证接地电压相同,确保网络设备正常进行。
2.软件设定问题
(1)网卡的IP设定错误
例如,同一个IP在同一个网段中出现造成IP冲突、子屏蔽网络设定错误等。
(2)路由问题(Router)
这方面的问题出在Gateway的设定错误,或者是路由设定不正确,导致资料封包没有办法顺利地送出去。
(3)网络负荷问题(Loading)
当黑客对网络实施拒绝服务攻击时,同时有大量的信息包涌进Server或Hub,就有可能造成网络的停顿甚至挂起。
(4)其它
例如,一些端口被防火墙挡住了,造成无法执行某些网络资源;应用程序本身的Bug问题;应用程序中使用者的网络设定错误;以及不同的操作系统的兼容性问题等。
解决问题的方法
以图2为例,解决问题的方法可以从自身PC的网卡查起,然后到网络线、Hub等硬件。如果确定硬件没有问题了,再来考虑软件的设定。
图2 网络拓扑结构
1.检查网卡工作状况
(1)使用lsmod查看网卡的模块是否已被加载(见图3所示)
# lsmod
图3 显示Linux硬件情况
图3中倒数第二行显示已经检测到网卡,并且已经加载。如果没有检测到硬件,用硬件检测程序Kuduz检测网卡,它和Windows中添加新硬件差不多。如果核心支持该硬件,并且有该驱动程序就可自动装载。
(2)使用ifconfig查看网卡工作状况
如果已经检测到网卡,网卡硬件就没有问题,接下来检查网卡的软件设定。使用ifconfig,如果没有任何网络硬件被驱动的话,使用下面命令加载:
# ifconfig eth0 192.168.0.2 netmask 255.255.255.0 up
图4是我的网络设定,设备名称为eth0,IP是192.168.0.2。
图4 网卡基本信息
如果没有检测到网卡就麻烦一些,通常要重新安装网卡的驱动程序,网卡驱动程序安装方法步骤如下:
◆ 编译并安装模块;
◆ 修改/etc/conf.module 文件;
◆ 修改/etc/sysconfig/network文件;
◆ 修改/etc/sysconfig/network-scripts/ifcfg-eth0 文件;
◆ 以ifup eth0来激活网卡后再查看。
如果还有问题,基本上可以确定网卡发生物理故障需要更换。
2.局域网络硬件联机确认
最重要的网卡设定确认没有问题之后,接下来要确认局域网内网络连接情况。根据图2网络拓扑结构,对局域网的要求有下面几点:
(1)IP的设定
假设子网为192.168.1.0/24,那么局域网内所有计算机的IP应该介于192.168.1.1~192.168.1.254,且所有的计算机子屏蔽网络均为255.255.255.0,IP在所有的计算机都不可以重复。
(2)Gateway
假设Linux IP为192.168.1.2,那么局域网内所有其它的个人计算机的Gateway是192.168.1.2 。
(3)Windows端的通信协议
局域网内其它的Windows系统的通信协议仅需要TCP/IP及NetBUEI即可,如果安装过多的通信协议可能会造成联机过慢。
(4)Windows 端工作组与计算机名称
假如需要资源共享,那么就必须在Windows系统中建立文件共享,并且所有的计算机工作组必须相同,但计算机名称不能相同。
3.检查DNS设定是否正确
如果在Linux系统中无法进行域名解析,很可能是没有在本地指定有效的域名服务器,通常这种情况比较常见。一般修改和域名服务相关的文件如/etc/hosts或/etc/resolv.conf,在这些文件中添加有效的域名服务器的IP地址就可以解决问题。
4.主机服务是否关掉了服务权限
一个比较常见的问题是无法登入主机执行某些功能,也就是说可以ping到网络上的某部主机,但是无法执行这个主机的某些特定功能,例如FTP、WWW 等。所以,首先必须了解该主机是否提供FTP、WWW服务。最常见到的就是Red Hat 7.X 版中,FTP与Telnet已经缺省为关闭。这时,就必须要到/etc/xinetd.d修改几个服务的设定。下面以Telnet为例说明:
# vi /etc/xinetd.d/telnet
service telnet
{
disable = yes
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
}
将disable=yes改成disable=no就可以开启服务。然后,再用/etc/rc.d/init.d/xinetd restart来激活Telnet服务。
5.确定一些服务的权限及端口是否打开
如果Client PC要使用Server服务,还要检查各个文件或者程序的权限,例如:/etc/hosts.allow是否开启、Mail Server是否设定了relay、httpd.conf中是否开放PHP或者MySQL服务、或者是其它相关的CGI程序执行的可行性,FTP是否开放匿名登入,以及各个端口是否已经打开。使用命令:
# netstat -a
可以检测端口是否已经打开。
一些常用的端口号为:ftp:21;telnet:23;smtp:25;http:80;pop-3:110;netbios-ssn:139;squid:3128;mysql:3306。
掌握OSI模型、TCP/IP模型及相关服务对应层,对于Linux网络故障分析与排除是非常重要的。当对OSI模型有一个透彻地了解时,故障诊断就变得易如反掌。如果能够配置一些网络检测工具,对于网络故障分析与排除也是非常有用的。