鸟哥的 Linux 私房菜 -- Linux 网络侦错功能

since2012/04/23

     
 
Linux 网络侦错
本文已不再维护,更新文章请参考此处
最近更新日期:2003/08/19
Linux 最强的,也是最让人称道的地方,就是他的网络功能了,不论是 Mail server、Web server、Proxy server等等,都好好用喔!但是,我们也常在网络上看到一堆常见的问题,就是在问『我的 Linux 没有办法连上网络,该如何是好....』等等的问题,问来问去的重点大概都是一样的状况!伤脑筋!那鸟哥就把一些在 Linux 上面可能会发生的网络问题把他整理一下,看看您是不是有这方面的问题,参考看看吧!

大标题的图示了解发生网络问题的可能状况:
    Linux 最强的,也是最让人称道的地方,就是他的网络功能了,不论是 Mail server、Web server、Proxy server等等,都好好用喔!但是,我们也常在网络上看到一堆常见的问题,就是在问『我的 Linux 没有办法连上网络,该如何是好....』等等的问题,问来问去的重点大概都是一样的状况!伤脑筋!那鸟哥就把一些可能的问题把他整理一下,看看您是不是有这方面的问题,参考看看吧!
     
    问题的解决顺序应该是从自己可以掌握的地方着手,再慢慢的向上面来查核问题所在!基本上,问题的解决流程可以如下:
     
    1. 了解一下可能的问题发生状况:
    2. 看自己的网络卡是否正常工作;
    3. 能不能 ping 到同一网域中的计算机 IP 呢 ( 局域网络 );
    4. 看自己的 DNS 是否设定正确 ;
    5. 局域网络中 NAT 不能工作?看看 /etc/sysconfig/network;
    6. 看看 ADSL 或者是 Router 有没有问题?traceroute 拨接的问题;
    7. 是否主机的服务被关掉了? check 看看 inetd.conf /etc/xinetd.d ;
    8. 一些服务的权限与允许浏览权是否有开放;
     
    底下我们先来谈一谈有哪些常见的可能网络问题状况,先以简单的局域网络联机架构图<下图>的表示方式:
     

    图一、局域网络的联机状态示意图
     
    如上面的局域网络接线法中,一般而言,造成网络问题的情况可以粗分为
     
    1. 网络硬件传输的部分;与
    2. 操作系统、通讯协议或者相关服务的设定之软件问题!
     
    我们分别来谈一谈这些问题吧!
     

    网络硬件传输的问题
     
    1. 网络线材的问题:

    2. 在上面的图示中,可以发现,其实网络接口设备中,使用最多的就是网络线啦!由于网络线分成并行线跳线 ( RJ-45接头 ) 以及以前较流行的同轴电缆线,且,其实网络线常常是接在门缝处,有可能被压毁的!所以,您需要注意一下这些事情:
       
      • 网络线被截断;
      • 网络线过度扭曲变形造成讯号不良;
      • 自制网络接头 ( 如RJ-45跳线头 ) 品质不良;
      • 网络接头与设备 ( 如 Hub )接触不良;
       
    3. 网络卡、Hub 及 Router 等网络设备的问题:

    4. 另外,还有一些网络设备也会有问题,常见的问题如下:
       
      • 网络卡不稳定、质量不佳,或者与整体系统的兼容度不佳;
      • 各网络设备的接头不佳,接触不良,造成讯号衰减;
      • 各网络设备使用方法不良,造成设备功能衰减;
       
    5. 设备配置的规则;

    6. 在各个设备的配置上是有一定的规则的,而最容易发生的问题就是太长的网络线会造成讯号的衰减,导致网络联机的时间太长甚至无法联机:
       
      • 使用错误的网络线,最常发生在并行线与跳线的分别!
      • 路设网络线过长,导致讯号衰减太严重。以最常见的最高质量 ( CAT5等级,亦即目前在市面上最常看到的产品,最大传输速度可达 100 Mbps ) RJ-45 并行线来说,他的限制长度大概是在 90 公尺左右,也就是说,在两个设备之间 ( 如网络卡与 Hub 的距离� ) 荦萚u长度当然以不超过 90 公尺为原则了;
      • 其他噪声的干扰,最常发生在网络线或者网络设备旁边有太强的磁波;
      • 局域网络上面,节点或者其他的设备太多,过去我们常以所谓的 543 原则来说明:
        • 5个网段(segment)。所谓segment就在物理连接上最接近的一组计算机﹐在一个BNC网段里面最多只能接30台计算机﹐且网线总长不能超过185m。
        • 4个增益器(repeater)。也就是将信号放大的装置。
        • 3个计算机群体(population)。这个不好理解﹐也就是说前面所说的5个segment之中﹐只能有3个可以装计算机﹐其它两个不行。
     

    软件设定的问题
     
    1. 网络卡的 IP 设定错误:

    2. 例如:同一个 IP 在同一个网段中出现造成IP冲突、子屏蔽网络设定错误、网络卡的驱动程序使用错误、网络卡的 IRQ、 I/O Address 等等;
       
    3. 路由的问题 ( Router ):

    4. 这方面的问题出在 Gateway 的设定错误,或者是路由设定不正确,导致数据封包没有办法顺利的送出去;
       
    5. 通讯协议的问题 ( Protocol ):

    6. 最常发生在不同的接口设备的通讯了!例如 windows2000 与 98 之间的『网络上的芳邻』之沟通中,以增加安装 NetBEUI 这个通讯协议似乎是比较好的解决方案!
       
    7. 网络负荷问题 ( Loading ):

    8. 当同时有大量的数据封包涌进 Server 或者是 Hub 或者是同一个网域中,就有可能造成网络的停顿甚至挂点!
       
    9. 其他问题:

    10. 例如:一些 port 被防火墙挡住了,造成无法执行某些网络资源;应用程序本身的 Bug 问题;应用程序中用户的网络设定错误;以及不同的操作系统的兼容性问题等等。
     

    解决问题的方法:
     
    1. 知道问题之后当然就要解决了!以上图为例,我们需要由自身的 PC 上的网络卡查起,到网络线、到 Hub 在到 ATU-R 等等的硬件先检查完;

    2.  
    3. 确定硬件没问题了,再来思考软件的设定问题!
     
    由下一节开始,我们就一个步骤一个步骤的进行 Linux 的网络检验吧!

大标题的图示步骤一:网络卡工作确认
其实,网络一出问题的时候,您应该从自己可以检查的地方检查起,因此,最重要的地方,就是您的网络卡是否有工作的问题啦!检查网络卡是否正常工作的方法如下:
  1. 使用 lsmod 看看网络卡的模块是否已被加载:

  2. 除非曾经自行编译过核心,否则网络卡的驱动程序应该是以模块的型态存在才对!由于网络卡是最基本的网络组件之一啦!没有他,自然也就无法连上 Internet ,所以啰,请先确认一下的网络卡是否已经被驱动吧!这个时候当然就要使用 lsmod 来看看啦!
    [root@test root]# lsmod
    Module                  Size  Used by    Tainted: P
    ipt_MASQUERADE          1216   1 (autoclean)
    iptable_filter          1696   1 (autoclean)
    ip_conntrack_irc        2592   0 (unused)
    ip_conntrack_ftp        3328   0 (unused)
    ip_nat_irc              2400   0 (unused)
    ip_nat_ftp              2976   0 (unused)
    iptable_nat            13588   3 [ipt_MASQUERADE ip_nat_irc ip_nat_ftp]
    ip_tables              11232   5 [ipt_MASQUERADE iptable_filter iptable_nat]
    ip_conntrack           13356   3 [ipt_MASQUERADE ip_conntrack_irc ip_conntrack_ftp ip_nat_irc ip_nat_ftp iptable_nat]
    ppp_async               6240   1 (autoclean)
    8139too                14208   2   <==这个就是我的螃蟹卡模块啦!
    usbcore                29632   0 (unused)
    呵呵!没错!我的网络卡已经挂上去啦!所以没有问题!那么如果没有发现呢?嗯!那么很可能是没有捉到硬件啰!这个时候请先以 dmesg 确认一下是否已经捉到了网络卡啰!
    [root@test root]# dmesg
    ....略....
    PPP generic driver version 2.4.1
    NET4: Linux TCP/IP 1.0 for NET4.0
    IP Protocols: ICMP, UDP, TCP, IGMP
    IP: routing cache hash table of 512 buckets, 4Kbytes
    TCP: Hash tables configured (established 4096 bind 4096)
    Linux IP multicast router 0.06 plus PIM-SM
    NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
    VFS: Mounted root (ext2 filesystem) readonly.
    8139too Fast Ethernet driver 0.9.24  <==确实有捉到啰!
    eth0: RealTek RTL8139 Fast Ethernet at 0x6100, 00:50:fc:22:9c:57, IRQ 10
    eth0:  Identified 8139 chip type 'RTL-8139C'
    eth1: RealTek RTL8139 Fast Ethernet at 0x6300, 00:50:fc:22:9a:cb, IRQ 11
    eth1:  Identified 8139 chip type 'RTL-8139C'
    eth0: Setting half-duplex based on auto-negotiated partner ability 0000.
    eth1: Setting 100mbps full-duplex based on auto-negotiated partner ability 41e1.
    嗯!确实是有捉到我的网络卡啦!是 Ethernet 的网络卡呦!
     
  3. 使用 ifconfig 看看是否有网络卡的运作出现:

  4. 在确定网络卡已经被捉到之后,硬件就没有问题了,再来就是网络卡的软件设定问题。通常使用了 ifconfig 之后,会出现目前网络卡的 IP 状态说明,如果没有任何网络硬件被驱动的话,那就以 ifup eth0 来启动,再以 ifconfig 来看看网络设备的运作!如果还是没有办法启动的话,就需要来重新安装网络卡的驱动程序!如何确定网络卡有无正常工作呢?简单的很,就是使用 ifconfig 这个指令来检查一下吧!
    [root@test root]# ifconfig
    eth0      Link encap:Ethernet  HWaddr 00:50:FC:22:9A:CB
              inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:35747 errors:0 dropped:0 overruns:0 frame:0
              TX packets:38701 errors:0 dropped:0 overruns:0 carrier:0
              collisions:567 txqueuelen:100
              Interrupt:11 Base address:0x6300

    eth1      Link encap:Ethernet  HWaddr 00:90:CC:08:49:13
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:79570 errors:0 dropped:0 overruns:0 frame:0
              TX packets:69642 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:100
              Interrupt:10 Base address:0x6100

    lo        Link encap:Local Loopback
              inet addr:127.0.0.1  Mask:255.0.0.0
              UP LOOPBACK RUNNING  MTU:3924  Metric:1
              RX packets:4553 errors:0 dropped:0 overruns:0 frame:0
              TX packets:4553 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0

    ppp0      Link encap:Point-to-Point Protocol
              inet addr:140.116.141.114  P-t-P:140.116.141.253  Mask:255.255.255.255
              UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1
              RX packets:27577 errors:0 dropped:0 overruns:0 frame:0
              TX packets:25980 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:10

    如上所示,是我的网络的设定,我共有两个网络卡,设备名称分别为 eth0  (对内,私有 IP )及 eth1 (对外),而由于我是使用 ADSL 拨接的,所以就有 ppp0 这个网络接口啰!至于第三个 lo 是主机内部的递归网络,这是每部机器都会有的。如上所述,那我的三个接口都有出来,并且 eth0 的 IP 是 192.168.1.2 这一个,那就表示设备应该没有问题才对!如果想要确定一下到底网络有没有通,您可以使用 ping 的功能:
    [root@test root]#  ping -c 5 192.168.1.2
    PING 192.168.1.2 (192.168.1.2) from 192.168.1.2 : 56(84) bytes of data.
    64 bytes from 192.168.1.2: icmp_seq=0 ttl=255 time=0.2 ms
    64 bytes from 192.168.1.2: icmp_seq=1 ttl=255 time=0.2 ms
    64 bytes from 192.168.1.2: icmp_seq=2 ttl=255 time=0.2 ms
    64 bytes from 192.168.1.2: icmp_seq=3 ttl=255 time=0.2 ms
    64 bytes from 192.168.1.2: icmp_seq=4 ttl=255 time=0.1 ms

    --- 192.168.1.2 ping statistics ---
    5 packets transmitted, 5 packets received, 0% packet loss
    round-trip min/avg/max = 0.1/0.1/0.2 ms

    如果有响应的话,如上面所示,那就是正常啦!
     
  5. 不必拨接的已知固定式 IP 的检查方式:

  6. 假如已经知道您的公共 IP 、 通讯闸 (GateWay),且不必拨接的情况 (Giga 的 ADSL 不算这一种!),您可以直接修改 /etc/sysconfig/network 以及 /etc/sysconfig/network-scripts/ifcfg-eth0 这两个档案,然后以 ifup eth0 启动网络卡,并以 ping 您的网络卡 IP 来看看是否有正常工作。
    [root@test root]# vi /etc/sysconfig/network
    NETWORKING=yes
    FORWARD_IPV4=yes
    HOSTNAME=your.domain.name
    例如上面的范例,需要注意的地方是在 GATEWAY=及 GATEWAYDEV=eth0 这个地方 (只需要有一个即可) ,例如成大环工的 gateway IP 是 140.116.44.253 ,那您只要将您的 gate way 设定成那个 IP 就是了(就是 GATEWAY=140.116.44.253 )!而的公共 IP 的修改方法为:
    [root@test root]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
    DEVICE=eth0
    BOOTPROTO=none
    BROADCAST=140.116.44.255
    IPADDR=140.116.44.125
    NETMASK=255.255.255.0
    NETWORK=140.116.44.0
    GATEWAY=140.116.44.253
    ONBOOT=yes
    在上面的例子中,的 IP 是 140.116.44.125,则可以广播的地址共有 140.116.44.1-255( 140.116.44.255那一个 ),而您的子屏蔽网络为 255.255.255.0。好了!都设定完成之后,那就直接以下面的方式来启动:
    [root@test root]# /etc/rc.d/init.d/network restart
    [root@test root]# ifup eth0
    [root@test root]# ping -c 5 140.116.44.125
    看看网络卡是否正常的启动了呢?
     
  7. 需拨接的网络卡 IP :

  8. 通常建议直接在 /etc/sysconfig/network 及 /etc/sysconfig/network-scripts/ifcfg-eth0 中,给予一个虚拟 IP 后,再 ping 您的网络卡 IP 。这是由于拨接式 ADSL 在拨接之前是没有公共 IP 的,所以我们先以私有 IP 来测试看看网络卡是否可以正常启动吧:
    [root @test /root]# vi /etc/sysconfig/network
    NETWORKING=yes
    FORWARD_IPV4=yes
    HOSTNAME=your.domain.name
    网友们最常发生问题的地方在于,您是以 eth1 来作为拨接的网络卡,但是却将 GATEWAYDEV 设定成 eth0 ,那样的话,您对外要求的封包将都会透过 eth0 这个私有 IP 的网络卡向外要求数据,由于私有 IP 没有办法连上 Internet ,所以,您的网络就完全上不了 Internet 啦!所以这里的设定要注意一下啰!
    [root @test /root]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
    DEVICE=eth0
    BOOTPROTO=none
    BROADCAST=192.168.1.255
    IPADDR=192.168.1.2
    NETMASK=255.255.255.0
    NETWORK=192.168.1.0
    ONBOOT=no
    GATEWAYDEV=ppp0
    在上面的例子中,将网络卡的私有 IP 设定成为 192.168.1.2 这一个!有一个习惯的错误在于将 BOOTPROTO ( 通讯协议 ) 设定成 DHCP ,这是不对的,因为您的网络是透过拨接的方式,在拨接的过程中就会由 rp-pppoe 拨接程序连接到 ISP 以 PPP 协议来设定好您自己的网络参数,所以这里设定 DHCP 是没有意义的!这里只要设定成 none 就行了!千万注意了!然后再以下面的方式来确认网络卡的运作与否:
    [root@test root]# /etc/rc.d/init.d/network restart
    [root@test root]# ifup eth0
    [root@test root]# ping -c 5 192.168.1.2
    请注意呦!这个部分不需要修改也没有关系,如果您的设定是『 ONBOOT=no 』,嘿嘿!所以开机的时候并不会启动网络卡,那么实际拨接的时候就不会有干扰啰!如果需要启动拨接系统来确认拨接是否可行,可以按照上面的方式修改完两个档案,然后将 adsl-setup 设定完成,之后以下面的方式来启动 ADSL 试试看:
    [root@test root]# ifdown eth0
    [root@test root]# /etc/rc.d/init.d/network restart
    [root@test root]# adsl-start
    事实上,在 ADSL 拨接之前有没有启动 eth0 都没有关系,不过,有时候就是那么悬疑,启动了 eth0 就是没有办法拨接成功,那么您就可以将 eth0 先关闭再进行拨接试看看,通常就可以成功了。启动之后,再以 ping 的方式来确定一下网络:
    [root@test root]# ping -c 5 your.IP
    [root@test root]# ping -c 5 168.95.1.1
    [root@test root]# ping -c 5 tw.yahoo.com
    如果确定可以连上 Internet 之后,就将 adsl-start 写进 /etc/rc.d/rc.local 中吧!
     
  9. 重新安装网卡驱动程序:

  10. 如果上面的方式都没有办法来正常启动您的网络卡时,那就只好再捉一次您的网卡驱动程序了。首先看看驱动程序对不对吧! 假设您买的是螃蟹卡,那么您的 /etc/modules.conf 内容就会有点像这样 ( 在 Red Hat 6.x 以前的档案,档名为 /etc/conf.modules !):
    [root@test root]# vi /etc/modules.conf
    alias eth0 rtl8139
    alias eth1 viarhine
    在上面的例子中,由于我有两块网络卡,第一块是属于螃蟹卡 (芯片为 RelTeck8139) ,第二块是 VIA 的芯片 ( 直接以 viarhine 来驱动 ) 第三行是将 viarhine 这个芯片驱动的意思。万一插了两张相同的网络卡,那要如何来区分网络卡的先后次序呢?!例如插了两块 rtl8139 的网络卡,那可以这样写 ( 增加 io 及 irq 的控制参数 ):
    [root@test root]# vi /etc/modules.conf
    alias eth0 rtl8139
    alias eth1 rtl8139
    options rtl8139 io=0x300,0x320 irq=3,5
    上面是说,两块卡的io 与 irq 分别为 0x300, 3 及 0x320, 5。至于这方面的相关信息,可以进入 windows 系统中看过 ( 所以说,可以安装成多成操作系统啦! ) 再来修改吧!好了,那如果要重新安装网络卡的驱动程序呢?!嗯!翻回连上 Internet 那一章节察看吧!通常的网卡驱动程序安装方法步骤如下:
    1. 下载您的网卡驱动程序;
    2. 编译并安装模块;
    3. 修改 /etc/conf.module 档案;
    4. 修改 /etc/sysconfig/network 档案;
    5. 修改 /etc/sysconfig/network-scripts/ifcfg-eth0 档案;
    6. 以 ifup eth0 来启动您的 网络卡 试试看啰!
    您只要将您的网络设备与您的芯片名称写上正确的,再加上将该芯片的驱动程序编译完成,并摆在 /lib/modules/`uname -r`/kernel/drivers/net 里面即可 ( 若核心为 2.2.xx 则需要摆在 /lib/modules/2.X.X/net里面即可啰!)
     
    VBird 的建议:
    其实,在架设 Linux 服务器的过程中,大概最麻烦的地方就是在网络的设定这里了,尤其是后续的一些局域网络的联机设定 ( 如果涉及 NAT 主机来分享网络带宽的话,将会更麻烦! ) ,所以这里 VBird 要给大家一个建议,就是遇到网络卡设定的瓶颈的时候,干脆先买一块很便宜,但是支持度很高的螃蟹卡 ( 我去大卖场看过,最便宜的只要 250 不到就有了! ) ,先将网络架设起来再说!否则一个新手花了很多的时间去搞一块莫名的网络卡,常常会磨损一个 Linux 爱好者的耐心!

大标题的图示步骤二:局域网络硬件联机确认
    在确认完了最重要的网络卡设定之后,并且确定网络卡是正常的之后,在接着下来是局域网络内的网络连接情况了!假设是按照图一所设定的局域网络架构,那么的局域网络内的要求有下面几点:
    1. 关于 IP 的设定:假设的私有 IP 段为 192.168.1.0/24 ,那的局域网络内的所有计算机的 IP 应该介于 192.168.1.1 - 192.168.1.254,且所有的计算机的 子屏蔽网络 ( Netmask ) 均为 255.255.255.0 ,并且 IP 在所有的计算机都不可以重复;

    2.  
    3. 关于 Gateway 与 DNS 的设定:假设的 Linux 对内 IP 为 192.168.1.2,那么所有局域网络内,其他的个人计算机的 通讯闸 应该是 192.168.1.2 这一个,此外,您的 DNS 应该设定为 ISP 给的 DNS IP 呢!例如 Hinet 的 168.95.1.1 ,如果不晓得的 DNS 应该设定多少,那就设定为 168.95.1.1 即可!『注意!不要设定为 192.168.1.2』;

    4.  
    5. 关于 Windows 端的通讯协议:局域网络内其他的 windows 系统的通讯协议仅需要 TCP/IP 即可,不过,您也可以额外安装 NetBEUI ,除非您的网域内尚有其他的 Windows 服务器的服务,否则不要安装额外的通讯协议了!安装过多的通讯协议可能会造成联机过慢的情况;

    6.  
    7. 关于 Windows 端的工作组与计算机名称:假如还需要资源共享,那么就必须在 windows 系统中开放档案分享,并且建议所有的计算机将『工作组』设定相同,但『计算机名称』则不能相同!
    反正就是我们在 网络基础 里面谈到的网络参数设定啦!那些设定都需要正确无误才行。好了,那若要问:局域网络内的计算机是否联机成功?最简单的方是就是以 ping 来测试啦!假设我是在 Linux 主机端 ( 192.168.1.2 这一个 IP ) 那我只要在主机端下达:
    [root@test root]# ping -c 5 192.168.1.100
     
    就可以知道 192.168.1.100 这部计算机是否可以跟我的主机相通!如果不能连通呢?!说说可能的原因:
    1. Windows 端的设定不对:

    2. 仔细看一下刚刚提到的几个基本要求的设定,也就是 Netmask, Network, Broadcast, Gateway 等等,是不是都正确呢!如果不确定的话,请再回到 局域网络的联机架构 章节去看一下 Windows 的设定。
       
    3. 联机线材不对:

    4. 要晓得,两块网络卡之间是以『跳线』来直接连接,至于网络卡与 Hub/Switch 是以『并行线』连接。因为网络线(RJ-45)分成并行线与跳线,两种规格并不相同。而在 Hub 的形式方面,目前较新的 ADSL 调制解调器,连接到 Hub 都必须要连到 uplink 这个孔了,所以必须以跳线连接 Hub 到 ADSL 调制解调器才行!此外,目前 ADSL 调制解调器大都有一个私有 IP 为 192.168.1.1,那可以在的主机端下达 ping 192.168.1.1 来看看两者是否有连通!这时请注意,将的网络卡连接到 调制解调器 的那一个,设定的 IP 成为 192.168.1.2,并且重新启动 ifup eth0 ,才可以进行测试!注:还有一个简单的检视方法,那就是接到 Hub 上面之后,并且开启所有的装置电源,则全部的有接上装置的 Hub 插孔应该要『亮灯』才是对的,如果灯不亮,那就『肯定』有问题!当然啦,目前新的具有 Auto MDI/MDIX 功能的 Switch 可以自动分辨跳线与否,而中华电信的调制解调器规格也很多变~所以,还是得仔细的参考您的硬件说明书喔!
       
    5. 网络卡或 Hub 坏掉了:

    6. 不要怀疑!网络卡与 Hub 是会坏掉的!得小心一下这一个情况。
       
    7. 讯号太弱了:

    8. 这个最常发生在电话线接很长,或者是网络线接很长的情况,由于的线材可能不是很好,所以就会造成的网络会断断续续的!当然,也有可能是中华电信的机房本身提供给的讯号就不够强,这时,就必须请中华电信的工程师来帮处理处理了!

大标题的图示步骤三:确认路由表数据没有问题
在一般正常的情况之下,当您下达 route 这个指令的时候,您的路由表 ( route table ) 应该会很快的显示出来,如果万一不幸显示的速度非常之慢,那么通常就是您的网络设定可能『有点怪怪的』,当然啦,如果是您的系统还有设定了 IP alias 的话,那么就真的会有点慢慢的~不过没有关系,我们还是可以来测试一下是否有问题呢!?
 
[root@test root]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
140.116.141.253 *               255.255.255.255 UH    0      0        0 ppp0
192.168.1.0     *               255.255.255.0   U     0      0        0 eth0
127.0.0.0       *               255.0.0.0       U     0      0        0 lo
default         140.116.141.253 0.0.0.0         UG    0      0        0 ppp0
 
请注意,由于我有两块网络卡( 一块对内一块对外,我的系统架构就如同 图一 所显示的那样! ),加上我是以拨接的方式连上 Internet 的,所以自然就会有 eth0, eth1, ppp0 及本来就会有的 lo 这三个接口,而由于 eth1 这个接口是依附在 ppp0 上面的( 我的 ppp0 的拨接适配卡使用的是 eth1 呦!),所以自然也就没有 eth1 这个接口的设定!好了,那么我的路由接口自然就应该会有 eth0, ppp0, lo 这三个啦!那由于 lo 是 127.0.0.1 ,加上他是 A Class 的网络循环,因此就会得到上面的那一行!同时,我的默认通讯闸自然选择可以连上 Internet 的 ppp0 那块,所以也就成为 default 那一行啰!无论如何,我的 route 可以这样就设定妥当没有问题!
 
如果发生错的话,最常发生在这个地方的情况就是有点像底下的样子:
 
[root@test root]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
140.116.141.253 *               255.255.255.255 UH    0      0        0 ppp0
192.168.1.0     *               255.255.255.0   U     0      0        0 eth0
127.0.0.0       *               255.0.0.0       U     0      0        0 lo
default         192.168.1.2     0.0.0.0         UG    0      0        0 eth0
 
发现哪里有问题了吗?对啦!那个 default 怎么 gateway 为 192.168.1.2 呢?对啦!唯一有问题的地方就是在那儿!因为预设的 GATEWAY 变成了 192.168.1.2 这个私有 IP ,自然无法连接上 Internet ,那么当您使用『ping -c 5 202.1.237.21』当然也就会显示出封包递送的 IP 为 192.168.1.2 ,呵呵!完全连不出去!怎么办?!很简单啦!除了手动以 route 这个指令修改之外,也可以修改 /etc/sysconfig/network-scripts/ifcfg-eth0 这个档案,将里头的 GATEWAYGATEWAYDEV 的设定修正一下,就可以啦!加油!!

大标题的图示步骤四:确认 DNS 的 IP 设定
如果通过上面的问题确认,这个时候的网络情况应该是:
  1. 网络卡与室内的联机材料都是好的;
  2. 并且局域网络内的计算机都可以互通;
  3. 同时,adsl-start 已经正确的工作了;
  4. ping IP 可以 ping 的到,但是可能没有办法以浏览器直接浏览网站。
该如何是好!?嘿嘿!这时就需要注意的 DNS 设定了!通常,如果是 DNS 设定的问题的时候,发生的现象是这样的:(我们以雅虎站 tw.yahoo.com, IP:202.1.237.21 来说明)
  • 以 IP 来 ping 雅虎有数据可以传递:

  • 有点像这样:
    [root@test root]# ping -c 5 202.1.237.21
    PING 202.1.237.21 (202.1.237.21) from 211.74.152.23 : 56(84) bytes of data.
    64 bytes from 202.1.237.21: icmp_seq=0 ttl=246 time=103.6 ms
    64 bytes from 202.1.237.21: icmp_seq=1 ttl=246 time=105.3 ms
    64 bytes from 202.1.237.21: icmp_seq=3 ttl=246 time=112.8 ms
    64 bytes from 202.1.237.21: icmp_seq=4 ttl=246 time=87.7 ms
    64 bytes from 202.1.237.21: icmp_seq=5 ttl=246 time=92.0 ms

    --- 202.1.237.21 ping statistics ---
    6 packets transmitted, 5 packets received, 16% packet loss
    round-trip min/avg/max = 87.7/100.2/112.8 ms

     
  • 以 领域名 来 ping 却没有回应:

  • 有点像这样:
    [root@test root]# ping -c 5 tw.yahoo.com
    ping: unknown host tw.yahoo.com
这时就需要改变的主机的 DNS 设定了!可以修改 /etc/resolv.conf 档案:
 
[root@test root]# vi /etc/resolv.conf
nameserver 168.95.1.1
nameserver 139.175.10.20
nameserver 163.28.113.1
 
上面只是一个简单的表示方法,的主要的 DNS 主机为 168.95.1.1 (Hinet的 DNS 主机),而备用的 DNS 则为 139.175.10.20 及 163.28.113.1 这两个。何谓备用的 DNS 主机呢?这是由于 168.95.1.1 可能会因为某些正常或不正常原因而停止服务的时候,则的主机只要侦测不到 主要 DNS 主机,将会继续往下寻找另一个 DNS 主机,直到没有 DNS 主机为止。通常我至少都会设定两个以上。
    那如果是 windows 端的设定呢?常常初学者会搞错的地方就是在 windows 的设定了!要注意:Windows 端的 DNS 设定与主机端 /etc/resolv.conf 的内容相同即可!很多初学者都以为 TCP/IP 内的 DNS 主机是填上自己的 Linux 主机,这是不对的(除非自己的 Linux 上面有 DNS 服务)!只要填上的 ISP 给的 DNS 主机 IP 位置就可以了!

大标题的图示步骤五:NAT 功能( 或 IP 分享器 )是否正常
NAT 可以先简单的想成是一个 IP 分享器,NAT 无法正确的工作原因有很多,不过,如果您确定您的局域网络联机已经正常,而且主机可以正确的连上 Internet,另外,客户端的 DNS 设定也是正确的(这一步常常有人搞错!),那么可能发生的问题大概就是没有将 IPv4 打开吧!虽然 /etc/sysconfig/network 当中已经设定了FORWARD_IPV4=yes 的项目,但是仍然有可能没有开启这一个项目,那么就以下面的指令来开启吧!
echo 1 > /proc/sys/net/ipv4/ip_forward
可以将这个指令写入 /etc/rc.d/rc.local 这个档案中。另外,还有一点,就是的 GateWay 设定错误了!这个在上面的 network 档案说明中已经提到了,可以再详细的看一看!或者是使用 route -n 这个指令来察看一下的 route table (路由表)例如:
 
[root@test root]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.2     0.0.0.0         255.255.255.255 UH    0      0        0 eth0
172.16.11.8     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
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo
0.0.0.0         172.16.11.8     0.0.0.0         UG    0      0        0 ppp0
仔细看到上面喔:
  • 第六行显示的对内网域为 192.168.1.0 这一个,且在 Iface 的地方,显示了的界面卡使用的是 eth0 这一个界面卡;
  • 另外,的对外通讯闸(就是最后一行,由于是对外,所以会写出 0.0.0.0 的 Destination )是以 172.16.11.8 这一个,且的界面是 ppp0 这一个!
了解了吗?对内与对外的 route table 是不一样的,如果的对外 Iface 显示 eth0 的话,那就表示的路由设定错误了!这时就必须要修改一下的 /etc/sysconfig/network-scripts/ifcfg-eth0 档案啰!然后再以
/etc/rc.d/init.d/network restart
来重新启动!
除了这些问题之外,的 ipchains/iptables 是否正确的工作呢?这都需要注意的!而在 Red Hat 7.X 的版本之后,由于 ipchains 与 iptables 并存的环境下,会有问题发生,因此必须取消任何一个防火墙机制才行!如果对于 ipchains 与 iptables 不是很熟悉的话,可以看一下这一篇讨论:
小州先生的 iptables 相关 NAT 与安全防护说明:
http://linux.vbird.org/linux_server/0150detect_network_1.php
好了!除了这些问题之外,还有一个小问题,就是发生在 Windows 的系统中,可能会有 MTU 的问题存在,也就是说,可能有部分的网站您没有办法连上去,那要如何是好?您可以翻到前一章去看一看如何修改您的 MTU 吧!至于更多的 NAT 功能与错误确认,我们会在 NAT 主机的设定一节再详细的说明喔!

大标题的图示步骤六:ADSL 调制解调器或 router 的问题
在您确认了上面的几个问题点之后,大概已经可以让您的网络畅通了!不过,如果还是没有办法连上 Internet 呢?那就很有可能是外部的问题了!我们需要注意的大概是这样:
  1. ADSL 的 modem 灯号是否都是正常的?如果不正常的话,先处理 modem 吧!
  2. 连接到中华电信的 gateway 是否正常?这可以从 ifconfig 当中得到的信息,去 ping 那个 gateway 试试看!再不然的话,直接打电话到中华电信的机房去询问一下是否有问题;
  3. 是否有部分的 router 出现问题了:
基本上,前两点都很好解决,直接看一下 ADSL 的灯号就可以知道是否正常了!第三点才是我们这里所要探讨的!万一从成大要联机到高雄家中的以 seednet 作为 ISP 的的主机时,可以使用 traceroute 这样做:
 
[root@test root]# traceroute tsai.adsldns.org
traceroute to tsai.adsldns.org (211.74.251.208), 30 hops max, 38 byte packets
 1  140.116.44.253 (140.116.44.253)  7.373 ms  8.732 ms  9.560 ms
 2  203.72.191.42 (203.72.191.42)  0.932 ms  1.050 ms  0.716 ms
 3  203.72.191.218 (203.72.191.218)  0.906 ms  1.209 ms  0.867 ms
 4  R56-161.seed.net.tw (139.175.56.161)  2.229 ms  1.877 ms  2.154 ms
 5  R58-38.seed.net.tw (139.175.58.38)  3.283 ms  3.639 ms  5.303 ms
 6  br011008.seed.net.tw (139.175.11.8)  4.344 ms  3.941 ms  3.602 ms
 7  swks251-208.adsl.seed.net.tw (211.74.251.208)  50.058 ms  52.567 ms  53.109 ms
在这样的过程中,就可以知道,家中要求的数据封包是怎样传送的!而一个一个的去了解到底的网络传输速度是在哪一个环节被挡了下来而有延迟的问题!又例如我从家里联机到雅虎的网站时,数据封包时如何传送的呢?例如下面的说明:
 
[root@test root]# /usr/sbin/traceroute tw.yahoo.com
traceroute to tw.yahoo.com (202.1.237.21), 30 hops max, 38 byte packets
 1  172.16.11.8 (172.16.11.8)  46.181 ms  45.028 ms  39.722 ms
 2  139.175.15.1 (139.175.15.1)  37.972 ms  36.554 ms  40.228 ms
 3  R58-194.seed.net.tw (139.175.58.194)  45.332 ms  46.370 ms  46.140 ms
 4  R58-90.seed.net.tw (139.175.58.90)  46.814 ms  55.286 ms  46.401 ms
 5  211.22.41.174 (211.22.41.174)  46.326 ms  57.491 ms  45.398 ms
 6  211.22.35.230 (211.22.35.230)  46.813 ms  57.740 ms  46.117 ms
 7  211.22.35.169 (211.22.35.169)  46.319 ms  51.316 ms  52.549 ms
 8  203.69.65.65 (203.69.65.65)  46.342 ms  46.185 ms  58.698 ms
 9  * * *
最后面出现了 * 的符号,这表示从 203.69.65.65 这一个 router 到下一个 router 的过程中可能有点小问题,所以造成了的网络有点不是很正常的情况发生!这时就必须要去了解下原因了。像早先新竹的一条光缆被挖断的时候,由于那条光缆是主要的网络干道之一,所以被挖断了,将使得数据封包必须经过东部的以及备份的网络流量较小的备援网络系统来处理,所以也就造成大塞车的问题了!另外,本站前一阵子由于教育部的 UPS 在进行维护的工程,结果也是导致成大部分的网络流量受阻,造成我们的网友无法联机进来的结果,可以到鸟哥的私房菜首页(http://linux.vbird.org)看一下在 2001/12/6-10 日之间的公告,这样的检验也可以让我们了解到网络流量的瓶颈喔!

大标题的图示步骤七:主机服务是否关掉了与服务权限的问题
另外一个常见的问题是,无法登入主机执行『某些』功能,也就是说,可以 ping 的到网络上的某部主机,但是就是无法执行这个主机的某些特定的功能,例如 FTP, WWW, mail 等等。以鸟哥的某个主机为例,我的主机仅提供 mail 及 www 的服务,因此使用 telnet 及 ftp 都是没有用的!所以啰,必须先去了解到该主机提供的服务才行!
那如果是的主机呢?最常见到的就是新版的 Linux 中,ftp 与 telnet 已经预设不开放了!那当然无法以 ftp 及 telnet 连接到的主机里面!这时,就必须要到 /etc/xinetd.d 去修改几个服务的设定,以 telnet 为例,可以在 /etc/xinetd.d/telnet 中看到如下的咚咚:
 
[root@test root]# 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 服务!不过,基本上也有可能是 firewall 挡住了的服务通道,这时,就需要先开启防火墙了!
还有一个要检查的是各个档案或者是程序的权限了!例如的 /etc/hosts.allow 中是否有开启?的 mail server 是否有设定 relay ?的 httpd.conf 中是否有开放 PHP 或者是 MySQL 的服务,或者是其他相关的 CGI 程序执行的可行性?的 FTP 是否有开放匿名登录?等等等,都是需要特别的检查的,不过,这都属于一般性的 FAQ 了,这里就不多做说明。
Linux 网络侦错

2002/07/31:第一次完成日期!
2003/08/19:重新修订一些数据,与前面的章节比较好配合!
 
     
http://linux.vbird.org is designed by VBird during 2001-2011. ksu.edu 

本网页主要以Firefox配合解析度 1024x768 作为设计依据     鸟哥自由软件整合应用研究室