[LinuxFocus-icon]
<--  | 站点地图  | 索引  | 搜索

新闻 | 过往期刊 | 链接 | 关于LF
This document is available in: English  ChineseGB  Deutsch  Francais  Italiano  Turkce  

[王旭的照片]
by 王旭 (Wang Xu)
<wangxu(at)linuxfocus.org>

关于作者:

王旭目前是中国北京邮电大学的博士研究生,研究方向是无线通信技术。王旭在1999年,他还是一名本科生的时候喜欢上了 Linux,除了 Linux,他还对 TeX、C/C++ 和 Perl 等感兴趣。
目录:


 

在 Linux 下访问无线局域网

wireless interconnection
between computers

摘要:

本文中,作者叙述了驱动常见无线网卡的几种方法和其他一些相关话题,如访问使用基于802.1x认证机制的无线局域网的方法等。

_________________ _________________ _________________

 

概述

当前,WLAN (IEEE 802.11b/a/g) 设备越来越廉价,越来越多的组织为公众和雇 员提供了无线局域网的接入。目前几乎所有的笔记本电脑都内置了无线网卡,较老 的一些也可以使用 PCMCIA 的无线网卡,即便是台式计算机也常常配备有板载的或是 USB 的无线网卡。另一方面,无线局域网的接入点(AP)也遍布了校园、写字楼、饭 店、住宅等各处。无线局域网方便了网络部署,并使所谓的移动计算或游牧计算成 为了可能,这几乎是我们的工作和生活方式的又一次革命。

自然地,对 Linux 来说,支持访问无线局域网的必要性是毋庸置疑的。本文后 面的部分将如下组织:首先考虑无线网卡的驱动问题,之后探讨访问使用认证机制的 网络,然后简要介绍一些无线局域网设置的工具,最后给一点简单结论。  

驱动无线网卡

一旦在计算机中安装好了无线局域网卡,首先要做的就是安装驱动来让网卡工 作。无线网卡实现了IEEE 802.11系列协议中的一种或多种的物理层(PHY)和媒质 访问控制子层(MAC)的功能,而驱动是用来控制无线网卡,向上提供与以太网一致 的接口并提供其他一些无线局域网特定的管理接口的。

对于不同厂商的不同网卡,还没有一种统一的方法可以驱动所有的网卡。不过 大部分网卡可以通过以下三种方式驱动:

在下面的章节,笔者将用小例子逐一解释这些方法。

注意:即使你是用后两种方法,也必须确保内核配置中启动了无线局域网支持:

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的例子:

#example of /etc/xsupplicant/xsupplicant.conf
#for LEAP protocol

network_list = all
#the list of networks to access

default_netname = default
#the default access network

first_auth_command = <BEGIN_COMMAND>dhclient %i<END_COMMAND>
#The command before authention, which usually for get some info from
#network

logfile = /var/log/xsupplicant.log
#log file

myssid #here is your network id, may be listed in the network list
{
  type = wireless
  ssid = <BEGIN_SSID>myssid<END_SSID>
  allow_types = all
  identity = <BEGIN_ID>aptitude<END_ID>
  eap-leap {
      username = <BEGIN_UNAME>aptitude<END_UNAME>
      password = <BEGIN_PASS>passwd<END_PASS>
  }#setup for leap
}

LEAP 是一个非常简单的认证方法,对于其他方法还有很多其他设置,关于这些 设置,请参考 xsupplicant 的例子和文档。  

一些有用的工具

如你所知,无线局域网网卡提供了一个与以太网一致的接口,你可以把它就当 成是另一个以太网接口。而另一方面,因为使用了无线介质,一个无线网卡拥有 比以太网更多的特性。有一组工具就是用来配置无线网卡、获取无线网卡工作状态 的,wireless tools 的相关内容可以从http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html [5] 得到,这是由 Jean Tourrilhes 贡献的。

最常用的工具是 iwconfig,它的用法类似 ifconfig。没有接口名称 之外的参数的 iwconfig 命令可以得到网卡的工作状态:

gnawux@APTITUDE:~$ /sbin/iwconfig wlan0
wlan0     unassociated  ESSID:off/any  Nickname:"ipw2100"
          Mode:Managed  Channel=0  Access Point: 00:00:00:00:00:00
          Bit Rate=0 kb/s   Tx-Power:off
          Retry:on   RTS thr:off   Fragment thr:off
          Power Management:off
          Link Quality:0  Signal level:0  Noise level:0
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

使用“mode”参数,你可以更改无线网卡的工作模式
APTITUDE:/home/gnawux# iwconfig wlan0 mode 1
APTITUDE:/home/gnawux# iwconfig wlan0
wlan0     unassociated  ESSID:off/any  Nickname:"ipw2100"
          Mode:Ad-Hoc  Channel=0  Cell: 00:00:00:00:00:00
          Bit Rate=0 kb/s   Tx-Power:off
          Retry:on   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off
          Link Quality:0  Signal level:0  Noise level:0
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

这里,我们把网卡的工作模式改成了 Ad Hoc 模式了。使用 essid 参数, 还可以改动网络的名称:
APTITUDE:/home/gnawux# iwconfig wlan0 essid gnawux
APTITUDE:/home/gnawux# iwconfig wlan0
wlan0     IEEE 802.11b  ESSID:"gnawux"  Nickname:"ipw2100"
          Mode:Ad-Hoc  Frequency:2.412 GHz  Cell: 02:0C:F1:0F:11:2A
          Bit Rate=0 kb/s   Tx-Power:off
          Retry:on   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off
          Link Quality=60/100  Signal level=-83 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

你可能注意到了,现在我们的很多状态参数都有了有意义的值,这是因为我们有 了一个合法的 ESSID 了。对于其他参数,可以参考 iwconfig(8)。

另一个常用工具是 iwlist,这个工具可以用来列出可用资源。使用 scanning 参数,可以看到所有的 AP:

gnawux@APTITUDE:~$ /sbin/iwlist wlan0 scanning
wlan0     Scan completed :
          Cell 01 - Address: 00:0D:BD:6F:B4:48
                    ESSID:""
                    Protocol:IEEE 802.11b
                    Mode:Master
                    Channel:6
                    Encryption key:on
                    Bit Rate:11 Mb/s
                    Extra: Rates (Mb/s): 1 2 5.5 11
                    Extra: Signal: -70  dBm
                    Extra: Last beacon: 59ms ago
          Cell 02 - Address: 86:CF:C1:34:12:06
                    ESSID:"gnawux"
                    Protocol:IEEE 802.11b
                    Mode:Ad-Hoc
                    Channel:11
                    Encryption key:off
                    Bit Rate:11 Mb/s
                    Extra: Rates (Mb/s): 1 2 5.5 11
                    Extra: Signal: -37  dBm
                    Extra: Last beacon: 2ms ago

而使用 frequency 参数,我们可以得到频率列表:
gnawux@APTITUDE:~$ /sbin/iwlist wlan0 freq
wlan0     14 channels in total; available frequencies :
          Channel 01 : 2.412 GHz
          Channel 02 : 2.417 GHz
          Channel 03 : 2.422 GHz
          Channel 04 : 2.427 GHz
          Channel 05 : 2.432 GHz
          Channel 06 : 2.437 GHz
          Channel 07 : 2.442 GHz
          Channel 08 : 2.447 GHz
          Channel 09 : 2.452 GHz
          Channel 10 : 2.457 GHz
          Channel 11 : 2.462 GHz
          Channel 12 : 2.467 GHz
          Channel 13 : 2.472 GHz
          Channel 14 : 2.484 GHz
          Current Channel=1

你同样可以通过 iwlist(8) 得到更多信息。

除了上面的两个,还有很多其他工具,包括 iwevent, iwgetid, iwpriv, iwspy, 用来获取网卡工作状态、对网卡进行管理。  

结论

本文作者介绍了无线网卡驱动的安装,进行认证的方法。并在文中简要介绍了一些 工具。

感谢开放源代码社区的贡献,我们现在不仅能使用 Linux 访问无线局域网,还能 享受它带来的乐趣!  

参考文献

  1. NDIS wrapper project, http://ndiswrapper.sourceforge.net;
  2. Prism54 project, http://prism54.org;
  3. IPW2100 project, http://ipw2100.sourceforge.net;
  4. Open1x project, http://open1x.sourceforge.net;
  5. Jean Tourrilhes, wireless tools, http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html.
 

对这篇文章发表评论

每篇文章都有各自的反馈页面。在这个页面里,您可以提交评论,也可以查看其他读者的评论:




主页由LinuxFocus编辑组维护
© 王旭 (Wang Xu)
"some rights reserved" see linuxfocus.org/license/
http://www.LinuxFocus.org
翻译信息:
cn --> -- : 王旭 (Wang Xu) <wangxu(at)linuxfocus.org>

2004-12-19, generated by lfparser version 2.51