連上 Internet
本文已不再維護,更新文章請參考 此處
最近更新日期:2003/09/19
 
呼呼!終於要來到修改 Linux 網路參數的章節了!在前面的 網路基礎 章節內我們知道了主機要連上 Internet 需要一些正確的網路參數設定,這些設定在 Windows 系統上面的修改則在 區域網路的架構 裡面進行了說明。在這一章當中,我們則主要以固定 IP 的設定方式來修改 Linux 的網路參數,同時,也會介紹如何使用 ADSL 的撥接方式來上網,此外,因為 Cable modem 使用者也不在少數,所以我們也說明一下 Cable modem 在 Linux 下的設定方式喔!
 
Linux 網路相關設定檔案
安裝網路卡
  :手動安裝網路卡驅動程式dmesg,
  :使用 Private IP 測試網路卡之運作手動設定, 檔案設定
連上 Internet 的方法
  :固定 IP 上網方式: 非撥接上網之方式
  :Cable Modem 上網方式
  :ADSL 撥接上網方式
  :撥接程式 rp-pppoe 訊息錯誤處理
設定內部保留 IP 與 DNS IP
  :/etc/hosts,
  :/etc/resolv.conf,
無法連線的自我檢查幾大問題詳解
課後練習
參考資料

Linux 網路相關設定檔案
安裝網路卡:
    網路卡是個硬體啊,所以要驅動他的話,核心就需要有支援該網路卡的晶片組才行。一般來說,目前新版的 Linux 預設可以支援的網路卡晶片組數量已經很完備了,包括大廠的 3COM, Intel 以及初階的 RealTek, D-Link 等網路卡晶片都已經被支援,所以使用者可以很輕易的設定好他們的網路卡。不過,如果萬一不幸核心沒有支援該網路卡的話,那麼您可以透過 (1)重新編譯核心或者是 (2)編譯網路卡驅動模組 ( Modules ),並且載入該模組,好讓核心可以支援網路卡這塊硬體啦!但是,重編核心或編譯網路卡核心模組都不是簡單的工作,所以萬一您的網路卡真的不被預設的 Linux 網路晶片所支援,那麼鳥哥真的建議直接換一塊被 Linux 支援的網路卡吧,例如很便宜的螃蟹卡!免得花了太多時間在硬體確認上面,划不來的! ^_^ 如果您是照鳥哥推薦的,使用 RLT 8139 晶片 ( RealTek 8139 ) 的網路卡 ( 就是螃蟹卡 ) ,那您應該在安裝 Linux 的時候就已經捉到網路卡了,那真是恭喜您啦!因為您的網路卡應該已經可以正常的工作囉!那如果在安裝的時候並沒有捉到網路卡呢?該如何是好?那也不用擔心,因為您也可以事後才安裝網路卡的驅動程式呀!不過,因為 Linux 並不像 Windows 是那樣的隨插即用,所以需要動一些手術的!
     
    如果很不幸的,您使用的是比較罕見的一些網路卡,或者是 Linux 核心支援度不太夠的網卡,以致於在安裝 Linux 時,並無法捉到這張卡,那也不用擔心,我們可以使用較為簡單的核心模組編譯來支援這張網卡。底下我們以 D-Link 530 這一張曾被稱為 Linux 惡魔卡的網路卡來進行模組的編譯,如果您使用的是其他廠牌的網路卡,其實編譯過程與底下的流程是類似的喔!
     

    手動安裝網路卡驅動程式
     
    如前面所說的,我們的 Linux 預設核心裡面,已經建立了很多的網路卡驅動程式模組了!所以囉!編譯網路卡模組之前的首要工作就是先確認一下您的網路卡的晶片組是否有被支援呢?如果有支援的話『那麼自然不需要編譯模組了咯』! D-Link 530 這塊網路卡的晶片組就是有名的 via-rhine ( 有的時候也寫成是 viarhine ),先來找一找有沒有這塊網卡的模組吧。核心預設的網路卡模組路徑在底下可以發現:
     
    1. 先察看一下核心版本,因為不同的版本模組放置的路徑不同。
    [root@test /root]# uname -r
    2.4.20-18.9
    上面是以 Red Hat 9 為範例, 他的核心是 2.4 版喔。
     
    2. 核心模組的路徑:
    [root@test /root]# cd /lib/modules/`uname -r`/kernel/drivers/net
    上面是 2.4 版的路徑
    [root@test /root]# cd /lib/modules/`uname -r`/net
    上面是 2.2 版的路徑,請依照您的實際核心來查詢。
     
    [root@test net]# ls -l via*
    -rw-r--r--    1 root     root        17892 Sep  7  2001 via-rhine.o
    太好了!被支援到呢!
     
    如果幸運的話,那麼您的網路卡就已經被支援,可以跳過編譯的過程,直接進行模組的載入吧!萬一您連自己的網路卡到底有沒有被 Linux 捉到都不知道,那麼可以使用底下的方法來測試:
     
    [root@test /root]# dmesg | grep eth
    divert: allocating divert_blk for eth0
    eth0: RealTek RTL8139 Fast Ethernet at 0xc4844000, 00:50:fc:20:f1:4c, IRQ 10
    eth0:  Identified 8139 chip type 'RTL-8139C'
    eth0: Setting 100mbps full-duplex based on auto-negotiated partner ability 45e1.
    divert: allocating divert_blk for eth1
    eth1: Digital DC21041 Tulip rev 33 at 0xc4852000, 21041 mode, 00:80:C8:5A:87:10, IRQ 9.
     
    看到上面的資訊了嗎?因為我有兩張網路卡,一張是螃蟹卡 ( eth0 ) 另一張則是很舊很舊的 10 Mbps 的網路卡,Linux 預設就捉到了!所以我也就不需要重新編譯核心模組!不過,萬一捉不到呢?亦即上面沒有顯示出 eth0 或者 eth1 等資訊,那就表示 Linux 無法找到該硬體,呵呵!底下就得來編譯囉!
     
    1. 下載網路卡驅動程式模組:

    2. 萬一不幸的,您的網路卡的驅動模組恰好不在 Linux 的預設支援當中,例如買到了雜牌的卡或是特別想要的卡 ( 例如 D-Link 530 TX ) ,那您就必須要注意這些卡的包裝上面是否有提及『支援 Linux 』字樣!如果有支援的話就可以買了,因為一定會有驅動程式附在上面的磁片中的,以鳥哥的 FNW-9702-T 為例,他就有附上一塊驅動程式片,裡頭有一個 linux 目錄,裡面就是安裝驅動程式的原始碼啦!如果找不到驅動程式的話,您可以到下面的網站去找找看有沒有您需要的驅動程式原始檔案,當然囉!最好還是到您買的那張網路卡的公司去下載完整的驅動程式碼!例如上面提到的 D-Link 530TX的驅動程式原始碼,在底下的友訊網站就有提供下載!  
    3. 確定所需套件存在:

    4. 在開始編譯核心模組之前,因為驅動程式需要配合核心來編譯,所以會使用到 kernel source 或者是 kernel header 的資料,此外,也需要編譯器 ( compiler ) 的幫助,因此,先確定您的 Linux 系統當中已經有底下的套件存在 ( 註:每一個版本的 Linux 套件名稱都不相同,我這裡是以 Red Hat 9 來做說明,如果您的 Linux 不是 Red Hat 9 ,不要緊,只要看到 kernel 字樣有出現,應該就沒有問題! ) 而由於很多的核心模組預設都是由 /usr/src/linux 這個 kernel source 的目錄來取得所需要的資訊,偏偏目前很多的 Linux 版本都是使用 /usr/src/linux-2.4 這個目錄來連結,所以很多時候您會發現找不到檔案的錯誤訊息,因此,可以使用這樣的方式來進行連結目錄的製作:
      假設核心的 Open source 目錄為 /usr/src/linux-2.4.20-18.9
      [root@test root]# cd /usr/src
      [root@test src]# ln -s linux-2.4.20-18.9 linux
      另外,如果沒有安裝上述的某些套件時,請拿出您的原版光碟,然後以 rpm 將他安裝上您的 linux 系統吧! ^_^
       
    5. 編譯下載的模組

    6. 上述的工作確認過後,並且由友訊網站下載了驅動程式後 ( 註:我下載的是完整的驅動程式片,也就是 DEF-530TX Shipping Driver 那個驅動程式,不過該檔案 530tx.zip 是給 windows 用的,所以還需要在 Windows 底下解壓縮後,才會得到 dlkfet-4.24.tar.gz 這個檔案吶! ) 就可以準備來進行模組的編譯了。
      1. 將剛剛取得的 dlkfet-4.24.tar.gz 放置到 /tmp 底下
      [root@test root]# cp dlkfet-4.24.tar.gz /tmp
      [root@test root]# cd /tmp
      [root@test tmp]# tar -zxvf dlkfet-4.24.tar.gz
      [root@test tmp]# cd dlkfet-4.24
       
      2. 開始編譯:
      [root@test dlkfet-4.24]# make
      到此為止,會產生一個檔案模組,稱為: rhinefet.o
      [root@test dlkfet-4.24]# cp rhinefet.o  \
      > /lib/modules/`uname -r`/kernel/drivers/net
      [root@test dlkfet-4.24]# depmod -a
      特別留意,上面的路徑為 2.4.xx 版本的核心!並且將該模組寫入屬性相依檔案。
      當然囉,如果您是使用其他的網路卡,那麼所得到的網路卡驅動程式自然就會成為 filename.o 啦!同樣將他移動到模組放置的目錄後,執行 depmod -a 即可。(註:如果您的模組原始碼檔名為 driver.c ,並且沒有 Makefile 的輔助,那麼使用『gcc -DMODULE -D__KERNEL__ -O6 -c driver.c』來編譯出 driver.o 也是可以的作法!)
       
    7. 模組測試:

    8. 核心模組編譯完成之後,當然就得需要測試看看能不能正常的運作了。測試的方法很簡單,因為我們已經進行了 depmod -a 了,所以可以直接以 modprobe 來進行模組的載入:
      1. 載入模組的測試:
      [root@test root]# modprobe rhinefet
      請注意,不要寫完整的檔名, .o 不需要寫,那個 rhinefet 就是
      剛剛編譯出來的 rhinefet.o 咯!
      [root@test root]# lsmod
      Module                  Size  Used by    Tainted: P
      rhinefet                14208   2
      ....(略)....
       
      2. 設定開機時載入模組
      [root@test root]# vi /etc/modules.conf
      # 加入底下這一行
      alias eth0 rhinefet
       
      3. 也可以重新開機是看看能否正常的啟動模組:
      [root@test root]# sync; sync; reboot
      如果可以出現上述的畫面,那麼表示模組可以被正確的載入,同時,如果模組已經正確的載入了,那麼就可以直接寫入開機設定檔 /etc/modules.conf 了。注意一下,在上面的例子當中,我們使用的是 rhinefet 這個模組,如果您的模組名稱並非這個名稱,請依照您的實際狀態來修改,不要在 /etc/modules.conf 照抄我的設定啊!不然.....不要怪我∼
       
    基本上,這樣就已經編譯成功,並且也將該模組掛上系統了,接下來就是需要測試一下這個網路卡是否能夠正確的來運作啦!
     

    使用 Private IP 測試網路卡之運作:手動設定, 檔案設定
     
    要測試網路卡是否能夠工作,就是給網路卡一個私有 IP 來測試即可!而測試的方法又很簡單,可以直接以手動下達指令的方式來啟動網路卡,也可以使用設定檔來設定好網路參數。底下我們以 192.168.1.2 這個私有 IP ,加上 255.255.255.0 這個 C Class 的 netmask 來測試看看,此外,也以 eth0 為預設的 Gatewaydev ( 通訊閘裝置 ):
     

      手動設定
       
      ifconfig 的詳細說明我們在下一章再來詳談,這裡先談一談他的簡易用法囉:
       
      [root@test root]# ifconfig eth0 192.168.1.2
      [root@test root]# ifconfig
      eth0      Link encap:Ethernet  HWaddr 00:10:DC:F1:D8:C5
                inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0
                UP BROADCAST MULTICAST  MTU:1500  Metric:1
                RX packets:0 errors:0 dropped:0 overruns:0 frame:0
                TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:100
                RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
                Interrupt:17 Base address:0xd400 Memory:fb060000-fb060038
       
      lo        Link encap:Local Loopback
                inet addr:127.0.0.1  Mask:255.0.0.0
                UP LOOPBACK RUNNING  MTU:16436  Metric:1
                RX packets:41739 errors:0 dropped:0 overruns:0 frame:0
                TX packets:41739 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:0
                RX bytes:4252360 (4.0 Mb)  TX bytes:4252360 (4.0 Mb)
       
      [root@test root]# ping 192.168.1.2 -c 3
      PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
      64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.106 ms
      64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.016 ms
      64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.013 ms

      --- 192.168.1.2 ping statistics ---
      3 packets transmitted, 3 received, 0% packet loss, time 1998ms
      rtt min/avg/max/mdev = 0.013/0.045/0.106/0.043 ms
       
      [root@test root]# ifconfig eth0 down

       
      使用 ifconfig 後面加上網路卡代號,並且加上 IP ,就可以設定好網路卡的相關網路參數了!不過,要注意的是那個網路介面有個 lo 的咚咚存在是吧!沒錯啦!在網路基礎裡面談到的 loopback 就是這個介面囉!他的預設 IP 就是 127.0.0.1 咯。再來使用 ping 來測試該網路卡是否能夠正常的回應,呵呵!這樣就算測試成功了。再來先將網路卡關掉,然後底下再以檔案模式的方法來測試一下網路卡囉!另外, ifconfig 也可以直接修改 IP ,例如上面的案例中,如果在網路卡啟動的狀態下,想要將 IP 改為 192.168.1.200 ,則下達『ifconfig eth0 192.168.1.200 』即可!
       

      檔案設定
       
      在檔案的設定裡面,我們會動用到的檔案其實只有 /etc/sysconfig/network-scripts/ifcfg-eth0 ,不過,底下我們連同通訊閘(Gateway)也一同設定妥當,同時更改主機名稱,所以還會動用到 /etc/sysconfig/network 這個檔案哩!修改一下先:
       
    上述的兩種方法中,請特別留意的是,手動以 ifconfig 這個指令來修改 IP 或者是網路卡參數是可行的,您可以在任何時刻手動的修改。不過,如果原先以 ifup eth0 的方式來啟動網路卡之後,再以 ifconfig 來進行 IP 的修改,那麼網路的的啟動與關閉就得使用 ifconfig 了,不能夠使用 ifdown eth0 來關閉了!否則會顯示找不到該網路卡的錯誤訊息喔!反正大原則就是:先以檔案的型態 ifcfg-eth0 來設定好您的網路參數,而如果想要暫時更動網路參數的話,那麼就使用 ifconfig 來進行修改,如此一來,未來重新開機之後,還是會以 ifcfg-eth0 的設定為準

連上 Internet 的方法:
設定內部保留 IP 與 DNS IP: /etc/hosts, /etc/resolv.conf,
無法連線的自我檢查幾大問題詳解
課後練習
參考資料:
連上 Internet

2002/07/24:首次釋出日期
2003/08/18:重新校正,並且修正部分書寫方式
2003/08/20:新增課後練習部分
2003/09/19:加入前往參考用解答