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