1. 程式人生 > >linux 網路故障排查

linux 網路故障排查

當linux作業系統產生網路故障時,應先從硬體到軟體、從自身到全域性。
1,檢查網線、網絡卡。
到機房裡檢查網線兩端是否都亮燈,普通伺服器的話應該是綠燈常亮為正常,交換機綠燈閃爍表示正在傳輸資料。
也可以通過命令ethtool ethX來檢視某一網絡卡的鏈路是否物理連通。

其中,speed是當前網絡卡的速度,這是一個千兆網絡卡;Duplex顯示了當前網路支援全雙工;link detected表示當前網絡卡和網路的物理連線狀態,yes就是正常。通常網速和全/半雙工狀態是主機和網路協議商自動協商的,例如這裡第8行的 auto-negotiation。
2.確定網線是通的之後,再看物理網絡卡。
ifconfig可以看到已成功載入的網絡卡,用ethtool -i ethX可以看到網絡卡驅動。lspci可以看到所有連線到pci匯流排的裝置,lsmod顯示所有已載入的模組, 載入成功的模組也會在/proc/modules中顯示。一般情況下,成功載入網絡卡後,用ifconfig就可以看了。如果此時找不到網絡卡,那麼應該檢視物理網絡卡有沒有連線到pci總線上,lspci檢測不到的話很有可能就是網絡卡壞了。還有一種情況是沒有載入網絡卡模組,先去lspci裡找到對應廠商和型號:Ethernet Controller,再用modprobe嘗試載入正確的模組,比如modprobe 3c509。如果出現錯誤,說明該模組不存在。這時候你應該找到正確的模組並且重新編譯。
3.網絡卡物理層沒有問題之後,再看網絡卡配置。用ifconfig就可以看到ip、掩碼等等,永久修改網絡卡資訊在/etc/sysconfig/network-scripts/ifcfg-ethX(有些linux發行版不一定是這個檔名,但路徑多差不多。它上一層中的network檔案是修改hostname的),這個檔案也是放入DNS的正確地方。修改之後重啟network。
4.檢查自身路由表是否正確。用route -n檢視核心路由表,通過route命令檢視核心路由,檢驗具體的網絡卡是否連線到目標網路的路由,之後就可以嘗試ping 閘道器,排查與閘道器之間的連線。如果無法ping通閘道器,可能是閘道器限制了ICMP資料包,或者交換機設定的問題。一個很常見的問題:兩塊網絡卡分別提供內網和外網服務,如果預設閘道器是內網網絡卡,那麼外網服務是訪問不到的。這時需要刪除再新增預設閘道器。用route delete/add default gw 命令。
現在自身問題已經檢查了一遍,看全域性。
5.首先看DNS,在/etc/resolve.conf可看到指定域名伺服器,但是這裡是不能修改的這個檔案又networkManager自動產生,修改要去etc/sysconfig/network-scripts/ifcfg-ethX。
光看是沒有用的,nslookup可以用來診斷DNS伺服器。簡單使用:

server是本機所指向的DNS伺服器地址,大家可以把自己的DNS地址換成114.114.114.114試一試。
6.如果DNS也沒有問題,接下來就要檢查是否可以正常路由到某一臺主機,或者說當連線不到某一臺遠端主機時,應該如何追蹤路由。traceroute 是用來跟蹤從發出資料包的主機到目標主機之間所經過的閘道器的工具。
引數選項:
-i 指定網路介面,對於多個網路介面有用。比如 -i eth1 或-i ppp1等;
-m 把在外發探測試包中所用的最大生存期設定為max-ttl次轉發,預設值為30次;
-n 顯示IP地址,不查主機名。當DNS不起作用時常用到這個引數;也可以在檢查時排除DNS的問題。

記錄按序列號從1開始,每個紀錄就是一跳 ,每跳錶示一個閘道器,我們看到每行有三個時間,單位是 ms,其實就是-q的預設引數。探測資料包向每個閘道器傳送三個資料包後,閘道器響應後返回的時間。星號表示防火牆封掉了ICMP的返回資訊。大家感興趣可以挨個百度下顯示的ip,比如我用的是世紀互聯提供的公共DNS(114.114.114.114),那麼上圖中211.99.171.25一查就是世紀互聯的閘道器。
6.接下來要檢查的是遠端主機的服務埠是否開啟。可以用telnet和nmap來檢查,沒有這兩個工具的話自行yum安裝。比如我們要看下百度的80埠是否打開了:

狀態STATE是open表示開啟,如果是filtered表示被防火牆過濾了,大家可以試下百度的22埠,肯定是filtered狀態。
也可以檢視自身的埠有沒有開啟,不多舉例了。自身埠用的比較多的命令是netstat。

其中第一列是套接字通訊協議,第2列和第3列顯示的是接收和傳送佇列,第4列是主機監聽的本地地址,反映了該套接字監聽的網路;第6列顯示當前套接字的狀態,最後一列顯示開啟埠的程序。
7.如果網路還有問題的話就要檢查iptables策略和SELinux了。定位問題前最好將SELinux關了,用iptables -L可檢視iptables的規則。
 

下面是自己總結命令----------------------------------------------------------------------------------------------------------------------------------------------

1、sudo ip link ls eth0