網路卡的安裝,與連接上 Internet 的方法介紹
由前面幾章的資料我們知道,想要連上 Internet 你得要設定一組合法的 IP 參數才可以,主要是 IP, Netmask, Gateway, DNS IP
以及主機名稱等。那我們也知道,其實整個主機最重要的設定,就是『先要驅動網路卡』,否則主機連網路卡都捉不到時,
怎麼設定 IP 參數都是沒有用的,你說是吧!所以底下我們就來談一談,
你要如何確定網路卡已經被捉到,而 Linux 主機的網路參數又該如何設定?
你怎麼確認 Linux 有捉到網路卡?Linux 底下的網路卡的名稱是啥?讓我們來瞭解一下吧!
[root@www ~]# dmesg | grep -in eth 258:e1000: eth0: e1000_probe: Intel(R) PRO/1000 Network Connection 313:ADDRCONF(NETDEV_UP): eth0: link is not ready 314:e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX 315:ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready 316:eth0: no IPv6 routers present |
[root@www ~]# lspci | grep -i ethernet 00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 02) |
[root@www ~]# lsmod | grep 1000 e1000 119381 0 <==確實有載入到核心中! [root@www ~]# modinfo e1000 filename: /lib/modules/2.6.18-194.8.1.el5/kernel/drivers/net/e1000/e1000.ko version: 7.3.21-k4.1-NAPI license: GPL description: Intel(R) PRO/1000 Network Driver .....(以下省略)..... |
一般來說,如果沒有特殊需求,鳥哥不是很建議你自己編譯網路卡的驅動程式!為啥? 因為想到每次更新核心都得要重新編譯一次網卡驅動程式,光是想想都覺得煩~所以,沒有被 Linux 預設核心支援的網卡, 就先丟著吧!
如果你真的很有求知慾,而且該網卡的官網有提供給 Linux 的驅動程式原始碼; 或者是你很想要某些官網提供的驅動程式才有的特殊功能;又或者是你真的很不想要再買一張額外的網卡。 此時,就得要重新編譯網路卡的驅動程式囉。
鳥哥之前買過一張主機板,上面的內建網卡為 RTL8111/8168B PCI-E 的網卡晶片,其實是螃蟹卡的 Gigabit 版本! 不過在 CentOS 5.2 以前的版本所提供的新的 r8169 驅動程式卻有些 bug ,因為觀察核心確實有捉到且載入該驅動程式, 可惜的是,該網卡卻無法透過 r8169 模組來聯網!也就是說,看的到吃不到啦!查詢了 Google 才知道這是已知的問題, 所以只好回去下載舊的 r8168 的驅動程式囉~好在 CentOS 5.4 以後的版本已經克服 r8169 這個問題!在這裡,鳥哥就以這個案例為例來介紹如何編譯吧!這個晶片的下載可到 Realtek 的官網去處理:
鳥哥下載的是『communications network ICs』--> 『Network Interface Controller』-->『10/100/100M Gigabit Ethternet』-->『PCI Express』-->『Software』,然後點選 (Unix/Linux) 項目, 之後再點選『for kernel 2.6.x』的那個項目,就能夠順利的下載囉!鳥哥下載的是『r8168-8.018.00.tar.bz2』這個檔案。 另外,記得啊,要編譯就得要有 gcc, make, kernel-devel 等套件才行喔!不要說你忘了! 趕緊回到基礎學習篇裡面看看先! 假設你已經:
那接下來的編譯步驟是這樣的:
[root@www ~]# cd /usr/src [root@www src]# ln -s kernels/2.6.18-194.11.1.el5-i686/ linux |
[root@www src]# tar -jxvf /root/r8168-8.018.00.tar.bz2 -C /usr/local/src [root@www ~]# cd /usr/local/src/r8168-8.018.00/ # 此時在該目錄下有個 README 的檔案,記得看一看,這個檔案內會說明很多資訊, # 包括如何編譯,以及這個模組所支援的晶片組哩! [root@www r8168-8.018.00]# ./autorun.sh |
[root@www r8168-8.018.00]# ll src/r8168.ko -rw-r--r-- 1 root root 158488 8月 25 00:19 src/r8168.ko # 其實 kernel 2.6 的核心都是使用 .ko 這個副檔名!所以我們需要的是這個檔案 [root@www r8168-8.018.00]# cp -a src/r8168.ko \ > /lib/modules/$(uname -r)/kernel/drivers/net # 注意啊!整個網路卡驅動模組就是放在上面的目錄中,不要寫錯了。 [root@www r8168-8.018.00]# depmod -a # 將所有的模組進行重新分析的工作!建立關連檔案 [root@www r8168-8.018.00]# modprobe r8168 # 開始載入 r8168 的模組! [root@www r8168-8.018.00]# lsmod | grep r8168 # 如果有相關的字樣跑出來時,就表示這個模組可以順利的被載入啦! |
[root@www ~]# vi /etc/modprobe.conf # 修改或增加底下這一行吧! alias eth0 r8168 [root@www ~]# sync; reboot |
[root@www ~]# ifconfig eth0 192.168.1.100 [root@www ~]# ifconfig eth0 Link encap:Ethernet HWaddr 00:01:BA:77:16:52 inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0 ....(以下省略).... |
我們知道 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=就是通訊閘啦 |
主機名稱 | /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 , 因此,你只要瞭解到該檔案的內容,很容易就追蹤得出來你的設定檔所需要的內容呢!對吧!
在前幾章我們就談過,台灣地區主要連上網際網路的方法有(1)學術網路、(2)ADSL 固接與撥接、(3)Cable modem 等方式,同時,手動設定 IP 參數是很重要的學習,因此,底下的各節中,第一節的手動設定固定 IP 一定要做過一次! 其他的才依照您的環境去設定去學習!
此外,由於目前使用 Linux notebook 的使用者大增,而 Notebook 通常是以無線網路來連線的,
所以鳥哥在這裡也嘗試使用一款無線網路來進行連線設定。至於傳統的 56 Kbps 撥接則因為速度較慢且使用度越來越低,
所以在這裡就不多做介紹了。
所謂的固定 IP 就是指在你的網路參數當中,你只要輸入既定的 IP 參數即可。那麼這個既定的 IP 來自哪裡呢? 一般來說,他可能來自於:
這樣清楚嗎?也就是說,我們取得的固定 IP 參數並非一定是 public IP 喔!反正就是一組可接受的固定 IP 就是了! 所以在架設你的環境之前,請先注意所有網路參數的來源正確性啊!好了,那麼現在假設我的 Linux 主機需要的參數如下所示:
IP: 192.168.1.11 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 相對應 BOOTPROTO=none <== 取得IP的方式,其實關鍵字只有dhcp,手動可輸入none ONBOOT=yes <== 是否預設啟動此介面的意思 IPADDR=192.168.1.11 <== 就是 IP 啊 NETMASK=255.255.255.0 <== 就是子網路遮罩 GATEWAY=192.168.1.254 <== 就是預設路由 HWADDR=08:00:27:F3:5D:23 <== 就是網路卡位址,若只有一張網卡,可省略此項目 # 重點是上面這幾個,底下的則可以省略的囉! NETWORK=192.168.1.0 <== 就是該網段的第一個 IP,可省略 BROADCAST=192.168.1.255 <== 就是廣播位址囉,可省略 MTU=1500 <== 就是最大傳輸單元的設定值,若不更改則可省略 #GATEWAYDEV=eth0 <== 主要路由的裝置為那個,通常不用設定 |
[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:F3:5D:23 inet addr:192.168.1.11 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fef3:5d23/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3842 errors:0 dropped:0 overruns:0 frame:0 TX packets:647 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:369985 (361.3 KiB) TX bytes:129710 (126.6 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 0 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=0.519 ms 64 bytes from 192.168.1.254: icmp_seq=2 ttl=64 time=0.343 ms 64 bytes from 192.168.1.254: icmp_seq=3 ttl=64 time=0.370 ms --- 192.168.1.254 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2011ms rtt min/avg/max/mdev = 0.343/0.410/0.519/0.080 ms # 注意啊!有出現 ttl 才是正確的回應!如果出現『 Destination Host Unreachable 』 # 表示沒有成功的連線到你的 GATEWAY 那表示出問題啦!趕緊檢查有無設定錯誤。 |
[root@www ~]# vim /etc/resolv.conf nameserver 168.95.1.1 nameserver 139.175.10.20 |
# 檢查四:看看 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: Wed Aug 25 14:06:47 2010 ;; MSG SIZE rcvd: 284 |
[root@www ~]# vim /etc/sysconfig/network NETWORKING=yes NETWORKING_IPV6=no HOSTNAME=www.centos.vbird [root@www ~]# vim /etc/hosts 192.168.1.11 www.centos.vbird # 特別注意,這個檔案的原本內容不要刪除!只要新增額外的資料即可! |
[root@www ~]# hostname localhost.localdomain # 還是預設值,尚未更新成功!我們還得要進行底下的動作! # 檢查五:看看你的主機名稱有沒有對應的 IP 呢?沒有的話,開機流程會很慢! [root@www ~]# ping -c 2 www.centos.vbird PING www.centos.vbird (192.168.1.11) 56(84) bytes of data. 64 bytes from www.centos.vbird (192.168.1.11): icmp_seq=1 ttl=64 time=0.015 ms 64 bytes from www.centos.vbird (192.168.1.11): 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 BOOTPROTO=dhcp HWADDR=08:00:27:F3:5D:23 ONBOOT=yes |
沒蓋你喔!只要這三個項目即可,其他的都給他註解 (#) 掉!尤其是那個 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 ~]# rpm -q rp-pppoe rp-pppoe-3.5-32.1 <==你瞧瞧!確實有安裝喔!理論上,預設都會安裝啦! |
當然,很多 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 BROADCAST=192.168.1.255 IPADDR=192.168.1.11 NETMASK=255.255.255.0 ONBOOT=yes |
至於其他的檔案請參考手動設定 IP 的連線方法來處理即可。 當然啦,撥接之前,請確認你的 ADSL 數據機 (小烏龜) 已經與主機連線妥當,也取得帳號與密碼,也安裝好了 rp-pppoe ,然後就來處理吧!
[root@www ~]# adsl-setup Welcome to the ADSL client setup. First, I will run some checks on your system to make sure the PPPoE client is installed properly... LOGIN NAME Enter your Login Name (default root): T1234567 # 注意啊!這個帳號名稱是 ISP 給的,其中如果是 SeedNet ,輸入如上, # 如果是 Hinet 的話,就得要輸入 username@hinet.com.tw ,後面的主機名也要寫。 INTERFACE Enter the Ethernet interface connected to the ADSL 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 # 就是連接到 ADSL 數據機的那張網卡代號 Do you want the link to come up on demand, or stay up continuously? If you want it to come up on demand, enter the idle time in seconds after which the link should be dropped. If you want the link to stay up permanently, enter 'no' (two letters, lower-case.) NOTE: Demand-activated links do not interact well with dynamic IP addresses. You may have some problems with demand-activated links. Enter the demand value (default no): <==這裡按 Enter 確定不要即可 DNS Enter the DNS information here: 168.95.1.1 Enter the secondary DNS server address here: 139.175.10.20 # 這兩個設定會影響 /etc/resolv.conf 的內容喔! PASSWORD Please enter your Password: <==這裡則是輸入你 ISP 給的密碼 Please re-enter your Password: <==再一次密碼 USERCTRL Please enter 'yes' (two letters, lower-case.) if you want to allow normal user to start or stop DSL connection (default yes): no # 不讓使用者可以啟動或關閉 ADSL 的設定比較好吧! 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 # 先不要 ppp 的防火牆!後面我們會使用 Linux 本機的防火牆! Start this connection at boot time Do you want to start this connection at boot time? Please enter no or yes (default no):yes # 是否要開機的時候就撥接?如果你的數據機是一直開著的,這裡使用 yes 較佳 Ethernet Interface: eth0 User name: T1234567 Activate-on-demand: No Primary DNS: 168.95.1.1 Secondary DNS: 139.175.10.20 Firewalling: NONE User Control: no Accept these settings and adjust configuration files (y/n)? y # 如果沒有問題就按下 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:我們輸入的密碼就放在這裡! |
[root@www ~]# adsl-start
....Connect!
|
[root@www ~]# ifconfig [root@www ~]# route -n [root@www ~]# ping GW的IP [root@www ~]# dig www.google.com [root@www ~]# hostname |
[root@www ~]# ifconfig ppp0 ppp0 Link encap:Point-to-Point Protocol inet addr:114.33.149.35 P-t-P:168.95.88.254 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1 RX packets:216541 errors:0 dropped:0 overruns:0 frame:0 TX packets:125009 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:3 RX bytes:283114899 (269.9 MiB) TX bytes:11393717 (10.8 MiB) |
[root@www ~]# rm /etc/sysconfig/network-scripts/ifcfg-ppp0
|
很快的,這樣你就已經做好 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 的說明書來進行設定,在這裡鳥哥就不多說了。
鳥哥底下將會以一般家庭常用的小型 AP 與無線網卡來說明一個案例,鳥哥手邊有的筆記型電腦是舊式的 MiTac 內有 PIII 1GHz CPU 及 384 MB 的記憶體,夠舊了吧!所以並沒有內建無線網卡。鳥哥額外加了擴充卡 (PCMCIA) 的無線網卡,產品是 D-Link 的 DWL-G650 ,都是老式配備,單純用來玩玩!讓大家瞭解瞭解啦! 至於 AP 則是朋友家裡的 PCi 這家公司製造的 BLW-54PM 無線基地台。
如果你留心一下圖 4.3-1 ,那麼就可以發現一件事情,那就是:『如果 AP 不設定任何連線限制,那任何擁有無線網卡的主機都可以透過這個 AP 連接上你的 LAN 』, 要知道,通常我們都會認為 LAN 是信任網域,所以內部是沒有防火牆的,亦即是不設防的狀態,呵呵! 如果剛好有人拿著筆記型電腦經過你的 AP 可以接收訊號的範圍,那麼他就可以輕易的透過你的 AP 連接上你的 LAN ,並且可以透過你的 AP 連上 Internet ,如果他剛好是個喜歡搞破壞的 cracker , 哈哈!那麼當他使用你的 AP 去攻擊別人時,最後被發現的跳板是誰?當然是你的 AP! 那是誰會吃上官司?夠清楚了吧?而且你內部主機的資料也很有可能被竊取啊!
所以啦,『無線網路的安全性一定是具有很大的漏洞的』,沒辦法, 因為無線網路的傳輸並不是透過實體的網路線,而是透過無線訊號,實體網路線很好控制,無線訊號你如何偵測啊?對吧! 因此,請你務必在你的 AP 上面進行好連線的限制設定,一般可以這樣做限制的:
當然,上面兩種方法你可以同時設定,亦即不但需要連線的金鑰,而且在 AP 處也設定能夠存取的 MAC 網卡, 嘿嘿!這樣一來,就更安全的多了(註5)。底下讓我們來介紹一下 AP 裡面經常要瞭解的資料, 那就是 ESSID/SSID 囉!
OK!底下我們就來談一談,那麼你的筆記型電腦如何透過無線網路實際的上線呢? 首先當然就是需要安裝驅動程式啦!再來則是需要讓網卡代號與模組對上關係, 然後設定了網路卡設定檔後,才能夠連上 Internet 啦!底下我們就一個一個步驟來說明吧!
[root@www ~]# lspci | grep -i ethernet 00:09.0 Ethernet controller: Silicon Integrated Systems [SiS] SiS900 PCI Fast Ethernet (rev 02) 02:00.0 Ethernet controller: Atheros Communications Inc. Atheros AR5001X+ Wireless Network Adapter (rev 01) # 上頭這個就是鳥哥的 MiTAC 舊筆電上面的乙太網卡與無線網卡。這張無線網卡使用的是 # Atheros 的 AR5001X+ 晶片!因此等一下的模組我們找 ath 開頭的模組名。 |
[root@www ~]# lsmod | grep ath ath5k 124029 0 mac80211 139073 1 ath5k ath 12737 1 ath5k [root@www ~]# modinfo ath5k filename: /lib/modules/2.6.18-194.el5/kernel/drivers/net/wireless/ath/ath5k/ath5k.ko version: 0.6.0 (EXPERIMENTAL) license: Dual BSD/GPL description: Support for 5xxx series of Atheros 802.11 wireless LAN cards. ....(後面省略).... [root@www ~]# iwconfig wlan0 IEEE 802.11bg ESSID:off/any Mode:Managed Access Point: Not-Associated Tx-Power=0 dBm RTS thr:off Fragment thr:off Encryption key:off Power Management:off # 要注意喔!新的系統中,無線網卡的網路卡代號使用 wlan0 來處理的! |
[root@www ~]# ifconfig wlan0 up
|
[root@www ~]# iwlist wlan0 scanning wlan0 Scan completed : Cell 01 - Address: 00:1F:D4:00:2C:55 Channel:1 Frequency:2.412 GHz (Channel 1) Quality=26/70 Signal level=-84 dBm Encryption key:off ESSID:"KSUWLAN_I15F" Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 6 Mb/s; 9 Mb/s 11 Mb/s; 12 Mb/s; 18 Mb/s Bit Rates:24 Mb/s; 36 Mb/s; 48 Mb/s; 54 Mb/s ....(中間省略).... Cell 02 - Address: 94:0C:6D:F0:24:C6 Channel:4 Frequency:2.427 GHz (Channel 4) Quality=26/70 Signal level=-84 dBm Encryption key:off ESSID:"DICLab" Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s 9 Mb/s; 12 Mb/s; 18 Mb/s ....(底下省略).... |
[root@www ~]# iwconfig wlan0 essid "KSUWLAN_I15F" # 我們學校裡面並沒有強硬指定需要金鑰的!所以這裡只要這樣做即可。 # 此外,你也可以使用 iwconfig --help 查閱相關的資訊喔! [root@www ~]# iwconfig wlan0 wlan0 IEEE 802.11bg ESSID:"KSUWLAN_I15F" Mode:Managed Frequency:2.412 GHz Access Point: 00:1F:D4:00:2C:55 Bit Rate=1 Mb/s Tx-Power=27 dBm RTS thr:off Fragment thr:off Encryption key:off Power Management:off Link Quality=67/70 Signal level=-43 dBm Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0 |
[root@www ~]# cd /etc/sysconfig/network-scripts [root@www network-scripts]# vim ifcfg-wlan0 DEVICE=wlan0 BOOTPROTO=dhcp ONBOOT=no <== 若需要每次都自動啟動,改成 yes 即可! HWADDR=00:13:46:99:f4:3d ESSID=KSUWLAN_I15F RATE=54M <== 可以嚴格指定傳輸的速率,要與上面 iwconfig 相同,單位 b/s |
[root@www ~]# ifup wlan0 Determining IP information for wlan0... done. # 如果上面的測試都沒有問題的話,那麼建議你繼續底下的動作 [root@www ~]# iwconfig wlan0 wlan0 IEEE 802.11bg ESSID:"KSUWLAN_I15F" Mode:Managed Frequency:2.412 GHz Access Point: 00:1F:D4:00:2C:55 Bit Rate=54 Mb/s Tx-Power=27 dBm RTS thr:off Fragment thr:off Encryption key:off Power Management:off Link Quality=69/70 Signal level=-41 dBm Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0 |
整個流程就是這麼簡單喔!一般來說,目前比較常見的筆記型電腦內建的 Intel 無線網路模組 (Centrino) 適用於 Linux 的 ipw2200/ipw21000 模組,所以設定上也是很快!因為 CentOS 5.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 網路偵錯 的說明。