最近在公司做一些路由器功能的实现。板子是现成的,在其之上跑一个Linux操作系统,我的主要任务就是利用一些工具让板子的路由和无线接入功能运作起来。其中在做无线接入的功能使用hostapd来实现。hostapd是一个带加密功能的无线接入点程序,是Linux操作系统上构件无线接入点的一个比较方便的工具,支持IEEE 802.11协议和IEEE 802.1X/WPA/WPA2/EAP/RADIUS加密。hostapd的官方介绍请看这里,具体的配置方法和含义在这里有比较详尽的介绍。
首先需要从官网上获得hostapd的源程序,通过修改Makefile文件将其移植到板子上,然后最关键的一步就是配置hostapd的配置文件了。源程序里面包含了一个hostapd.conf文件(也可以从这里获得),这个文件很大,里面的配置项相当的多,从简单到高级。但一般地我们能够使用到的功能只是其中很少的一部分,下面介绍一下我认为最常用的一些配置选项。首先介绍一些基本的配置项:
ssid = test
hw_mode = g
channel = 10
interface=wlan0
bridge=br0
driver=nl80211
ignore_broadcast_ssid = 0
macaddr_acl = 0
accept_mac_file=/etc/hostapd.accept
deny_mac_file=/etc/hostapd.deny
上面列出的配置基本上是必须的,其中:
auth_algs = 1
其中auth_algs指定采用哪种认证算法,采用位域(bit fields)方式来制定,其中第一位表示开放系统认证(Open System Authentication, OSA),第二位表示共享密钥认证(Shared Key Authentication, SKA)。我这里设置alth_algs的值为1,表示只采用OSA;如果为3则两种认证方式都支持。不过很奇怪的是,在我工作中如果配置了3,不管采用WEP/WPA/WP2加密的方式都从没连接成功过,配置为2也是如此。所以在我的配置当中,如果采用认证,则设置auth_algs为1;否则把这行代码注释掉(在前面加#)。
由于RADIUS认证需要提供外部RADIUS服务器,我们没有这个功能,因此我只研究了WEP、WPA和WPA2这三种加密方式。
#wep_default_key = 0
#wep_key0 = 1234567890
#wep_key1 = " vwxyz "
#wep_key2 = 0102030405060708090a0b0c0d
#wep_key3 = " .2.4.6.8.0.23 "
#wep_key_len_broadcast = 13
#wep_key_len_unicast = 13
#wep_rekey_period = 300
如果要启用WEP加密,只需配置wep_default_key和其中一个wep_keyx,其中x的值只能在0~3之间,wep_default_key的值必须启用了。注意wep_keyx的值不是任意的,只能是5、13或16个字符(用双引号括住),或者是10、26或32个16进制数字。由于WEP加密算法已经被破解了,所以通常不启用它,全部注释掉。
wpa = 2
wpa_passphrase = 12345678
wpa_key_mgmt = WPA-PSK
#wpa_pairwise = TKIP CCMP
rsn_pairwise = TKIP CCMP
现在推荐的加密方式是WPA/WPA2,由于时间紧迫,我没有怎么去了解过这两者的差别。不过配置是很简单的:
经过这样一些配置,启动hostapd之后应该就可以按照自己的需求正常使用无线接入点功能了:
/ usr / bin / hostapd -f / etc / hostapd . conf