概述
當(dāng)前,WLAN (IEEE 802.11b/a/g) 設(shè)備越來越廉價,越來越多的組織為公眾和雇員提供了無線局域網(wǎng)的接入。目前幾乎所有的筆記本電腦都內(nèi)置了無線網(wǎng)卡,較老的一些也可以使用 PCMCIA 的無線網(wǎng)卡,即便是臺式計算機(jī)也常常配備有板載的或是 USB 的無線網(wǎng)卡。另一方面,無線局域網(wǎng)的接入點(AP)也遍布了校園、寫字樓、飯店、住宅等各處。無線局域網(wǎng)方便了網(wǎng)絡(luò)部署,并使所謂的移動計算或游牧計算成為了可能,這幾乎是我們的工作和生活方式的又一次革命。
自然地,對 Linux 來說,支持訪問無線局域網(wǎng)的必要性是毋庸置疑的。本文后面的部分將如下組織:首先考慮無線網(wǎng)卡的驅(qū)動問題,之后探討訪問使用認(rèn)證機(jī)制的網(wǎng)絡(luò),然后簡要介紹一些無線局域網(wǎng)設(shè)置的工具,最后給一點簡單結(jié)論。
驅(qū)動無線網(wǎng)卡
一旦在計算機(jī)中安裝好了無線局域網(wǎng)卡,首先要做的就是安裝驅(qū)動來讓網(wǎng)卡工作。無線網(wǎng)卡實現(xiàn)了IEEE 802.11系列協(xié)議中的一種或多種的物理層(PHY)和媒質(zhì)訪問控制子層(MAC)的功能,而驅(qū)動是用來控制無線網(wǎng)卡,向上提供與以太網(wǎng)一致的接口并提供其他一些無線局域網(wǎng)特定的管理接口的。
對于不同廠商的不同網(wǎng)卡,還沒有一種統(tǒng)一的方法可以驅(qū)動所有的網(wǎng)卡。不過大部分網(wǎng)卡可以通過以下三種方式驅(qū)動:
使用內(nèi)核自帶的網(wǎng)卡驅(qū)動程序,
為特定的網(wǎng)卡編譯安裝驅(qū)動模塊,
使用 NDIS wrapper [1]利用面向 MS Windows®的驅(qū)動程序驅(qū)動網(wǎng)卡。
在下面的章節(jié),筆者將用小例子逐一解釋這些方法。
注意:即使你是用后兩種方法,也必須確保內(nèi)核配置中啟動了無線局域網(wǎng)支持:
gnawux@APTITUDE:~$ grep CONFIG_NET_RADIO /boot/config-`uname -r`
CONFIG_NET_RADIO=y
如果沒有無線局域網(wǎng)支持,你應(yīng)該重新配置、編譯內(nèi)核來啟動"Wireless LAN (non-hamradio) Drivers and Wireless Extensions".
內(nèi)核中支持的無線網(wǎng)卡
Linux 內(nèi)核中包含了很多已經(jīng)足夠成熟的、沒有許可證問題的無線網(wǎng)卡的驅(qū)動程序。無線網(wǎng)卡在內(nèi)核中的支持列表自然是和內(nèi)核版本有關(guān)的了,因此,在安裝驅(qū)動之前看看新的內(nèi)核是不是對你的網(wǎng)卡有更好的支持無疑是明智的。 本節(jié)中,作者將以 Intersil Prism 系列芯片(ISL38xx)的網(wǎng)卡為例。關(guān)于這個驅(qū)動支持的網(wǎng)卡的完整列表可以參考http://prism54.org[2]。
要支持Prism網(wǎng)卡,首先需要新的 2.6 內(nèi)核,并再配置中的無線局域網(wǎng)支持部分允許 "Intersil Prism GT/Duette/Indigo PCI/Cardbus"。配置后編譯、安裝內(nèi)核。
如果你仔細(xì)閱讀了內(nèi)核中該模塊的幫助文本可能會發(fā)現(xiàn),你需要首先從項目網(wǎng)站 [2]獲取 firmware才能驅(qū)動網(wǎng)卡。即使把模塊編譯到內(nèi)核之中仍需要下載固件的原因在于firmware中包含了非 GPL 兼容許可證代碼,無法與內(nèi)核一起發(fā)布。下載firmware并放到"/usr/lib/hotplug/firmware/" 之后,重新啟動計算機(jī),這時你可以發(fā)現(xiàn)新的無線網(wǎng)卡提供了又一個以太網(wǎng)接口。
特定網(wǎng)卡的驅(qū)動模塊
和許多其他新硬件一樣,很多新型號的無線網(wǎng)卡沒有廠商提供的兼容 GPL 的驅(qū)動程序,或者由開放源代碼社區(qū)開發(fā)的驅(qū)動程序仍然不成熟、無法進(jìn)入內(nèi)核。這樣,這些驅(qū)動程序就以單獨的模塊的形式出現(xiàn),而這些驅(qū)動中的一部分將來某一天可能就會進(jìn)入到內(nèi)核之中了。
這些驅(qū)動中的一個著名代表就是ipw2100 [3],它是 Intel Pro/Wireless 2100 的驅(qū)動程序,而這塊無線網(wǎng)卡就是著名的 Intel 迅馳® 移動計算技術(shù)的一部分。本節(jié)中就以 ipw2100 驅(qū)動的安裝為例。
首先,你需要從項目網(wǎng)站http://ipw2100.sourceforge.net下載驅(qū)動的源代碼包和firmware。確定了內(nèi)核足夠新并且已經(jīng)支持了模塊、hotplug firmware 和無線網(wǎng)卡之后,解壓源代碼包:
APTITUDE:/usr/src# tar -zxvf ipw2100-1.0.1.tgz
進(jìn)入源代碼目錄編譯、安裝:
APTITUDE:/usr/src/ipw2100-1.0.1# make
APTITUDE:/usr/src/ipw2100-1.0.1# make install
安裝完模塊之后,它會提示你需要安裝firmware:
Don't forget to copy firmware to /usr/lib/hotplug/firmware/ and have the
hotplug tools in place.
按照提示所說,把firmware解壓縮到該目錄之后,可以使用如下命令啟動 ipw2100模塊了:
APTITUDE:/usr/src/ipw2100-1.0.1# modprobe ipw2100
啟動模塊的時候可以使用參數(shù)來指定一些設(shè)置。比如可以用ifname參數(shù)來指定網(wǎng)絡(luò)接口的名稱:
APTITUDE:/usr/src/ipw2100-1.0.1# modprobe ipw2100 ifname=wlan0
這樣,新的接口就叫wlan0了。對于其他的參數(shù),讀者可以閱讀源碼包里的說明文檔。
驅(qū)動其他網(wǎng)卡
十分不幸,有些網(wǎng)卡根本就沒有驅(qū)動或是由于種種原因驅(qū)動根本無法工作。沒關(guān)系,這并不代表我們不能使用這些網(wǎng)卡了。至少我們還有NDIS wrapper [3].
大部分用于桌面計算機(jī)或是筆記本的無線網(wǎng)卡都會支持Windows 2000/XP®,而這些驅(qū)動都是遵循 NDIS 標(biāo)準(zhǔn)接口的。這樣我們就應(yīng)該可以包裝一下這些擁有統(tǒng)一接口的驅(qū)動,使它們能為 Linux 工作了。這就是 Ndiswrapper 項目的由來。
本節(jié)中,我們將使用 ndiswrapper 驅(qū)動一塊 Net Gear 121 網(wǎng)卡。首先我們應(yīng)該先從項目網(wǎng)站http://ndiswrapper.sourceforge.net 下載驅(qū)動,并準(zhǔn)備好 Windows®下的驅(qū)動程序。nidswrapper 包括一個內(nèi)核模塊和一些工具。首先我們應(yīng)該編譯、安裝它們:
APTITUDE:/usr/src/ndiswrapper-0.11# make install
之后,加載 Windows® 的驅(qū)動程序:
APTITUDE:/usr/src/ndiswrapper-0.11# ndiswrapper -i ../wg121/WG121V200/ndis5/netwg121.inf
這個inf文件就是for Windows® 的 NDIS 驅(qū)動,安裝之后,應(yīng)該可以看到:
APTITUDE:/usr/src/ndiswrapper-0.11# ndiswrapper -l
Installed ndis drivers:
netwg121 driver present
好了!安裝過程完成了。
認(rèn)證
如果在一些公共場合訪問無線局域網(wǎng),出于安全考慮,一些組織提供的無線網(wǎng)絡(luò)接入是需要進(jìn)行認(rèn)證的。目前可用的無線局域網(wǎng)認(rèn)證方式包括 IEEE 802.1x (EAP) 為基礎(chǔ)的一系列認(rèn)證方法和 IEEE 802.11i,前者目前比較成熟、也非常常見。
有很多中基于 EAP 的認(rèn)證方法,包括 EAP-MD5,EAP-TLS, EAP-TTLS, EAP-SIM, LEAP 等等。對于 Linux 用戶,訪問使用這些基于 802.1x 的認(rèn)證方式的網(wǎng)絡(luò),可以使用 Open1x project [4] 提供的工具 xsupplicant,本節(jié)中使用 Cisco 提出的 LEAP 作為例子。 注意:認(rèn)證協(xié)議的支持不僅由xsupplicant決定,也由網(wǎng)卡決定,也就是說,即使正確安裝配置了 xsupplicant,如果驅(qū)動有問題也不一定可以訪問網(wǎng)絡(luò)。
首先先從項目網(wǎng)http://open1x.sourceforge.net 站下載xsupplicant并安裝,之后修改位于 /etc/xsupplicant/xsupplicant.conf 的配置文件的內(nèi)容,這里有一個LEAP的例子:
|
LEAP 是一個非常簡單的認(rèn)證方法,對于其他方法還有很多其他設(shè)置,關(guān)于這些設(shè)置,請參考 xsupplicant 的例子和文檔。
一些有用的工具
如你所知,無線局域網(wǎng)網(wǎng)卡提供了一個與以太網(wǎng)一致的接口,你可以把它就當(dāng)成是另一個以太網(wǎng)接口。而另一方面,因為使用了無線介質(zhì),一個無線網(wǎng)卡擁有比以太網(wǎng)更多的特性。有一組工具就是用來配置無線網(wǎng)卡、獲取無線網(wǎng)卡工作狀態(tài)的,wireless tools 的相關(guān)內(nèi)容可以從http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html [5] 得到,這是由 Jean Tourrilhes 貢獻(xiàn)的。
最常用的工具是 iwconfig,它的用法類似 ifconfig。沒有接口名稱之外的參數(shù)的 iwconfig 命令可以得到網(wǎng)卡的工作狀態(tài):
|
使用“mode”參數(shù),你可以更改無線網(wǎng)卡的工作模式
|
這里,我們把網(wǎng)卡的工作模式改成了 Ad Hoc 模式了。使用 essid 參數(shù),還可以改動網(wǎng)絡(luò)的名稱:
|
你可能注意到了,現(xiàn)在我們的很多狀態(tài)參數(shù)都有了有意義的值,這是因為我們有了一個合法的 ESSID 了。對于其他參數(shù),可以參考 iwconfig(8)。
另一個常用工具是 iwlist,這個工具可以用來列出可用資源。使用 scanning 參數(shù),可以看到所有的 AP:
|
而使用 frequency 參數(shù),我們可以得到頻率列表:
|
你同樣可以通過 iwlist(8) 得到更多信息。
除了上面的兩個,還有很多其他工具,包括 iwevent, iwgetid, iwpriv, iwspy, 用來獲取網(wǎng)卡工作狀態(tài)、對網(wǎng)卡進(jìn)行管理