1,885 瀏覽數

Linux 網路連線的錯誤排除

附錄一:網路連線的錯誤排除-通常在網路連線時會遇到很多問題,我們可以一步一步從最源頭來看是哪個部份出了問題!!
1.硬體有抓到嗎?
第一點就是要看系統有沒有抓到網路卡?最快的方式是透過 #lspci 來看.

[root@Benjr ~]# lspci
00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX – 82443BX/ZX/DX Host bridge (rev 01)
00:01.0 PCI bridge: Intel Corporation 440BX/ZX/DX – 82443BX/ZX/DX AGP bridge (rev 01)
00:07.0 ISA bridge: Intel Corporation 82371AB/EB/MB PIIX4 ISA (rev 08)
00:07.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01)
00:07.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 08)
00:0f.0 VGA compatible controller: VMware Inc Abstract SVGA II Adapter
00:10.0 SCSI storage controller: LSI Logic / Symbios Logic 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI (rev 01)
00:11.0 Ethernet controller: Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE] (rev 10)

可以看到我的網卡 Ethernet controller: Advanced Micro Devices 有被系統認出來,而且沒有認錯,不過當你的網路卡硬體太新時系統會顯示該裝置是一個 Unknown 的裝置,其實不需緊張.系統知道有該裝置,但是他不知道這個裝置名稱而已, 在 Linux 下是依據 /usr/share/hwdata/pci.ids 來轉換硬體裝置成為硬體裝置名稱.

如何更新 /usr/share/hwdata/pci.ids 可以參考這個網頁 http://pciids.sourceforge.net/ 方法如: 更新 pci.ids

但如果系統是看不到這一個裝置(連 unknown 都沒有時),那可以試試其他的 PCI, PCI-E 插槽,真的不行請洽你的硬體製造商看是否有提供新版的 BIOS 可以解決這個問題.

2.模組有上嗎?
看得到裝置不代表模組有上,可以使用 #lsmod 來查看.先來看看我們網卡使用哪一個模組,在 /etc/modprobe.conf 可以查出目前的網路裝置是使用什麼模組. <- RHEL 6 以上的版本不再採用 /etc/modprobe.conf 設定方式,詳細說明請參考 http://benjr.tw/10594

[root@benjr ~]# cat /etc/modprobe.conf
alias eth0 pcnet32

很好!網路卡模組是 pcnet32,透過 #lsmod 那看一下是不是有載入到系統上.

[root@benjr ~]# lsmod | grep -i pcnet32
mii 9281 1 pcnet32

太好了到目前為止系統都有辨識到這張網卡.

通常世界不是完美的,在這個階段如果 #lsmod 沒看到可以用 #modprobe pcnet32 來手動上模組(請依你的實際硬體模組來上).如果顯示錯誤(可以用 #dmesg 來檢視) 那就是作業系統提供的 driver (module) 不支援目前這張網路卡,那只好親自到網卡的製造商網站下載即可.

這邊使用 Intel 的 E1000 為範例.首先在 Intel 的網站會找到 E1000 的 Linux driver (module).driver 通常是 .tar.gz 的模式.因為 Linux driver (module) 需要先編輯後才能使用,這時候我們需要用到 Kernel-devel 套件,請在編輯前先安裝這一個 rpm 檔案.

[root@Benjr ~]# rpm -aq |grep -i kernel
kernel-smp-2.6.9-78.EL
kernel-hugemem-devel-2.6.9-78.EL
kernel-2.6.9-78.EL
kernel-devel-2.6.9-78.EL
kernel-xenU-devel-2.6.9-78.EL
kernel-smp-devel-2.6.9-78.EL
kernel-utils-2.4-14.1.117

很好我的 Linux 系統有安裝.現在就開始編輯 E1000 的 driver (module) .

[root@Benjr ~]# tar zxvf e1000-8.0.6.tar.gz
[root@Benjr ~]# cd e1000-8.0.6/src/
[root@Benjr src]# make;make install
[root@Benjr src]# modinfo e1000
filename:       /lib/modules/2.6.9-78.ELsmp/kernel/drivers/net/e1000/e1000.ko
parm:           copybreak:Maximum size of packet that is copied to a new buffer on receive
author:         Intel Corporation, <linux.nics@intel.com>
description:    Intel(R) PRO/1000 Network Driver
license:        GPL
version:        8.0.6-NAPI 198DA055157AE8751CB6722
[root@Benjr src]# modprobe e1000

#make 是編輯,而 #make install 是會把 Linux driver (module) 放置在系統規定的地方,你可以透過 #modinfo e1000 先檢查一下版本是否如預期.接下來使用 #modprobe e1000 你會發現新的模組已經上上去了.

但 SLES11 採用 "supported" flag 的方式辨識這 driver(kernel modules)  是否經過 SLES(Novell) 的認證,所以要使用 SLES11 尚未認證的 driver(kernel modules) 解決方式有兩種.

1.setup "allow_unsupported_modules " in /etc/modprobe.d/unsupported_modules as "1"
2.#modprobe module allow_unsupported_modules

http://www.novell.com/support/search.do?

3.線路有通嗎?
這裡還沒談到連上 Internet 而是確定你的網卡已經連接上 Hub/Switch.這邊提供三個指令來查看目前網路的線路狀態, dmesg , mii-tool , ethtool.

[root@benjr ~]# dmesg |grep eth0
eth0: link up, 100Mbps, full-duplex...
....
[root@benjr ~]# mii-tool
eth0: negotiated 100baseTx-FD flow-control, link ok
[root@benjr ~]# ethtool eth0
Settings for eth0:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised auto-negotiation: Yes
Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 1
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: umbg
Wake-on: g
Current message level: 0×00000003 (3)

顯示 link ok 或是 Speed: 1000Mb/s 代表網路卡目前已經是通的狀態.但如果你看到的是下面的 no link 或是 Unknown 狀態.就需要確定一下網路線是否有接對,是否要用 crossover 的線還是根本就沒接線(鬆脫,掉落).

[root@benjr ~]# mii-tool
eth0: no link
[root@benjr ~]# ethtool eth0
Settings for eth0:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised auto-negotiation: Yes
Speed: Unknown! (65535)
Duplex: Unknown! (255)
Port: Twisted Pair
PHYAD: 1
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: umbg
Wake-on: g
Current message level: 0×00000003 (3)
Link detected: no

4.ADSL
線路通了這時就需要連上 Internet 關於 ADSL 的設定. 請參考 設定 ADSL

5.防火牆 iptables
如果在連線時有些服務無法使用或是怪怪的可能是防火牆 iptables 設定不正確導致,請參考關於 防火牆 iptables .

3 個網友的想法 “Linux 網路連線的錯誤排除

  1. 自動參照通知: 網路連線的錯誤排除(二) | Benjr.tw

  2. 自動參照通知: 硬體裝置 | Benjr.tw

  3. 自動參照通知: 設定 ADSL | Benjr.tw

發表迴響