当linux操作系统产生网络故障时,应先从硬件到软件、从自身到全局。
1,检查网线、网卡。
到机房里检查网线两端是否都亮灯,普通服务器的话应该是绿灯常亮为正常,交换机绿灯闪烁表示正在传输数据。
也可以通过命令ethtool ethX来查看某一网卡的链路是否物理连通。
其中,
speed是当前网卡的速度,这是一个千兆网卡;Duplex显示了当前网络支持全双工;link detected表示当前网卡和网络的物理连接状态,yes就是正常。通常网速和全/半双工状态是主机和网络协议商自动协商的,例如这里第8行的 auto-negotiation。
speed是当前网卡的速度,这是一个千兆网卡;Duplex显示了当前网络支持全双工;link detected表示当前网卡和网络的物理连接状态,yes就是正常。通常网速和全/半双工状态是主机和网络协议商自动协商的,例如这里第8行的 auto-negotiation。
2.确定网线是通的之后,再看物理网卡。
ifconfig可以看到已成功加载的网卡,用ethtool -i ethX可以看到网卡驱动。lspci可以看到所有连接到pci总线的设备,lsmod显示所有已加载的模块, 加载成功的模块也会在/proc/modules中显示。一般情况下,成功加载网卡后,用ifconfig就可以看了。如果此时找不到网卡,那么应该查看物理网卡有没有连接到pci总线上,lspci检测不到的话很有可能就是网卡坏了。还有一种情况是没有加载网卡模块,先去lspci里找到对应厂商和型号:Ethernet Controller,再用
modprobe尝试加载正确的模块,比如modprobe 3c509。如果出现错误,说明该模块不存在。这时候你应该找到正确的模块并且重新编译。
modprobe尝试加载正确的模块,比如modprobe 3c509。如果出现错误,说明该模块不存在。这时候你应该找到正确的模块并且重新编译。
3.网卡物理层没有问题之后,再看网卡配置。用ifconfig就可以看到ip、掩码等等,永久修改网卡信息在/etc/sysconfig/network-scripts/ifcfg-ethX(有些linux发行版不一定是这个文件名,但路径多差不多。它上一层中的network文件是修改hostname的),这个文件也是放入DNS的正确地方。修改之后重启network。
4.检查自身路由表是否正确。用route -n查看内核路由表
,通过route命令查看内核路由,检验具体的网卡是否连接到目标网路的路由,之后就可以尝试ping 网关,排查与网关之间的连接。如果无法ping通网关,可能是网关限制了ICMP数据包,或者交换机设置的问题。一个很常见的问题:两块网卡分别提供内网和外网服务,如果默认网关是内网网卡,那么外网服务是访问不到的。这时需要删除再添加默认网关。用route delete/add default gw 命令。
,通过route命令查看内核路由,检验具体的网卡是否连接到目标网路的路由,之后就可以尝试ping 网关,排查与网关之间的连接。如果无法ping通网关,可能是网关限制了ICMP数据包,或者交换机设置的问题。一个很常见的问题:两块网卡分别提供内网和外网服务,如果默认网关是内网网卡,那么外网服务是访问不到的。这时需要删除再添加默认网关。用route delete/add default gw 命令。
现在自身问题已经检查了一遍,看全局。
5.首先看DNS,在/etc/resolve.conf可看到指定域名服务器,但是这里是不能修改的这个文件又networkManager自动产生,修改要去
etc/sysconfig/network-scripts/ifcfg-ethX
。
光看是没有用的,nslookup可以用来诊断DNS服务器。简单使用:
server是本机所指向的DNS服务器地址,大家可以把自己的DNS地址换成114.114.114.114试一试。
6.如果DNS也没有问题,接下来就要检查是否可以正常路由到某一台主机,或者说当连接不到某一台远端主机时,应该如何追踪路由。
traceroute 是用来跟踪从发出数据包的主机到目标主机之间所经过的网关的工具
。
参数选项:
-i 指定网络接口,对于多个网络接口有用。比如 -i eth1 或-i ppp1等;
-m 把在外发探测试包中所用的最大生存期设置为max-ttl次转发,默认值为30次;
-n 显示IP地址,不查主机名。当DNS不起作用时常用到这个参数;
也可以在检查时排除DNS的问题。
记录按序列号从1开始,每个纪录就是一跳 ,每跳表示一个网关,我们看到每行有三个时间,单位是 ms,其实就是-q的默认参数。探测数据包向每个网关发送三个数据包后,网关响应后返回的时间
。
星号表示防火墙封掉了ICMP的返回信息。大家感兴趣可以挨个百度下显示的ip,比如我用的是世纪互联提供的公共DNS(114.114.114.114),那么上图中211.99.171.25一查就是世纪互联的网关。
6.接下来要检查的是远端主机的服务端口是否打开。可以用telnet和nmap来检查,没有这两个工具的话自行yum安装。比如我们要看下百度的80端口是否打开了:
状态STATE是open表示开启,如果是filtered表示被防火墙过滤了,大家可以试下百度的22端口,肯定是filtered状态。
也可以查看自身的端口有没有打开,不多举例了。自身端口用的比较多的命令是netstat。
其中第一列是套接字通信协议,第2列和第3列显示的是接收和发送队列,第4列是主机监听的本地地址,反映了该套接字监听的网络;第6列显示当前套接字的状态,最后一列显示打开端口的进程。
7.如果网络还有问题的话就要检查iptables策略和SELinux了。定位问题前最好将SELinux关了,用iptables -L可查看iptables的规则。
涉及到网络的流量监控和性能评估问题,我会单独再整理出一篇博文。
参考资料:http://www.cnblogs.com/Security-Darren/p/4700387.html
http://edu.yjbys.com/wangluozhenduan/104831.html
《高性能Linux服务器构建实战–系统安全、故障排查、自动化运维与集群架构》
版权声明:本文为sinat_20415509原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。