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