鳥哥的 Linux ADSL 私房菜


Linux 網路偵錯
本文已不再維護,更新文章請參考 此處
最近更新日期:2003/08/19
 
Linux 最強的,也是最讓人稱道的地方,就是他的網路功能了,不論是 Mail server、Web server、Proxy server等等,都好好用喔!但是,我們也常在網路上看到一堆常見的問題,就是在問『我的 Linux 沒有辦法連上網路,該如何是好....』等等的問題,問來問去的重點大概都是一樣的狀況!傷腦筋!那鳥哥就把一些在 Linux 上面可能會發生的網路問題把他整理一下,看看您是不是有這方面的問題,參考看看吧!
 
瞭解發生網路問題的可能狀況
步驟一:網路卡工作確認重新驅動網路卡
步驟二:區域網路硬體連線確認
步驟三:確認路由表資料沒有問題
步驟四:確認 DNS 的 IP 設定
步驟五:NAT 功能( 或 IP 分享器 )是否正常
步驟六:ADSL 數據機或 router 的問題
步驟七:主機服務是否關掉了與服務權限的問題

瞭解發生網路問題的可能狀況:
步驟一:網路卡工作確認
其實,網路一出問題的時候,您應該從自己可以檢查的地方檢查起,因此,最重要的地方,就是您的網路卡是否有工作的問題啦!檢查網路卡是否正常工作的方法如下:
  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 來說明)
這時就需要改變的主機的 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 主機為止。通常我至少都會設定兩個以上。

步驟五: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
仔細看到上面喔: 瞭解了嗎?對內與對外的 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:重新修訂一些資料,與前面的章節比較好配合!


Designed by VBird during 2001-2004.  Aerosol Lab.