使用 ping, route, traceroute 来侦测网络问题!
老是看到有朋友在网络上哀嚎说:『我的网络不通啊!』还有比较奇怪的是『啊!怎么网络时通时不通』之类的问题,
这类的问题其实主要可以归类为硬件问题与软件设置问题。硬件的问题比较麻烦,因为需要通过一些专门的设备来分析硬件;
至于软件方面,绝大部分都是设置错误或者是观念错误而已,比较好处理啦 (第四章谈到的就是软件问题)!
OK!我们先来看看网络在哪里可能会出问题吧!
在第二章的网络基础当中我们曾提到很多的网络基础概念, 以及一些简单的硬件维护问题。以一个简单的星形连接来说,我们可以假设他的架构如同下图所示:
在上面的图标当中,"Linux PC3" 要连到 Internet 上面去的话,需要通过网络线、交换器、 NAT 主机 (Linux 服务器或 IP 分享器)、ADSL 调制解调器,附挂电话线路、ISP 自己的机房交换器,以及 Internet 上面的所有媒体设备 (包括路由器、桥接器、其他网络线等等);那么哪些地方可能会出问题啊?
上述是一些最常见的硬件问题,当然啦,有的时候是设备本身就有问题,而我们在网络基础里面谈到的那个很重要的『 网络布线 』的情况,也是造成网络停顿或通顺与否的重要原因呐!所以,硬件问题的判断比较困难点。 好~底下我们再来聊一聊软件设置的相关问题。
所谓的软件问题,绝大部分就是 IP 参数设置错误啊,路由不对啊,还有 DNS 的 IP 设置错误等等的, 这些问题都是属于软件设置啦!只要将设置改一改,利用一些侦测软件查一查,就知道问题出在哪里了!基本的问题有:
既然问题发生了,就要去处理他啊!那如何处理呢?以上面的星形连接图标为例,把握两个原则:
实际上,如果网络不通时,你可以依序这样处理:
通过这些处理动作后,一般来说,应该都可以解决你无法上网的问题了!当然啦,如果是硬件的问题,那么鸟哥也无法帮你, 你可能最需要的是......『送修吧孩子!』
既然知道上面已经谈到的几个小重点了,接下来当然是一个一个的给他处理掉啊!
底下我们就得要一步一脚印的开始检查的流程啊!
其实,网络一出问题的时候,你应该从自己可以检查的地方检查起,因此, 最重要的地方就是检查你的网络卡是否有工作的问题啦!检查网络卡是否正常工作的方法如下:
[root@www ~]# ifconfig eth0 192.168.1.100
|
[root@www ~]# ping 192.168.1.100
|
在确认完了最重要的网络卡设置之后,并且确定网络卡是正常的之后,再接着下来则是局域网路内的网络连接情况了!假设你是按照 图 6.1-1 所设置的星形连接局域网路架构,那么你必须要知道整个『网域』的概念!
假设你的区网内所有的主机 IP 都设置正确了,那么接下来你就可以使用 ping 来测试两部区网内主机的连接, 这个连接的动作可以让你测试两部主机间的各项设备,包括网络线、Hub/Switch 等等的咚咚! 如果无法测试成功,那就请了解一下:
确定自己主机的 IP 与网卡没有问题,加上内部区网通过 ping 也测试过没有问题,接下来就是要『取得可以对外连接的 IP 参数』啦!这个重要!
什么叫『取得正确的 IP 参数』啊?还记得我们谈过如果要顺利的连接上 Internet 的话, 必须要可以跟 public IP 进行沟通才行,而与 public IP 取得沟通的方法,在台湾比较常见的有 ADSL, Cable modem, 学术网络, 电话拨接等等。在 CentOS 当中,我们可以通过修改 /etc/sysconfig/network-scripts/ifcfg-eth0,或者是利用 rp-pppoe 来进行拨接, 无论如何,你就是得要连接到某个 ISP 去就是了~
在你确认所有的区网没有问题之后,参考一下第四章的介绍,连上之后,立即以 ifconfig 看看有没有捉到正确的 IP 啊? 在台湾如果使用 ADSL 连接的话,你应该可以顺利的取得一组正确的 Public IP 参数的!
另外,最常发现无法顺利取得 IP 的错误就是『BOOTPROTO』这个设置值设置错了!因为 static 与 dhcp 协定所产生的 IP 要求是不一样的啊!还记得吧!要特别留在 ifcfg-eth0 里面的设置参数喔!另外,如果你是使用 ADSL 拨接的, 但是老是无法拨接成功,那么建议你可以这样试看看:
因为很多时候都是由于网络媒体过热,也有可能主机内部的一些网络参数有点问题, 所以,干脆就不要启动网卡,让 adsl-start 自动去启动网卡即可! 如果顺利取得 IP 后,却还是无法顺利连到 Internet 上面时,你觉得还有哪些地方需要处理的呢?
如果你已经顺利取得正确的 IP 参数的话,那么接下来就是测试一下是否可以连上 Internet 啊! 鸟哥建议你可以尝试使用 ping 来连连看 Hinet 的 DNS 主机,也就是 168.95.1.1 那部机器啦!
[root@www ~]# ping -c 3 168.95.1.1
|
如果有回应,那就表示你的网络『基本上已经没有问题,可以连到 Internet 了!』, 那如果没有回应呢?明明取得了正确的 IP 却无法连接到外部的主机,肯定有鬼!呵呵!没错! 还记得我们在网域内数据的传输可以直接通过 MAC 来发送, 但如果不在区网内的数据,则需要通过路由,尤其是那个缺省路由 (default route) 来帮忙转递封包吧! 所以说,如果你的 public IP 无法连接到外部 (例如 168.95.1.1) ,可能的问题就出在路由与防火墙上面了。假设你没有启动防火墙,那问题就缩小到剩下路由啰~ 那路由的问题如何检查?就用 route -n 来检查啊!
例题:
假设有个使用 ADSL 拨接的 Linux 主机,他的路由表如下,你觉得出了什么问题?
答:Destination Gateway Genmask Flags Metric Ref Use Iface 59.104.200.1 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo 0.0.0.0 192.168.1.2 0.0.0.0 UG 0 0 0 eth0
仔细看到上面的路由输出,第一条是 ppp0 产生的 public IP 接口,第二条是 eth0 的内部网域接口,再看到最后一条的 0.0.0.0/0.0.0.0
这个缺省路由,竟然是内部网域的 eth0 为 gateway ?不合理,最大的问题应该是出在 ifcfg-eth0 里面不小心设置了『GATEWAY=192.168.1.2』
所致,解决的方法为:
|
另外一个可能发生的情况,就是:『忘记设置缺省路由』啦!例如使用 ifconfig 手动重新设置过网络卡的 IP 之后,其实路由规则是会被更新的,所以缺省路由可能就会不见了!那个时候你就得要利用 route add 来增加缺省路由啰!
如果你发现可以 ping 到 168.95.1.1 这个 Internet 上面的主机,却无法使用浏览器在网址列浏览 http://www.google.com 的话,那肯定 99% 以上问题是来自于 DNS 解析的困扰!解决的方法就是直接到 /etc/resolv.conf 去看看设置值对不对啊!一般常见的内容是这样的:
[root@www ~]# vim /etc/resolv.conf
nameserver 168.95.1.1
nameserver 139.175.10.20
|
最常见的错误是『那个 nameserver 的拼字写错了!』真是最常见的问题~另外,如果 client 端是 Windows 系统呢?常常初学者会搞错的地方就是在 windows 的设置了!要注意:Windows 端的 DNS 设置与主机端 /etc/resolv.conf 的内容相同即可!很多初学者都以为 TCP/IP 内的 DNS 主机是填上自己的 Linux 主机,这是不对的 (除非你自己的 Linux 上面有 DNS 服务) !你只要填上你的 ISP 给你的 DNS 主机 IP 位置就可以了
另外,每一部主机都会有主机名称 (hostname) ,缺省的主机名称会是 localhost ,这个主机名称会有一个 127.0.0.1 的 IP 对应在 /etc/hosts 当中。如果你曾经修改过你的主机名称,该主机名称却无法有一个正确 IP 的对应, 那么你的主机在开机时,可能会有好几十分钟的延迟。 所以啰,那个 /etc/hosts 与你的主机名称对应,对于内部私有网域来说,是相当重要的设置项目呢!
NAT 服务器最简单的功能就是 IP 分享器啦!NAT 主机一定是部路由器,所以你必须要在 Linux 上面观察好正确的路由信息。否则肯定有问题。另外, NAT 主机上面的防火墙设置是否合理? IP 分享器上面是否有设置抵挡的机制等等,都会影响到对外连接是否能够成功的问题点。 关于 NAT 与防火墙我们会在后续的章节继续介绍的啦!
Internet 也会出问题喔!当然啦~没有任何东西是不会出问题的!举例来说,好几年前台湾西岸因为施工的关系, 导致南北网络骨干缆线被挖断,结果导致整个 Internet 流量的大塞车!这就是 Internet 的问题~还有,数年前 Study Area 网站放置的地点由于路由器设置出了点差错, 结果导致连接速度的缓慢。这都不是主机本身出问题,而是 Internet 上面某个节点出了状况。 想要确认是否问题来自 Internet 的话,就使用 traceroute 吧! 查察看问题是来自那个地方再说!
如果上述的处理都 OK ,却无法登录某部主机时,我想,最大的问题就是出现在主机的设置啦!这包括有:
基本上,一个网络环境的检测工作可不是三言两语就讲的完的~而且常常牵涉到很多经验的问题~ 请你常常到一些讲座的场合去听听看大家的经验,去 google 看看人家的解决方法, 都有助于让你更轻易的解决网络问题的喔! ^_^!鸟哥也将上述的动作规划成一个流程图,参考看看: