網路卡的安裝,與連接上 Internet 的方法介紹
終於要來到修改 Linux 網路參數的章節了!在第二章的網路基礎中, 我們知道主機要連上 Internet 需要一些正確的網路參數設定,這些設定在 Windows 系統上面的修改則在第三章的區域網路架構中說明了。在這一章當中,我們則主要以固定 IP 的設定方式來修改 Linux 的網路參數,同時,也會介紹如何使用 ADSL 的撥接方式來上網,此外,因為 Cable modem 使用者也不在少數,所以我們也說明一下 Cable modem 在 Linux 下的設定方式喔! 最後,由於筆記型電腦使用者大增,且因為筆記型電腦常使用無線網路,因此本文也加入了無線網路的連線介紹啊!
由前面幾章的資料我們知道,想要連上 Internet 你得要設定一組合法的 IP 參數才可以,主要是 IP, Netmask, Gateway, DNS IP 以及主機名稱等。那我們也知道,其實整個主機最重要的設定,就是『先要驅動網路卡』,否則主機連網路卡都捉不到時, 怎麼設定 IP 參數都是沒有用的,你說是吧!所以底下我們就來談一談, 你要如何確定網路卡已經被捉到,而 Linux 主機的網路參數又該如何設定?
你怎麼確認 Linux 有捉到網路卡?Linux 底下的網路卡的名稱是啥?讓我們來瞭解一下吧!
[root@www ~]# dmesg | grep -in eth 377:e1000: eth0: e1000_probe: Intel(R) PRO/1000 Network Connection 383:e1000: eth1: e1000_probe: Intel(R) PRO/1000 Network Connection 418:e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX 419:eth0: no IPv6 routers present從上面的第 377 及 383 這兩行,我們可以查到這部主機的兩張網路卡都使用模組為 e1000,而使用的晶片應該就是 Intel 的網路卡了。此外,這個網卡的速度可達到 1000Mbps 的全雙工模式哩 (418行) !除了使用 dmesg 來查詢核心偵測硬體產生的資訊外,我們也可以透過 lspci 來查詢相關的設備晶片資料喔!如下所示:
[root@www ~]# lspci | grep -i ethernet 00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 02)請注意,鳥哥這裡使用的是 Virtualbox 模擬的那部主機的環境 (請參考第一章 1.2.2-2),因此使用的是模擬出來的 Intel 網卡。 如果你是使用自己的實際硬體配備安裝的主機,那麼應該會看到不同的晶片啦!那是正常的!
[root@www ~]# lsmod | grep 1000 e1000 119381 0 <==確實有載入到核心中! [root@www ~]# modinfo e1000 filename: /lib/modules/2.6.32-71.29.1.el6.x86_64/kernel/drivers/net/e1000/e1000.ko version: 7.3.21-k6-NAPI license: GPL description: Intel(R) PRO/1000 Network Driver .....(以下省略).....上面輸出資訊的重點在於那個檔名 (filename) 的部分!那一長串的檔名目錄,就是我們驅動程式放置的主要目錄所在。 得要注意的是,那個 2.6.32-71.29.1.el6.x86_64 是核心版本,因此,不同的核心版本使用的驅動程式其實不一樣喔!我們才會一直強調,更改核心後, 你自己編譯的硬體驅動程式就需要重新編譯啦!
一般來說,如果沒有特殊需求,鳥哥不是很建議你自己編譯網路卡的驅動程式!為啥? 因為想到每次更新核心都得要重新編譯一次網卡驅動程式,光是想想都覺得煩~所以,沒有被 Linux 預設核心支援的網卡, 就先丟著吧!
如果你真的很有求知慾,而且該網卡的官網有提供給 Linux 的驅動程式原始碼; 或者是你很想要某些官網提供的驅動程式才有的特殊功能;又或者是你真的很不想要再買一張額外的網卡。 此時,就得要重新編譯網路卡的驅動程式囉。
因為我們這裡使用的網路卡是 Intel 的 82540EM Gigabit Ethernet 控制晶片,假設你需要的驅動程式得要由 Intel 官網取得最新的版本,而不要使用預設的核心所提供的版本時,那你該如何處理呢?請注意,鳥哥這個小節只是一個範例簡介, 不同的廠商推出的驅動程式安裝方式都有點不太一樣,你得要參考驅動程式的讀我檔 (READ ME) 或相關檔案來安裝才行。 此外,如果預設驅動程式已經捉到了網路卡,鳥哥是建議使用預設的驅動程式就好了喔!
另外,由於編譯程式需要編譯器以及核心相關資訊,因此得要預先安裝 gcc, make, kernel-header 等軟體才行。 但是我們選擇的安裝模式為『basic server』,這些軟體預設都沒有安裝的,所以你得要先安裝這些軟體才行。 這些軟體可以簡單的透過 yum 使用『yum groupinstall 'Development Tools'』來安裝,只可惜你並沒有網路啊! 所以就得要透過原本光碟一個一個去處理 RPM 屬性相依的問題來解決了~很麻煩的~不然的話,就得要透過更改 yum 設定檔,使用本機檔案的類型來取得原版光碟的 yum 軟體清單囉!鳥哥這裡假設你已經安裝了所需要的編譯器了, 接下來的動作是:
[root@www ~]# tar -zxvf e1000-8.0.30.tar.gz -C /usr/local/src [root@www ~]# cd /usr/local/src/e1000-8.0.30/ # 此時在該目錄下有個 README 的檔案,記得看一看,這個檔案內會說明很多資訊, # 包括如何編譯,以及這個模組所支援的晶片組哩! [root@www e1000-8.0.30]# cd src [root@www src]# make install最後這個模組會被編譯完成且安裝放置於如下的檔名: /lib/modules/$(uname -r)/kernel/drivers/net/e1000/e1000.ko。 接下來我們得要重新載入這個新的模組才行呦!
# 1. 先移除已經載入在記憶體中的舊模組 [root@www ~]# rmmod e1000 # 此時已經捉到的網卡會整個消失不見!因為驅動程式被卸載了嘛! # 2. 載入新模組,並且查閱一下有沒有捉到正確的版本! [root@www ~]# modprobe e1000 [root@www ~]# modinfo e1000 filename: /lib/modules/2.6.32-71.29.1.el6.x86_64/kernel/drivers/net/e1000/e1000.ko version: 8.0.30-NAPI <==就是這裡! license: GPL description: Intel(R) PRO/1000 Network Driver請自行與前一小節比對一下,就會發現真的捉到正確的版本囉!不過,這個模組在下次新的核心推出後就會失效! 為什麼呢?因為新核心會給一個新的驅動程式嘛!就不是你現在這個 8.0.30 的版本囉。這點還是要再次說明的。
[root@www ~]# vim /etc/modprobe.d/ether.conf alias eth0 e1000 alias eth1 e1000 <==因為鳥哥有兩張網卡嘛! [root@www ~]# sync; reboot為了測試一下剛剛的設定是否會生效,通常鳥哥都會嘗試一次重新開機,然後開機完成之後觀察一下是否有正確的啟動網路卡, 並觀察一下模組載入的情況,如果一切都順利,那就太完美了!
[root@www ~]# ifconfig eth0 192.168.1.100 [root@www ~]# ifconfig eth0 Link encap:Ethernet HWaddr 08:00:27:71:85:BD inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0 ....(以下省略)....嘿嘿!真的設定妥當哩!然後利用 ping 這個指令去 ping 一下網域內的其他電腦, 看看能不能有回應,就知道你的網路卡是否 OK 的啦!通常是沒有問題的啦!
我們知道 TCP/IP 的重要參數主要是: IP, Netmask, Gateway, DNS IP ,而且千萬不要忘記你這部主機也應該要有主機名稱 (hostname)!此外,我們也知道 IP 的取得有手動設定、DHCP 處理等。那麼這些參數主要是寫在哪些設定檔?如何對應呢? 底下就讓我們來處理一番!
所需網路參數 | 主要設定檔檔名 | 重要參數 |
IP Netmask DHCP 與否 Gateway 等 |
/etc/sysconfig/network-scripts/ifcfg-eth0 | DEVICE=網卡的代號 BOOTPROTO=是否使用 dhcp HWADDR=是否加入網卡卡號(MAC) IPADDR=就是IP位址 NETMASK=子網路遮罩啦 ONBOOT=要不要預設啟動此介面 GATEWAY=就是通訊閘啦 NM_CONTROLLED=額外的網管軟體 鳥哥建議取消這個項目! |
主機名稱 | /etc/sysconfig/network | NETWORKING=要不要有網路 NETWORKING_IPV6=支援IPv6否? HOSTNAME=你的主機名 |
DNS IP | /etc/resolv.conf | nameserver DNS的IP |
私有 IP 對應 的主機名稱 |
/etc/hosts | 私有IP 主機名稱 別名 |
你沒有看錯,主要需要修改的就是這四個檔案而已!因此沒有很困難!大家都想太多了!詳細的設定後續小節再來講, 這裡先有概念即可。除此之外,還有些檔案或許你也應該要知道一下比較好呦!
大概知道上面這幾個檔案後,未來要修改網路參數時,那就太簡單了!至於網路方面的啟動指令的話,可以記得幾個簡單的指令即可喔!
大概你只要知道這些基本的指令與檔案,哈哈!網路參數的設定就太簡單啦! 不過,最好你還是要瞭解 shell script ,比較好!因為可以追蹤整個網路的設定條件。 why ?這是因為每個 distributions 的設定資料可能都不太相同,不過卻都以 /etc/init.d/network 作為啟動的 script , 因此,你只要瞭解到該檔案的內容,很容易就追蹤得出來你的設定檔所需要的內容呢!對吧!
另外,新版的 CentOS 6.x 還有額外推出一個名稱為 NetworkManager 的軟體機制來管理網路, 不過,鳥哥還是比較喜歡手工打造自己的網路環境,所以很建議將該軟體關閉呢!還好,我們安裝的『basic server (第一章的 1.2.2-2)』 就這麼巧的沒有安裝該軟體!好佳在~^_^
在前幾章我們就談過,台灣地區主要連上網際網路的方法有(1)學術網路、(2)ADSL 固接與撥接、(3)Cable modem 等方式,同時,手動設定 IP 參數是很重要的學習,因此,底下的各節中,第一節的手動設定固定 IP 一定要做過一次! 其他的才依照您的環境去設定去學習!
此外,由於目前使用 Linux notebook 的使用者大增,而 Notebook 通常是以無線網路來連線的, 所以鳥哥在這裡也嘗試使用一款無線網路來進行連線設定。至於傳統的 56 Kbps 撥接則因為速度較慢且使用度越來越低, 所以在這裡就不多做介紹了。
所謂的固定 IP 就是指在你的網路參數當中,你只要輸入既定的 IP 參數即可。那麼這個既定的 IP 來自哪裡呢? 一般來說,他可能來自於:
這樣清楚嗎?也就是說,我們取得的固定 IP 參數並非一定是 public IP 喔!反正就是一組可接受的固定 IP 就是了! 所以在架設你的環境之前,請先注意所有網路參數的來源正確性啊!好了,那麼你的 IP 要如何設定呢?先回去翻翻第三章 3.2.1 裡面的圖 3.2-1,我們對外網卡 (eth0) 的資訊為:
IP: 192.168.1.100 Netmask: 255.255.255.0 Gateway: 192.168.1.254 DNS IP: 168.95.1.1 Hostname: www.centos.vbird
那麼要修改的四個檔案與相關的啟動腳本,以及重新啟動後需要用啥指令觀察的重點,鳥哥再次的使用一個簡單的表格來說明, 你只要記得這幾個表格內的重要檔案與指令,以後在修改網路參數時,就不會出現錯誤了!看看吧!
修改的參數 | 設定檔與重要啟動腳本 | 觀察結果的指令 |
IP相關參數 | /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/init.d/network restart |
ifconfig (IP/Netmask) route -n (gateway) |
DNS | /etc/resolv.conf | dig www.google.com |
主機名稱 | /etc/sysconfig/network /etc/hosts |
hostname (主機名) ping $(hostname) reboot |
底下我們就分別針對上面的各項設定來進行檔案的重新修改囉!
[root@www ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE="eth0" <==網路卡代號,必須要 ifcfg-eth0 相對應 HWADDR="08:00:27:71:85:BD" <==就是網路卡位址,若只有一張網卡,可省略此項目 NM_CONTROLLED="no" <==不要受到其他軟體的網路管理! ONBOOT="yes" <==是否預設啟動此介面的意思 BOOTPROTO=none <==取得IP的方式,其實關鍵字只有dhcp,手動可輸入none IPADDR=192.168.1.100 <==就是 IP 啊 NETMASK=255.255.255.0 <==就是子網路遮罩 GATEWAY=192.168.1.254 <==就是預設路由 # 重點是上面這幾個設定項目,底下的則可以省略的囉! NETWORK=192.168.1.0 <==就是該網段的第一個 IP,可省略 BROADCAST=192.168.1.255 <==就是廣播位址囉,可省略 MTU=1500 <==就是最大傳輸單元的設定值,若不更改則可省略上面的資料很好理解吧!請注意每個變數(左邊的英文)都應該要大寫! 否則我們的 script 會誤判!事實上鳥哥的設定值只有最上面的 8 個而已,其他的 NETWORK, BROADCAST, MTU 鳥哥都沒有設定喔! 至於參數的說明方面,IPADDR, NETMASK, NETWORK, BROADCAST 鳥哥在這裡就不再多說,要談的是幾個重要的設定值:
[root@www ~]# /etc/init.d/network restart Shutting down interface eth0: [ OK ] <== 先關閉介面 Shutting down loopback interface: [ OK ] Bringing up loopback interface: [ OK ] <== 再開啟介面 Bringing up interface eth0: [ OK ] # 針對這部主機的所有網路介面 (包含 lo) 與通訊閘進行重新啟動,所以網路會停頓再開這樣就處理完畢囉,那接下來當然就是觀察看看囉!
# 檢查一:當然是要先察看 IP 參數對否,重點是 IP 與 Netmask 啦! [root@www ~]# ifconfig eth0 eth0 Link encap:Ethernet HWaddr 08:00:27:71:85:BD inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fe71:85bd/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:655 errors:0 dropped:0 overruns:0 frame:0 TX packets:468 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:61350 (59.9 KiB) TX bytes:68722 (67.1 KiB) # 有出現上頭那個 IP 的資料才是正確的啟動;特別注意 inet addr 與 Mask 項目 # 這裡如果沒有成功,得回去看看設定檔有沒有錯誤,然後再重新 network restart ! # 檢查二:檢查一下你的路由設定是否正確 [root@www ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 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 1002 0 0 eth0 0.0.0.0 192.168.1.254 0.0.0.0 UG 0 0 0 eth0 # 重點就是上面的特殊字體!前面的 0.0.0.0 代表預設路由的設定值! # 檢查三:測試看看與路由器之間是否能夠連線成功呢! [root@www ~]# ping -c 3 192.168.1.254 PING 192.168.1.254 (192.168.1.254) 56(84) bytes of data. 64 bytes from 192.168.1.254: icmp_seq=1 ttl=64 time=2.08 ms 64 bytes from 192.168.1.254: icmp_seq=2 ttl=64 time=0.309 ms 64 bytes from 192.168.1.254: icmp_seq=3 ttl=64 time=0.216 ms --- 192.168.1.254 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2004ms rtt min/avg/max/mdev = 0.216/0.871/2.088/0.861 ms # 注意啊!有出現 ttl 才是正確的回應!如果出現『 Destination Host Unreachable 』 # 表示沒有成功的連線到你的 GATEWAY 那表示出問題啦!趕緊檢查有無設定錯誤。要注意,第三個檢查如果失敗,可能要看你的路由器是否已經關閉?或者是你的 switch/hub 是否有問題,或者是你的網路線是否錯誤,還是說你的或路由器的防火牆設定錯誤了?要記得去解決喔! 這三個檢查做完而且都成功之後,那麼你的 TCP/IP 參數設定已經完畢了!這表示你可以使用 IP 上網啦! 只是還不能夠使用主機名稱上網就是了。接下來就是要設定 DNS 囉!
[root@www ~]# vim /etc/resolv.conf nameserver 168.95.1.1 nameserver 139.175.10.20我們以中華電信與 SeedNet 在南部的 DNS 伺服器之 IP 作為設定的方式!請注意一下,如果你不知道你的最接近的 DNS 伺服器的 IP ,那麼直接輸入 nameserver 168.95.1.1 這個中華電信的 DNS 主機即可!不過如果你公司內部有設定防止 DNS 的要求封包的防火牆規則時,那麼你就得要請教貴公司的網管單位告知你的 DNS IP 設定啦!然後趕緊測試看看:
# 檢查四:看看 DNS 是否順利運作了呢?很重要的測試喔! [root@www ~]# dig www.google.com ....(前面省略).... ;; QUESTION SECTION: ;www.google.com. IN A ;; ANSWER SECTION: www.google.com. 428539 IN CNAME www.l.google.com. www.l.google.com. 122 IN A 74.125.71.106 ....(中間省略).... ;; Query time: 30 msec ;; SERVER: 168.95.1.1#53(168.95.1.1) <==這裡的項目也很重要! ;; WHEN: Mon Jul 18 01:26:50 2011 ;; MSG SIZE rcvd: 284上面的輸出有兩個重點,一個是問題查詢的是 www.google.com 的 A (Address) 參數,並且從回答 (Answer) 裡面得到我們所需的 IP 參數。最後面一段的 Server 項目非常重要!你得要看是否與你的設定相同的那部 DNS 伺服器 IP 才行! 以上面輸出為例,鳥哥使用中華電信的 DNS 伺服器,所以就出現 168.95.1.1 的 IP 位址囉。
[root@www ~]# vim /etc/sysconfig/network NETWORKING=yes HOSTNAME=www.centos.vbird [root@www ~]# vim /etc/hosts 192.168.1.100 www.centos.vbird # 特別注意,這個檔案的原本內容不要刪除!只要新增額外的資料即可!修改完畢之後要順利啟動的話,得要重新開機才可以。為什麼需要重新開機呢?因為系統已經有非常多的服務啟動了, 這些服務如果需要主機名稱,都是到這個檔案去讀取的。而我們知道設定檔更新過後,服務都得要重新啟動才行。 因此,已經啟動而且有讀到這個檔案的服務,就得要重新啟動啊!真麻煩~因此,最簡單的方法,就是重新開機。 但重開機之前還需要進行一項工作,否則,你的系統開機會花掉很多時間喔!
[root@www ~]# hostname localhost.localdomain # 還是預設值,尚未更新成功!我們還得要進行底下的動作! # 檢查五:看看你的主機名稱有沒有對應的 IP 呢?沒有的話,開機流程會很慢! [root@www ~]# ping -c 2 www.centos.vbird PING www.centos.vbird (192.168.1.100) 56(84) bytes of data. 64 bytes from www.centos.vbird (192.168.1.100): icmp_seq=1 ttl=64 time=0.015 ms 64 bytes from www.centos.vbird (192.168.1.100): icmp_seq=2 ttl=64 time=0.028 ms --- www.centos.vbird ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1000ms rtt min/avg/max/mdev = 0.015/0.021/0.028/0.008 ms # 因為我們有設定 /etc/hosts 規定 www.centos.vbird 的 IP , # 所以才找的到主機主機名稱對應的正確 IP!這時才能夠 reboot 喔!重要重要!
上面的資訊中,檢查的內容總共有五個步驟,這五個步驟每一步都要成功後才能夠繼續往下處理喔! 至於最重要的一點,當你修改過 /etc/sysconfig/network 裡面的 HOSTNAME 後, 務必要重新開機 (reboot)。但是重新開機之前,請務必『 ping 主機名稱』且得到 time 的回應才行!
可自動取得 IP 的環境是怎麼回事啊?不是很簡單嗎?當你在 IP 分享器後頭的主機在設定時,不是都會選擇『自動取得 IP 』嗎?那就是可自動取得 IP 的環境啦!那麼這個自動取得是怎麼回事啊?也不難瞭解啦,其實就是『有一部主機提供 DHCP 服務給整個網域內的電腦』就是了!例如 IP 分享器就可能是一部 DHCP 主機。那麼 DHCP 是啥? 他是:Dynamic Host Configuration Protocol 的簡寫,顧名思義,他可以『動態的調整主機的網路參數』的意思。詳細的 DHCP 功能我們會在第十二章說明的。好了,那麼這個方法適合哪些連線的方式呢?大致有這些:
你依舊需要前一小節手動設定 IP 的主機名稱設定 (第三步驟),至於 IP 參數與 DNS 則不需要額外設定, 僅需要修改 ifcfg-eth0 即可喔!這樣處理吧:
[root@www ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 HWADDR="08:00:27:71:85:BD" NM_CONTROLLED="no" ONBOOT=yes BOOTPROTO=dhcp
沒蓋你喔!只要這幾個項目即可,其他的都給他註解 (#) 掉!尤其是那個 GATEWAY 一定不能設定! 避免互相干擾!然後給他重新啟動網路:
[root@www ~]# /etc/init.d/network restart Shutting down interface eth0: [ OK ] <== 先關閉介面 Shutting down loopback interface: [ OK ] Bringing up loopback interface: [ OK ] <== 再開啟介面 Bringing up interface eth0: [ OK ] Determining IP information for eth0.. [ OK ] <== 重要!是 DHCP 的特點! # 你可以透過最後一行去判斷我們是否有透過 DHCP 協定取得 IP!
我們區域網路內的 IP 分享器或 DHCP 主機,就會立刻幫你的 Linux 主機做好網路參數的規劃, 包括 IP 參數與 GATEWAY 等,就通通設定妥當啦!很方便也很簡單吧!
終於來到台灣最熱門的 ADSL 撥接上網的介紹啦!來談一談如何在 Linux 上撥接上網吧! 要撥接上網時,可以使用 rp-pppoe 這套軟體來幫忙(註1),所以,你必須要確認你的 Linux distributions 上面已經存在這個玩意兒了!CentOS 本身就含有 rp-pppoe ,請使用原版光碟,或者是使用 yum 來進行安裝吧!
[root@www ~]# mount /dev/cdrom /mnt [root@www ~]# cd /mnt/Packages [root@www ~]# rpm -ivh rp-pppoe* ppp* [root@www ~]# rpm -q rp-pppoe rp-pppoe-3.10-8.el6.x86_64 <==你瞧瞧!確實已經安裝喔!
當然,很多 distributions 都已經將撥接這個動作歸類到圖形介面裡面去了,所以可能沒有提供 rp-pppoe 這個咚咚,沒關係,你可以到底下的網站去取得的:
然後再自行手動安裝即可。如何安裝的過程鳥哥在這裡就不談了,請自行前往基礎篇的原始碼與 Tarball 章節查閱相關資料吧。 另外請注意,雖然整個連線是由主機的乙太網路卡連接到 ADSL 數據機上,然後再透過電話線路連線到 ISP 的機房去,最後在主機上以 rp-pppoe 撥接達成連線。但是 rp-pppoe 使用的是 Point to Point (ppp) over Ethernet 的點對點協定所產生的網路介面,因此當你順利的撥接成功之後, 會多產生一個實體網路介面『 ppp0 』喔!
而由於 ppp0 是架構在乙太網路卡上的,你必須要有乙太網卡,同時,即使撥接成功後,你也不能將沒有用到的 eth0 關閉喔!注意注意!因此,撥接成功後就會有:
雖然 ppp0 是架構在乙太網卡上面的,但上頭這三個介面在使用上是完全獨立的,互不相干, 所以關於 eth0 的使用上,你就可以這樣思考:
[root@www ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BOOTPROTO=none NM_CONTROLLED=no IPADDR=192.168.1.100 NETMASK=255.255.255.0 ONBOOT=yes並請記得一件事情,那就是:『千萬不要有 GATEWAY 的設定!』, 因為 ppp0 撥接成功後, ISP 會主動的給予 ppp0 介面一個可以連上 Internet 的 default gateway , 如果你又設定另一個 default gateway ,兩個閘道器可能會造成你的網路不通喔!
至於其他的檔案請參考 4.2.1 手動設定 IP 的連線方法來處理即可。 當然啦,撥接之前,請確認你的 ADSL 數據機 (小烏龜) 已經與主機連線妥當,也取得帳號與密碼,也安裝好了 rp-pppoe ,然後就來處理吧!
[root@www ~]# pppoe-setup Welcome to the PPPoE client setup. First, I will run some checks on your system to make sure the PPPoE client is installed properly... LOGIN NAME (從 ISP 處取得的帳號填入處) Enter your Login Name (default root): T1234567 # 注意啊!這個帳號名稱是 ISP 給的,其中如果是 SeedNet ,輸入如上, # 如果是 Hinet 的話,就得要輸入 username@hinet.net,後面的主機名也要寫。 INTERFACE (ADSL 數據機所接的網卡代號) Enter the Ethernet interface connected to the PPPoE modem For Solaris, this is likely to be something like /dev/hme0. For Linux, it will be ethX, where 'X' is a number. (default eth0): eth0 Enter the demand value (default no): no DNS (就填入 ISP 處取得的 DNS 號碼吧) Enter the DNS information here: 168.95.1.1 Enter the secondary DNS server address here: <==若無第二部就按 enter PASSWORD (從 ISP 處取得的密碼啊!) Please enter your Password: <==輸入密碼兩次,螢幕不會有星號 * 喔! Please re-enter your Password: USERCTRL (要不要讓一般用戶啟動與關閉?最好是不要!) Please enter 'yes' (three letters, lower-case.) if you want to allow normal user to start or stop DSL connection (default yes): no FIREWALLING (防火牆方面,先取消,用自己未來設定的) The firewall choices are: 0 - NONE: This script will not set any firewall rules. You are responsible for ensuring the security of your machine. You are STRONGLY recommended to use some kind of firewall rules. 1 - STANDALONE: Appropriate for a basic stand-alone web-surfing workstation 2 - MASQUERADE: Appropriate for a machine acting as an Internet gateway for a LAN Choose a type of firewall (0-2): 0 Start this connection at boot time (要不要開機立即啟動撥接程序?) Do you want to start this connection at boot time? Please enter no or yes (default no):yes ** Summary of what you entered ** Ethernet Interface: eth0 User name: T1234567 Activate-on-demand: No Primary DNS: 168.95.1.1 Firewalling: NONE User Control: no Accept these settings and adjust configuration files (y/n)? y Adjusting /etc/sysconfig/network-scripts/ifcfg-ppp0 Adjusting /etc/resolv.conf (But first backing it up to /etc/resolv.conf.bak) Adjusting /etc/ppp/chap-secrets and /etc/ppp/pap-secrets (But first backing it up to /etc/ppp/chap-secrets.bak) (But first backing it up to /etc/ppp/pap-secrets.bak) # 上面具有特殊字體的檔案主要功能是: # ifcfg-ppp0 :亦即是 ppp0 這個網路介面的設定檔案; # resolv.conf :這個檔案會被備份後,然後以剛剛我們上面輸入的 DNS 資料取代; # pap-secrets, chap-secrets:我們輸入的密碼就放在這裡!這樣設定就成功啦!很簡單吧!唯一需要注意的是在上面的 username 那個地方,千萬注意, 因為 hinet 與 seednet 的設定是不一樣的!千萬小心呢!否則會無法連上線呦!此外, 由於我們在未來還會有 firewall 的建置,所以這裡不太需要使用到防火牆啦!否則也可能無法連上 Internet 呦!另外,注意一下,一般撥接需要的身份認證機制透過的是 chap 與 pap(註2), 在 rp-pppoe 這套軟體中,就將兩種認證機制所需的資料通通記錄下來啦!那就是 chap-secrets, pap-secrets, 你可以分別察看兩個檔案的內容,就知道那是啥咚咚了!
[root@www ~]# ifconfig [root@www ~]# route -n [root@www ~]# ping GW的IP [root@www ~]# dig www.google.com [root@www ~]# hostname比較特殊的是,因為 ADSL 撥接是透過點對點 (ppp) 協定,所謂的點對點,就是你的 ppp0 直接連接到 ISP 的某個點 (IP) , 所以,理論上,ppp0 是個獨立的 IP ,並沒有子網路!因此,當你察看 ppp0 的網路參數時,他會變成這樣:
[root@www ~]# ifconfig ppp0 ppp0 Link encap:Point-to-Point Protocol inet addr:111.255.69.90 P-t-P:168.95.98.254 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1 RX packets:59 errors:0 dropped:0 overruns:0 frame:0 TX packets:59 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:3 RX bytes:7155 (6.9 KiB) TX bytes:8630 (8.4 KiB)如上所示,那個 inet addr 就是你的 IP ,而 P-t-P 就是 Gateway 的意思啦!你也會看到, Mask 是 255.255.255.255 哩! 沒有子網路呦!要仔細看清楚哩!
[root@www ~]# vim /etc/sysconfig/network-scripts/ifcfg-ppp0 DEVICE=ppp0 ONBOOT=no ....(其他省略).... [root@www ~]# chkconfig pppoe-server off
很快的,這樣你就已經做好 ADSL 撥接上網的動作了!很快樂吧!但是不要忘記了,你的主機若還沒有更新 (update) 系統,恐怕資安方面會有些問題哩!所以,趕緊往下兩個章節讀讀去!
除了使用實體 RJ-45 線路來連接網路之外,由於現在筆記型電腦漸漸廣為使用,因此在筆記型電腦上面的無線網路 (Wireless Local Area Network, WLAN) 也越來越重要囉~針對無線網路所提出的標準中,早期是 IEEE 802.11b / 802.11g 較為重要,其中 802.11g 這個標準的傳輸速度已經可以達到 54Mbps 的水準。不過,近期以來還有新的標準,那就是 802.11n (註3) ,這個標準的理論傳輸速度甚至可達 300Mbps 哩!所以囉,我們也得稍微介紹一下無線網路啦!
我們知道在 RJ-45 的乙太網路連線環境中,以 switch/hub 以及網路卡與網路線最重要,該架構中主要以 switch/hub 串接所有的網路設備。那麼在無線網路中,當然也需要一個接收訊號的裝置,那就是無線基地台 (Wireless Access Point, 簡稱 AP) 了!另一個裝置當然就是安裝在電腦主機上面的無線網卡囉!
其實無線基地台本身就是個 IP 分享器了,他本身會有兩個介面,一個可以與外部的 IP 做溝通,另外一個則是作為 LAN 內部其他主機的 GATEWAY 囉!那其他主機上面只要安裝了無線網卡,並且順利的連上 AP 後,自然就可以透過 AP 來連上 Internet 啦!整個傳輸的情況可以用下圖來示意:
在上圖中,我們假設 PC A 與 PC B 這兩部主機都有安裝無線網卡,因此他們可以掃瞄到區域網路內的 AP 存在,所以可以透過這個 AP 來連上 Internet 啊。在不考慮內部 LAN 連線的情況下,AP 如何連上 Internet 呢?雖然每部 AP 的控制介面都不相同,不過絕大部分的 AP 都是提供 Web 介面來設定的,因此你可以參考每部 AP 的說明書來進行設定,在這裡鳥哥就不多說了。
鳥哥就以手邊有的設備來說明這個項目,使用的設備如下:
比較悽慘的是,CentOS 6.x 預設不支援 DWA-140 這個 USB 的無線網卡,因此原本我們還得要自行手動下載 USB 無線網卡的驅動程式才行!更怪的是,我們的核心偵測到的模組是 rt2870sta,但實際上該硬體使用的是 rt3070sta模組... 為了這個,搞了鳥哥兩、三天的時間去解決問題...還好,由世界上熱心的網友回報支援 Linux 的無線網卡網站說明,發現這隻 USB 是支援 Linux 的喔!如下網址所示。而且,已經有公司將這個網卡編譯成 CentOS 6.x 可以使用的 RPM 檔案囉!相關網址如下:
鳥哥最終由上面第二個網址下載的兩個檔案是:kmod-rt3070sta-2.5.0.1-2.el6.elrepo.x86_64.rpm, rt2870-firmware-22-1.el6.elrepo.noarch.rpm。鳥哥將他放置於 /root 底下,等一下再來安裝。
如果你留心一下圖 4.3-1 ,那麼就可以發現一件事情,那就是:『如果 AP 不設定任何連線限制,那任何擁有無線網卡的主機都可以透過這個 AP 連接上你的 LAN 』, 要知道,通常我們都會認為 LAN 是信任網域,所以內部是沒有防火牆的,亦即是不設防的狀態,呵呵! 如果剛好有人拿著筆記型電腦經過你的 AP 可以接收訊號的範圍,那麼他就可以輕易的透過你的 AP 連接上你的 LAN ,並且可以透過你的 AP 連上 Internet ,如果他剛好是個喜歡搞破壞的 cracker , 哈哈!那麼當他使用你的 AP 去攻擊別人時,最後被發現的跳板是誰?當然是你的 AP! 那是誰會吃上官司?夠清楚了吧?而且你內部主機的資料也很有可能被竊取啊!
所以啦,『無線網路的安全性一定是具有很大的漏洞的』,沒辦法, 因為無線網路的傳輸並不是透過實體的網路線,而是透過無線訊號,實體網路線很好控制,無線訊號你如何偵測啊?對吧! 因此,請你務必在你的 AP 上面進行好連線的限制設定,一般可以這樣做限制的:
當然,上面兩種方法你可以同時設定,亦即不但需要連線的金鑰,而且在 AP 處也設定能夠存取的 MAC 網卡, 嘿嘿!這樣一來,就更安全的多了(註5)。底下讓我們來介紹一下 AP 裡面經常要瞭解的資料, 那就是 ESSID/SSID 囉!
想一想,如果你有兩部 AP 在同一個區域網路內,那麼請問一下,當你的無線網卡在上網時,他會透過哪一個 AP 連線出去呢?很困擾,對吧!其實每部 AP 都會有一個連線的名字,那就是 SSID 或 ESSID,這個 SSID 可以提供給 client 端, 當 client 端需要進行無線連線時,他必須要說明他要利用哪一部 AP ,那個 ESSID 就是那時需要輸入的資料了!在鳥哥的案例當中,我將我的 AP 設定為 vbird_tsai 這個名字, 並且給予一個金鑰密碼,設定的方法如同下圖所示:
如上圖,在登入了 AP 的設定項目後,依序 (1)先選擇無線網路裡面的『無線網路設定』,然後在右邊的視窗當中 (2)填寫正確的 SSID 號碼,然後按下 (3)儲存即可。之後就是密碼項目啦!密碼項目的設定畫面如下:
我們先選擇 (1)無線網路加密設定,然後在右邊視窗 (2)點選 WPA-PSK/WPA2-PSK 的加密方式,然後 (3)輸入加密的金鑰長度,鳥哥這裡填寫的算是簡單到爆炸的密碼,小朋友不要學喔!填完後按下儲存即可。 這個時候我們就會有底下兩個資料:
這僅是個範例說明! AP 設定就到此為止,如果您的設定有不同的地方,請自行查詢您 AP 的操作手冊呦!
無線網卡有很多模式,鳥哥選擇的是 USB 無線網卡,所以想要知道有沒有捉到這張網卡,就得要使用 lsusb 來檢查, 如果核心預設不支援,還得要自行編譯驅動程式才行!如前所述,我們的驅動程式已經捉在 /root 底下了!
[root@www ~]# lsusb Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 001 Device 003: ID 07d1:3c0a D-Link System DWA-140 RangeBooster N Adapter(rev.B2) [Ralink RT2870] Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub # 是有捉到的!只是,有載入嗎?不知道呢!繼續往下檢查看看!
[root@www ~]# iwconfig lo no wireless extensions. eth0 no wireless extensions. # 要出現名為 wlan0 之類的網卡才是有捉到喔!所以沒有載入正確模組啦!因為沒有載入正確的驅動程式,現在讓我們來安裝剛剛下載的 RPM 驅動程式吧!請先將 USB 拔出來, 然後再安裝 RPM 檔案。安裝的方法不要說你忘記了!
[root@www ~]# rpm -ivh kmod-rt3070sta* rt2870-firmware* # 這個動作會進行很久,似乎程式在偵測硬體的樣子! # 這個咚咚做完之後,請將 USB 網卡插入 USB 插槽吧! [root@www ~]# iwconfig lo no wireless extensions. eth0 no wireless extensions. ra0 Ralink STA這個 iwconfig 是用在作為無線網路設定之用的一個指令,與 ifconfig 類似!不過,當我們使用 iwconfig 時,如果有發現上述的特殊字體,那就代表該網路介面使用的是無線網卡的意思啊!雖然有時你會看到無線網卡為 wlan0 之類的代號,不過這張網卡卻使用 ra0 作為代號,挺有趣的!
[root@www ~]# ifconfig ra0 up
啟動網卡後才能以這個網卡來搜尋整個區域內的無線基地台啊!接下來,直接使用 iwlist 來使用這個無線網卡搜尋看看吧![root@www ~]# iwlist ra0 scan ra0 Scan completed : Cell 01 - Address: 74:EA:3A:C9:EE:1A Protocol:802.11b/g/n ESSID:"vbird_tsai" Mode:Managed Frequency:2.437 GHz (Channel 6) Quality=100/100 Signal level=-45 dBm Noise level=-92 dBm Encryption key:on Bit Rates:54 Mb/s IE: WPA Version 1 Group Cipher : CCMP Pairwise Ciphers (1) : CCMP Authentication Suites (1) : PSK IE: IEEE 802.11i/WPA2 Version 1 Group Cipher : CCMP Pairwise Ciphers (1) : CCMP Authentication Suites (1) : PSK ....(底下省略)....從上面可以看到 (1)這個無線 AP 的協定,並且也能夠知道 (2)ESSID 的名號是沒錯的!當然啦,(3)連加密的機制是 WPA2-PSK 也是能夠得知的!這與前一小節的 AP 設定是相符合的!(4)使用的無線頻道是 6 號,接下來呢?就得要去修改設定檔,這部份很麻煩,請參考如下的網頁來設定:
[root@www ~]# ifconfig ra0 down && rmmod rt3070sta [root@www ~]# vim /etc/Wireless/RT2870STA/RT2870STA.dat Default CountryRegion=5 CountryRegionABand=7 CountryCode=TW <==台灣的國碼代號! ChannelGeography=1 SSID=vbird_tsai <==你的 AP 的 ESSID 喔! NetworkType=Infra WirelessMode=9 <==與無線 AP 支援的協定有關!參考上述網址說明 Channel=6 <==與 CountryRegion 及偵測到的頻道有關的設定! ....(中間省略).... AuthMode=WPAPSK <==我們的 AP 提供的認證模式 EncrypType=AES <==傳送認證碼的加密機制啊! WPAPSK="123456780aaa" <==金鑰密碼!最好用雙引號括起來較佳! ....(底下省略).... # 鳥哥實際有修改的,就是上面有特別說明的地方,其餘的地方都保留預設值即可。 # 更奇怪的是,每次 ifconfig ra0 down 後,這個檔案會莫名其妙的修改掉 @_@ [root@www ~]# modprobe rt3070sta && ifconfig ra0 up [root@www ~]# iwconfig ra0 ra0 Ralink STA ESSID:"vbird_tsai" Nickname:"RT2870STA" Mode:Auto Frequency=2.437 GHz Access Point: 74:EA:3A:C9:EE:1A Bit Rate=1 Mb/s RTS thr:off Fragment thr:off Encryption key:off Link Quality=100/100 Signal level:-37 dBm Noise level:-37 dBm Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0如果順利出現上面的資料,那就表示你的無線網卡已經與 AP 接上線了~再來則是設定網路卡的設定檔囉!^_^
[root@www ~]# cd /etc/sysconfig/network-scripts [root@www network-scripts]# vim ifcfg-ra0 DEVICE=ra0 BOOTPROTO=dhcp ONBOOT=no <== 若需要每次都自動啟動,改成 yes 即可! ESSID=vbird_tsai RATE=54M <== 可以嚴格指定傳輸的速率,要與上面 iwconfig 相同,單位 b/s要注意的是那個 ONBOOT=no 的設定,如果你想要每次開機時無線,網卡都會自動啟動, 那就將他設定為 yes 吧!否則就設定為 no 囉!要啟動再以 ifup ra0 來啟動即可! 呼呼!到此為止,你的無線網卡已經可以順利的給他啟動了喔!很快樂吧! ^_^
[root@www ~]# ifup ra0
Determining IP information for ra0... done.
整個流程就是這麼簡單喔!一般來說,目前比較常見的筆記型電腦內建的 Intel 無線網路模組 (Centrino) 適用於 Linux 的 ipw2200/ipw21000 模組,所以設定上也是很快!因為 CentOS 6.x 預設就有支援,你不必重新安裝無線網卡驅動程式! 那直接透過上述的方式來處理你的無線網路即可!很快速又方便吧!本章結尾的參考資料處, 鳥哥還是列出許多與無線網卡有關的連結,你可以自行前往查閱與你的無線網卡有關的資訊喔(註6)! ^_^
其實這個小節也很重要的!因為可以讓你在唸完理論後,瞭解一下如何利用那些概念來查詢你的網路設定問題喔! 底下我們就針對幾個常見的問題來說說看吧!
你或許曾經聽過這樣的問題:『我在我的內部區域網域內有幾部電腦, 這幾部電腦明明都是在同一個網域之內,而且系統通通沒有問題,為什麼我使用 pop3 或者是 ftp 連上我的 Linux 主機會停頓好久才連上?但是連上之後,速度就又恢復正常!』
由於網路在連線時,兩部主機之間會互相詢問對方的主機名稱配合的 IP ,以確認對方的身份。 在目前的網際網路上面,我們大多使用 Domain Name System (DNS) 系統做為主機名稱與 IP 對應的查詢,那就是我們在上面提到的 /etc/resolv.conf 檔案內設定的 IP 由來, 如果沒有指定正確的 DNS IP 的話,那麼我們就無法查詢到主機名稱與 IP 的對應了。
公開的網際網路可以這樣設定,但是如果是我們內部網域的私有 IP 主機呢? 因為是私有 IP 的主機,所以當然無法使用 /etc/resolv.conf 的設定來查詢到這部主機的名稱啊! 那怎麼辦?要知道,如果兩部主機之間無法查詢到正確的主機名稱與 IP 的對應, 那麼將『可能』發生持續查詢主機名稱對應的動作,這個動作一般需要持續 30-60 秒,因此,你的該次連線將會持續檢查主機名 30 秒鐘,也就會造成奇怪的 delay 的情況。
這個問題最常發生在內部的 LAN ,例如使用 192.168.1.1 的主機連線到 192.168.1.2 的主機。 這個問題雖然可以透過修改軟體的設定來略過主機名稱的檢查,但是絕大多數的軟體都是預設啟用這個機制的, 因此,內部主機『老是連線時期很慢,連線成功後速度就會恢復正常』 時,通常就是這個問題啦!尤其是在 FTP 及 POP3 等網路連線軟體上最常見。
那麼如何避過這個情況?最簡單的方法就是『給予內部的主機每部主機一個名稱與 IP 的對應』即可。舉例來說,我們知道每部主機都有一個主機名稱為 localhost ,對應到 127.0.0.1 ,為什麼呢?因為這個 127.0.0.1 與 localhost 的對應就被寫到 /etc/hosts 內嘛! 當我們需要主機名稱與 IP 的對應時,系統就會先到 /etc/hosts 找尋對應的設定值, 如果找不到,才會使用 /etc/resolv.conf 的設定去網際網路找。這樣說,你明白了吧? 也就是說,只要修改了 /etc/hosts,加入每部主機與 IP 的對應, 就能夠加快主機名稱的檢查囉!
瞭解了嗎?所以說,你就要將你的 私有 IP 的電腦與電腦名稱寫入你的 /etc/hosts 當中了!這也是為啥我們在主機名稱設定的地方, 特別強調第五個檢查步驟的緣故。我們來看一看 /etc/hosts 原本的設定內容吧!
[root@www ~]# cat /etc/hosts # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost # 主機的 IP 主機的名稱 主機的別名
在上面的情況中很容易就發現了設定的方法了吧!很簡單吧!沒錯!那就是 IP 對應主機名稱啦! 那麼現在知道為什麼我們給他 ping localhost 的時候,位址會寫出 127.0.0.1 了吧! 那就是寫在這個檔案中的啦!而且 localhost 那一行不能拿掉呦! 否則系統的某些服務可能就會無法被啟動!好了!那麼將我區域網路內的所有的電腦 IP 都給他寫進去!並且,每一部給他取一個你喜歡的名字, 即使與 client 的電腦名稱設定不同也沒關係啦! 以鳥哥為例,如果我還額外加設了 DHCP 的時候,那麼我就乾脆將所有的 C Class 的所有網段全部給他寫入 /etc/hosts 當中,有點像底下這樣:
[root@www ~]# vim /etc/hosts # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost 192.168.1.1 linux001 192.168.1.2 linux002 192.168.1.3 linux003 ......... ......... 192.168.1.254 linux254
如此一來,不論我哪一部電腦連上來,不論是在同一個網段的哪一個 IP , 我都可以很快速的追查到!嘿嘿!那麼區內網路互連的時候,就不會多等個好幾時秒鐘囉!
很多朋友常問的一個問題『咦!我可以撥接上網了,也可以 ping 到奇摩雅虎的 IP ,但為何就是無法直接以網址連上 Internet 呢!』嘿!被氣死! 前面不是一直強調那個 DNS 解析的問題嗎?對啦!就是名稱解析不對啦!趕快改一下 /etc/resolv.conf 這個檔案吧!改成上層 ISP 給你的 DNS 主機的 IP 就可以啦!例如 Hinet 的 168.95.1.1 及 Seednet 的 139.175.10.20 囉!例如底下的範例(這個範例就可以照抄了! ^_^):
[root@www ~]# vi /etc/resolv.conf nameserver 168.95.1.1 nameserver 139.175.10.20
朋友們常常會在這個地方寫錯,因為很多書上都說這裡要設定成為 NAT 主機的 IP , 那根本就是不對的!你應該要將所有管理的電腦內,關於 DNS 的設定都直接使用上面的設定值即可! 除非你的上層環境有使用防火牆,那才另外考量!
記得我們在前兩章提到的網路基礎當中,不是講了很多預設路由 (default gateway) 相關的說明嗎? 預設路由通常僅有一個,用來做為同一網域的其他主機傳遞非本網域的封包閘道。 但我們也知道在每個網路設定檔案 (/etc/sysconfig/network-scripts/ifcfg-ethx) 內部都可以指定『 GATEWAY 』這個參數,若這個參數重複設定的話,那可就麻煩啦!
舉例來說,你的 ifcfg-eth0 用來做為內部網域的溝通,所以你在該檔案內設定 GATEWAY 為你自己的 IP , 但是該主機為使用 ADSL 撥接,所以當撥接成功後會產生一個 ppp0 的介面,這個 ppp0 介面也有自己的 default gateway ,好了,那麼當你要將封包傳送到 Yahoo 這個非為本網域的主機時, 這個封包是要傳到 eth0 還是 ppp0 呢?因為兩個都有 default gateway 啊!
沒錯!很多朋友就是這裡搞不懂啦!常常會錯亂~所以,請注意, 你的 default gateway 應該只能有一個, 如果是撥接,請不要在 ifcfg-eth0 當中指定 GATEWAY或 GATEWAYDEV 等變數,重要重要!
更多的網路除錯請參考後續第六章 Linux 網路偵錯的說明。