鸟哥的Linux私房菜(服务器)- 第六章、 Linux 网络侦错
最近更新日期:2011/07/19
| 雖然我們在第四章談完了連上 Internet 的方法,也大略介紹了五個主要的網絡檢查步驟。不過,網絡是很復雜的東西, 鳥哥也是接觸了 Linux 這么多年之后才對網絡與通訊協議有點認識而已,要說到熟悉與了解,那還有段路要走哩。 總之,為了讓大家對網絡問題的解決有個方向可以進行處理,鳥哥底下列出一些常見的問題,希望對大家有點幫助! |
6.1?無法聯機原因分析
6.1.1?硬件問題:網絡線材、網絡設備、網絡布線等
6.1.2?軟件問題:IP 參數設定、路由設定、服務與防火墻設定等
6.1.3?問題的處理
6.2?處理流程
6.2.1?步驟一:網絡卡工作確認
6.2.2?步驟二:局域網絡內各項連接設備檢測
6.2.3?步驟三:取得正確的 IP 參數
6.2.4?步驟四:確認路由表的規則
6.2.5?步驟五:主機名與 IP 查詢的 DNS 錯誤
6.2.6?步驟六:Linux 的 NAT 服務器或 IP 分享器出問題
6.2.7?步驟七:Internet 的問題
6.2.8?步驟八:服務器的問題
6.3?本章習題
6.4?參考數據與延伸閱讀
6.5?針對本文的建議:http://phorum.vbird.org/viewtopic.php?t=26155
6.1 無法聯機原因分析
老是看到有朋友在網絡上哀嚎說:『我的網絡不通啊!』還有比較奇怪的是『啊!怎么網絡時通時不通』之類的問題, 這類的問題其實主要可以歸類為硬件問題與軟件設定問題。硬件的問題比較麻煩,因為需要透過一些專門的裝置來分析硬件; 至于軟件方面,絕大部分都是設定錯誤或者是觀念錯誤而已,比較好處理啦 (第四章談到的就是軟件問題)! OK!我們先來看看網絡在哪里可能會出問題吧!
6.1.1 硬件問題:網絡線材、網絡設備、網絡布線等
在第二章的網絡基礎當中我們曾提到很多的網絡基礎概念, 以及一些簡單的硬件維護問題。以一個簡單的星形聯機來說,我們可以假設他的架構如同下圖所示:
圖 6.1-1、局域網絡的聯機狀態示意圖
在上面的圖示當中,"Linux PC3" 要連到 Internet 上面去的話,需要透過網絡線、交換器、 NAT 主機 (Linux 服務器或 IP 分享器)、ADSL 調制解調器,附掛電話線路、ISP 自己的機房交換器,以及 Internet 上面的所有媒體設備 (包括路由器、網橋、其他網絡線等等);那么哪些地方可能會出問題啊?
在上面的圖示中,可以發現,其實網絡接口設備中,使用最多的就是網絡線啦!要注意網絡線分成并行線與跳線 (RJ-45接頭),而并不是所有的設備都支持自動分辨跳線與并行線的功能的! 所以你必須要了解到你的設備 (Hub/Switch/調制解調器) 所支持的網絡線;另外,如果你的網絡線有經過門縫處或者是容易凹折處, 那很有可能由于經常性的凹折導致電子訊號不良,所以你需要注意一下這些事情:
- 網絡線被截斷;
- 網絡線過度扭曲變形造成訊號不良;
- 自制網絡接頭 (如 RJ-45 跳線頭) 品質不良;
- 網絡接頭與設備 (如 Hub) 接觸不良;
另外,還有一些網絡設備也會有問題,常見的問題如下:
- 網絡卡不穩定、質量不佳,或者與整體系統的兼容度不佳 (網絡卡也是會壞的);
- 各網絡設備的接頭不佳,接觸不良,造成訊號衰減 (經常的拔插就有可能發生);
- 由于網絡設備所在環境惡劣 (例如過熱) 導致的當機問題 (鳥哥經常遭遇到 switch 熱當的問題);
- 各網絡設備使用方法不良,造成設備功能衰減 (switch 常常插電/斷電容易壞喔);
在各個設備的配置上是有一定的規則的,而最容易發生的問題就是太長的網絡線會造成訊號的衰減, 導致網絡聯機的時間太長甚至無法聯機。我們曾在網絡基礎當中談過以太網絡最長的支持距離 (10BASE5 最長可達 500m), 還有一些其他網絡媒體配置的問題你必須曉得的:
- 使用錯誤的網絡線,最常發生在并行線與跳線的分別 (現在比較少見這個問題了)!
- 架設的網絡線過長,導致訊號衰減太嚴重。例如以太網絡 CAT5e 的線理論限制長度大概是在 90 公尺左右 (雖然 10BASE5 可達 500m),若兩個設備 (Hub/主機之間) 長度大于 90 公尺時,自然就容易出現訊號發生問題了!
- 其他噪聲的干擾,最常發生在網絡線或者網絡設備旁邊有太強的磁波;
- 局域網絡上面,節點或者其他的設備太多,過去我們常以所謂的 543 原則來說明:(注1)
- 5 個網段 (segment)。所謂 segment 就在物理連接上最接近的一組計算機,在一個 BNC 網段里面最多只能接 30 臺計算機﹐且網線總長不能超過 185m。
- 4 個增益器 (repeater)。也就是將信號放大的裝置。
- 3 個計算機群體 (population)。這個不好理解﹐也就是說前面所說的 5 個 segment 之中, 只能有 3 個可以裝計算機,其它兩個不行。
上述是一些最常見的硬件問題,當然啦,有的時候是設備本身就有問題,而我們在網絡基礎里面談到的那個很重要的『?網絡布線?』的情況,也是造成網絡停頓或通順與否的重要原因吶!所以,硬件問題的判斷比較困難點。 好~底下我們再來聊一聊軟件設定的相關問題。
6.1.2 軟件問題:IP 參數設定、路由設定、服務與防火墻設定等
所謂的軟件問題,絕大部分就是 IP 參數設定錯誤啊,路由不對啊,還有 DNS 的 IP 設定錯誤等等的, 這些問題都是屬于軟件設定啦!只要將設定改一改,利用一些偵測軟件查一查,就知道問題出在哪里了!基本的問題有:
例如:同一個 IP 在同一個網段中出現造成 IP 沖突、子網掩碼設定錯誤、網絡卡的驅動程序使用錯誤、網絡卡的 IRQ、 I/O Address 的設定沖突等等;
最常見的就是預設路由 (default gateway) 設定錯誤了!或者是路由接口不符所導致的問題, 使得數據封包沒有辦法順利的送出去。
最常發生在不同的操作系統之間的通訊傳輸,例如早期 Windows 98 與 Windows 2000 之間的『網芳』 若要達成溝通,則 Windows 98 必須要加裝 NetBEUI 這個通訊協議才行。又例如兩部 Linux 主機要透過 NFS 通訊協議傳輸數據時,兩邊都得要支持 rpcbind 這個啟動 RPC 協議的程序才行! 這些通訊協議我們都會在后面的章節分別介紹的啦!
當同時有大量的數據封包涌進 Server 或者是 Hub 或者是同一個網域中, 就有可能造成網絡的停頓甚至掛點!另外,如果區網內有人使用 BT (P2P 軟件) 或者是有人中毒導致蠕蟲充滿整個區網,也會造成網絡的停頓問題;
例如:一些 port 被防火墻擋住了,造成無法執行某些網絡資源;應用程序本身的 Bug 問題;應用程序中用戶的網絡設定錯誤;以及不同的操作系統的兼容性問題等等。
6.1.3 問題的處理
既然問題發生了,就要去處理他啊!那如何處理呢?以上面的星形聯機圖示為例,把握兩個原則:
- 先由自身的環境偵測起,可以由自身 PC 上的網絡卡查起,到網絡線、到 Hub 再到調制解調器等等的硬件先檢查完。 在這個步驟當中,最好用的軟件就是 ping ,而你最好能有兩部以上的主機來進行聯機的測試;
- 確定硬件沒問題了,再來思考軟件的設定問題!
實際上,如果網絡不通時,你可以依序這樣處理:
透過這些處理動作后,一般來說,應該都可以解決你無法上網的問題了!當然啦,如果是硬件的問題,那么鳥哥也無法幫你, 你可能最需要的是......『送修吧孩子!』
6.2 處理流程
既然知道上面已經談到的幾個小重點了,接下來當然是一個一個的給他處理掉啊! 底下我們就得要一步一腳印的開始檢查的流程啊!
6.2.1 步驟一:網絡卡工作確認
其實,網絡一出問題的時候,你應該從自己可以檢查的地方檢查起,因此, 最重要的地方就是檢查你的網絡卡是否有工作的問題啦!檢查網絡卡是否正常工作的方法如下:
如果網絡卡沒有驅動成功,其他的,免談!所以你當然需要驅動你的網絡卡才行!確認網絡卡是否被驅動,可以利用 lspci 以及 dmesg 這兩個咚咚來查詢相關的設備與模塊的對應。詳情請參考:第四章的相關說明。 再次強調,捉不到網卡驅動程序,除了自己編譯之外,再購買一張便宜的網卡來應付著用,是不錯的想法!
在順利的加載網絡卡的模塊,并且『取得網絡卡的代號』之后,我們可以利用?ifconfig?或?ip?來直接給予該網絡卡一個網絡地址試看看! 看能否給予 IP 設定呢?例如:
| [root@www ~]# ifconfig eth0 192.168.1.100 |
| [root@www ~]# ping 192.168.1.100 |
6.2.2 步驟二:局域網絡內各項連接設備檢測
在確認完了最重要的網絡卡設定之后,并且確定網絡卡是正常的之后,再接著下來則是局域網絡內的網絡連接情況了!假設你是按照?圖 6.1-1?所設定的星形聯機局域網絡架構,那么你必須要知道整個『網域』的概念!
能否成功的架設出區網,與網域的概念有關!所以,你要知道所謂的 192.168.1.0/24 這種網域的表達方式所代表的意義, 且子網掩碼 (Netmask) 的意義也得了解。如果忘記了,請回去第二章網絡基礎再翻一翻。
Gateway 與 DNS 最容易被搞混~這兩個并非是填寫你的 Linux 主機的 IP 喔!應該是要填寫 IP 分享器 (或 NAT 主機) 的 IP 在 Gateway 中,填寫 168.95.1.1 在 DNS 的 IP 設定當中!不能夠搞錯啊!
假如你還需要資源共享,那么你就必須在 windows 系統中開放檔案分享, 并且建議所有的計算機將『工作組』設定相同,但『計算機名稱』則不能相同!不過,這個只與網芳及 SAMBA 服務器有關。
假設你的區網內所有的主機 IP 都設定正確了,那么接下來你就可以使用 ping 來測試兩部區網內主機的聯機, 這個聯機的動作可以讓你測試兩部主機間的各項設備,包括網絡線、Hub/Switch 等等的咚咚! 如果無法測試成功,那就請了解一下:
再次強調,先決定 IP/netmask 是對的!鳥哥在上課的時候常常發現同學無法連到我的主機上, 一經使用 ifconfig 才發現他們與我的 IP 不在同一個網段內,就是會有這樣的情況發生啊!唉~
包括我們前面提到的網絡線本身折損、過度纏繞造成的訊號衰減問題等等, 另外,有些比較舊的 Hub/Switch 或者是 ADSL 調制解調器,由于沒有?Auto MDI/MDIX?的功能,所以無法自動的分辨跳線與否, 那么當你用錯網絡線的時候,也就無法接通啦!另外,早期我們常常會說, 最簡單判斷每部主機是否順利連接到 Hub/Switch 可以透過連接到 Switch 上的燈號來判斷, 不過,由于有時候網絡線本身訊號不良,雖然燈號還是會亮,不過就是無法連接到 Switch 的情況 (鳥哥自己就曾發生過啊),此時,跟朋友借一條 OK 的網絡線來測試看看吧!
有一次鳥哥無法在外部連接到鳥哥的主機,懷疑是掛點了,結果沖到主機所在辦公室察看,咦! 主機是好好的嘛!那怎么會無法聯機呢?原因是...室內環境通風不良,加上 Switch 所在處溫度過高, 加上那部舊的 switch 『剛好』風扇壞了,哈!就這樣『?switch 當機?』 在重新啟動 switch (拔掉再插上電源線) 后就正常了。所以啰,很多情況都是會發生的, 而局域網絡內的環境也很容易影響到聯機質量啊!
確定自己主機的 IP 與網卡沒有問題,加上內部區網透過 ping 也測試過沒有問題,接下來就是要『取得可以對外聯機的 IP 參數』啦!這個重要!
6.2.3 步驟三:取得正確的 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 參數的!
| Tips: 曾有國外的華人朋友來信說到,他們使用 ADSL 撥接之后竟然取得一組 Private IP , 害他們沒有辦法架站!他們想請問這樣的情況是否合理。如果你熟悉路由相關的概念之后, 當然會知道:『這當然合理!』,因為你取得的 IP 只是為了要連接到 ISP 去而已, 而 ISP 與你的主機當然可以透過 Private IP 來聯機啊!如果是這樣的話,那么你就肯定無法架站了! ^_^ |
另外,最常發現無法順利取得 IP 的錯誤就是『BOOTPROTO』這個設定值設定錯了!因為 static 與 dhcp 協議所產生的 IP 要求是不一樣的啊!還記得吧!要特別留在 ifcfg-eth0 里面的設定參數喔!另外,如果你是使用 ADSL 撥接的, 但是老是無法撥接成功,那么建議你可以這樣試看看:
- 將 ADSL 的調制解調器整個關機,將 Switch/Hub 也關掉電源;
- 靜待十分鐘,等這些設備比較『涼快』一點后,再重新插上電源;
- 將 Linux 連接到 ADSL 的那塊網卡 (假設為 eth0) 在 ifcfg-eth0 內,『ONBOOT』設定為 no, 重新啟動網絡 (/etc/init.d/network restart),然后再執行 adsl-start
- 如果還是無法撥接成功,并且你已經確認內部網域沒有問題,那請中華電信的工程人員來幫忙你處理吧!
因為很多時候都是由于網絡媒體過熱,也有可能主機內部的一些網絡參數有點問題, 所以,干脆就不要啟動網卡,讓 adsl-start 自動去啟動網卡即可! 如果順利取得 IP 后,卻還是無法順利連到 Internet 上面時,你覺得還有哪些地方需要處理的呢?
| Tips: 為了避免 switch 以及 ADSL 調制解調器熱當,鳥哥以及一些重度網絡用戶的朋友,就買了桌上型小電扇,配合定時器 (timer) 來定時的向這兩個設備吹風~為啥需要定時器?因為擔心電風扇一直開著會燒掉... |
6.2.4 步驟四:確認路由表的規則
如果你已經順利取得正確的 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 來增加預設路由啰!
6.2.5 步驟五:主機名與 IP 查詢的 DNS 錯誤
如果你發現可以 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 與你的主機名對應,對于內部私有網域來說,是相當重要的設定項目呢!
6.2.6 步驟六:Linux 的 NAT 服務器或 IP 分享器出問題
NAT 服務器最簡單的功能就是 IP 分享器啦!NAT 主機一定是部路由器,所以你必須要在 Linux 上面觀察好正確的路由信息。否則肯定有問題。另外, NAT 主機上面的防火墻設定是否合理? IP 分享器上面是否有設定抵擋的機制等等,都會影響到對外聯機是否能夠成功的問題點。 關于 NAT 與防火墻我們會在后續的章節繼續介紹的啦!
6.2.7 步驟七:Internet 的問題
Internet 也會出問題喔!當然啦~沒有任何東西是不會出問題的!舉例來說,好幾年前臺灣西岸因為施工的關系, 導致南北網絡骨干纜線被挖斷,結果導致整個 Internet 流量的大塞車!這就是 Internet 的問題~還有,數年前?Study Area 網站放置的地點由于路由器設定出了點差錯, 結果導致連接速度的緩慢。這都不是主機本身出問題,而是 Internet 上面某個節點出了狀況。 想要確認是否問題來自 Internet 的話,就使用?traceroute?吧! 查察看問題是來自那個地方再說!
6.2.8 步驟八:服務器的問題
如果上述的處理都 OK ,卻無法登入某部主機時,我想,最大的問題就是出現在主機的設定啦!這包括有:
- 服務器并沒有開放該項服務:例如主機關閉了 telnet ,那你使用 telnet 去聯機,是無法連接上的啦!
- 主機的權限設定錯誤:例如你將某個目錄設定為 drwx------ ,該目錄擁有者為 root , 你卻將該目錄開放給 WWW 來瀏覽,由于 WWW 無法進入該目錄,所以當然無法正確的給客戶端瀏覽啊! 這是最典型的權限設定錯誤的情況啊!
- 安全機制設定錯誤:例如 SELinux 是用來更細微控管主機存取的一種核心機制,結果你啟動的是系統原先不支持的類型, 那么 SELinux 反而可能會抵擋該服務的提供!而其他例如 /etc/hosts.deny, PAM 模塊等等, 都可能造成使用者無法登入的問題!這就不是網絡問題,而是主機造成聯機無法成功!
- 防火墻問題:防火墻設定錯誤也是一個很常見的問題,你可以使用?tcpdump?來追蹤封包的流向, 以順利的了解防火墻是否設定錯誤。
基本上,一個網絡環境的檢測工作可不是三言兩語就講的完的~而且常常牽涉到很多經驗的問題~ 請你常常到一些講座的場合去聽聽看大家的經驗,去 google 看看人家的解決方法, 都有助于讓你更輕易的解決網絡問題的喔! ^_^!鳥哥也將上述的動作規劃成一個流程圖,參考看看:
圖 6.2-1、網絡問題解決流程圖
6.3 本章習題
- 以圖 6.1-1 的星形聯機為例,你的 Linux PC 3 可以 ping 到 Windows PC1 ,但是反過來,Windows PC1 無法 ping 到 Linux PC3,你覺得原因可能發生在哪里? 由于兩邊已經可以用 ping 進行聯機,所以硬件應該是沒有問題了。而 Linux --> Windows 沒問題, Windows --> Linux 有問題,可能是由于 Linux 主機上面的防火墻所致。可以使用 iptables -L -n 去查閱一下防火墻的設定規則。詳細的防火墻請參考后續的章節。
6.4 參考數據與延伸閱讀
- 注1:網中人的網絡架構簡介:http://www.study-area.org/network/network_archi.htm
總結
以上是生活随笔為你收集整理的鸟哥的Linux私房菜(服务器)- 第六章、 Linux 网络侦错的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 鸟哥的Linux私房菜(服务器)- 第五
- 下一篇: 鸟哥的Linux私房菜(服务器)- 第十