使用 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 看看人家的解決方法, 都有助於讓你更輕易的解決網路問題的喔! ^_^!鳥哥也將上述的動作規劃成一個流程圖,參考看看: