網路基本指令


比較主流的版本, 例如 ubuntu 或 fedora, 都有圖形介面設定網路的工具。 比較陽春的版本, 無線網路的設定可能要另外安裝套件, 例如 slax 6 系列提供 wlassistant, 而 antix 則提供 wicd ( 中文 英文英文)。

剛裝好 linux, 最簡單的上網方式, 就是躲在有線分享器後面, 採用 dhcp (由分享器自動派送 IP 及其他網路設定) 的方式上網。 如果是筆電, 有時會遇到無線網卡驅動程式失敗的問題。 最快的解決方式, 就是搜尋 「usb wifi」, 隨便買一個三五百元的 usb 無線網卡, 幾乎都不會遇到驅動程式的問題。

其他情況下, 如果不幸無法用圖形介面的工具設定上網, 那就只好下指令自助。 請先變身為 root -- 在 debian 系列 (例如 ubuntu) 的版本裡, sudo bash 然後打自己的密碼; 在其他系列的版本裡 (例如 fedora/mandriva/slackware), su 然後打 root 的密碼。

Linux 有沒有抓到網卡?

第一步先查看 linux 是否有抓到您的硬體。 下 ifconfig -a 。 以我的 eeepc 為例, 正常應該至少偵測到 lo(每部電腦都會有的、 假的網卡), eth0 (有線網卡), ath0 (無線網卡) 三項。 不過, 不同版本的 linux 命名網卡的方式不太相同 -- 例如有些把有線無線混在一起命名為 eth0、 eth1、 eth2 ... 有些則把無線網卡命名為 wlan0、 wlan1、 ... 。 總之, 除了 lo 之外, 如果看到的項目與你有線無線網卡數目相同, 就可跳到下一節。

如果 ifconfig -a 只出現 lo 一項, 那就是沒偵測到網卡。 這有可能是驅動失敗, 例如欠缺專屬韌體之類的。 請參考 wicd 設定網路連線 或 (硬工夫的) 赤手空拳也要用 wpa_supplicant 接通無線網路。 另外也可用 lspci | grep -Pi 'ethernet|network' 查詢有線及無線網卡型號, 再用網卡型號跟 modprobe 下去搜尋, 可能可以找到驅動程式的解決方案。

連線

區網、遮罩 (netmask) 及匣道 (gateway) 概念圖 如果有偵測到網卡, 但網路卻不通, 請下這幾個指令:

  1. /sbin/ifconfig -a
  2. route -n

理想上, 從第一個指令可以讀出有連線的網卡代號以及它被分配到的 IP, 類似這樣:

eth0      Link encap:Ethernet  HWaddr 12:34:56:78:9a:bc  
          inet addr:192.168.3.75  Bcast:163.17.9.255  Mask:255.255.255.0

而第二個指令則應該要看到至少兩列數字, 類似這樣:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.3.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
0.0.0.0         192.168.3.254   0.0.0.0         UG    0      0        0 eth0

這表示: 對於區網內的 IP (192.168.3.*), 直接透過網卡 eth0 即可連線; 對於區網外的其他所有 IP (*.*.*.*) 則都要通過 gateway (192.168.3.254) 來連線。

不論上面出現什麼, 總之如果網路不通, 請依序做: (每一步都用 ctrl-c 中斷)

  1. ping 自己
  2. ping 鄰居
  3. nmap -sP 192.168.3.0/24
  4. ping gateway
  5. ping 8.8.8.8

其中第三步應該要印出區網內所有鄰居。 以下是幾種常見的狀況:

  1. 如果看不到半個鄰居, 那多半是自己的問題。 例如網路線沒接好或插錯孔。
  2. 如果看得到 gateway 但連不到外界 (例如 google 的 DNS 伺服器 8.8.8.8), 而且鄰居們也是如此, 那多半是 gateway 對外連線有問題。
  3. 如果我看得到 gateway 但連不到外界; 可是別人卻看得到 gateway 也連得到外界, 那有可能是我的 IP 跟鄰居衝突了。 請先 ifconfig eth0 downifdown eth0 清除網卡舊的設定, 再換一個閒置的 IP 再試試看。 (見下方 「有線網卡, 固定 ip」。)

如果連 8.8.8.8 也看得到, 那表示網路其實已正常連線; 可能只是沒設定 DNS。 請跳到下一節 「設定 DNS」。

有線網卡, 自動取得 ip

若您的網路環境是自動取得 ip, 請下 dhclient 網卡名稱

有些版本的指令是 dhcpd 而不是 dhclient; 總之先按 dhc 然後按一兩次 Tab 鍵, 系統會提示。

有線網卡, 固定 ip

若您的網路環境是固定 ip, 例如是 987.321.456.789 或者原本期待 DHCP 自動派送所有資訊, 但 DHCP 卻掛掉了, 那麼請下:

        ifconfig eth2 987.321.456.789 netmask 255.255.255.0
        route add default gw 987.321.456.254

其中 netmask 後面的數字, 及 gw 後面的數字, 可先用 windows 機器查出。

如果下錯第一個指令, 可以這樣刪除錯誤的設定: ifconfig eth2 down; 如果下錯第二個指令, 可以這樣刪除錯誤的設定: ip route del 0/0

再參考 這篇 填寫 /etc/network/interfaces 變成永久設定。

有線網卡, ADSL 撥接

若您的網路環境是 adsl, 請下 pppoeconf 或 有些版本的指令是 pppoe-setup 而不是 pppoeconf; 總之先按 pppoe 然後按一兩次 Tab 鍵, 系統會提示。

逐步回答問題, 包含帳號及密碼等等。 注意: 帳號要完整打出, 包含 @ 及後面一串, 像是 12345678@hinet.net 。 其他大多數問題如果看不懂, 可直接按 Enter 採用建議值。

關於 pppoe-setup 的補充: 在詢問 nameserver 時, 可考慮回答 "server"。 設定成功後, 按照 pppoe-setup 的指示, 用 pppoe-start 啟動連線。

無線網卡

詳見 赤手空拳也要用 wpa_supplicant 接通無線網路

其他參考資料: 河馬工作室 的中文教學及 Jack Wallen masrust bernaerts 的英文教學。

設定 DNS

最後, 如果 route -n 看來正常, 但仍舊無法上網, 請在瀏覽器裡面打這個網址: 61.219.38.89 或這個網址: 203.66.88.89。 如果數字 ip 可以上網, 但文字 ip 不行, 那就是忘記設定 /etc/resolv.conf 請在這個檔案裡面加一句:

        nameserver 8.8.8.8

或把裡面的數字改成網路提供者給您的 DNS 網址。 nameserver 指令可以有好幾列。 請把回應速度快的 DNS 伺服器放前面。

自我約束上網速度

曾經因為下載大檔案而被室友抱怨嗎? 可以用 trickle 指令自我限制上網速度, 把頻寬留給別人, 快快惹人愛 哦!

區網裡還有那些電腦? 開了什麼服務?

有些時候會需要知道某個區域網路裡面還有那些其他電腦。 (例如懷疑你的固定 IP 被別人搶走了。) 比方說我從無線分享器取得網址 192.168.1.21 那麼可以下: nmap -sP 192.168.1.0/24 從 192.168.1.1 到 192.168.1.254 逐一查看每個 IP 是否已被使用。 這裡的 /24 表示前面 24 個 bit 固定; 後面 8 個 bits 從 0 變化到 255 逐一檢查每個 ip。 (當然, 扣除 .0 和 .255 之類的例外 ip) 所以這個指令會列出 192.168.1.1 到 192.168.1.254 之間, 已被佔用的 ip 位址。

如果進一步想知道某一部電腦到底開啟了那些服務呢? nmap 192.168.1.21 會列出 192.168.1.21 這部機器所開啟的服務。 如果 nmap 回報該電腦未上線, 也可試打 nmap -PN 192.168.1.21 不論是否上線, 就是要強制檢查; 當然, 這樣會花比較久的時間。 請拿兩部電腦互相測試。 試著在一部機器上停止/重新啟動某些服務 (例如 apache 網頁伺服器), 然後從另一部機器回頭檢驗。

其他網路筆記

有一次我用 slax 開機, 透過 hinet 浮動 ip 上網, 並且想從其他電腦連線進去看它的網頁, 結果一直連不上。 當初這部 slax 電腦與其他電腦一起躲在 192.168.1.* 的區域網路裡面的時候, 明明別人就可以看得見它的網頁服務呀; 為什麼改用 hinet 的浮動 ip 就不行了呢? 用上述指令測試一下, 發覺所有服務都被關掉了。 後來才發現: 原來 slax 內建防火牆。 於是按照 論譠的建議:

	iptables -F INPUT
	iptables -F OUTPUT
	iptables -F FORWARD
	iptables -t nat -F

再重新測試一次, 防火牆果然就卸除下來了。 也請搜尋 linux disable firewall。

參考資料

更多參考資料, 請用文中指令及關鍵詞搜尋。

  1. Diagnose and fix network problems yourself