以前见过超哥他们使用笔记本无线作AP,但当时自己的本本不支持,所以一直作罢。最近又有几位同事离职,所以又换了一个本本,性能很不错,也支持无线AP功能。今天在超哥的帮助下,终于搞定了,现在将配置步骤写出来,以免遗忘。

前提,如果要测试自己的无线网卡是否有此功能,可以执行iw list 命令,如果有AP模式,那么恭喜你,可以继续操作了,如果没有,那么很遗憾,要么买个无线路由或者换个无线网卡吧,呵呵。
[php]
Supported interface modes:
* IBSS
* managed
* AP
* AP/VLAN
* WDS
* monitor
* mesh point
* P2P-client
* P2P-GO
[/php]
另外,也可以去 linuxwireless.org 上了解下哪些驱动可以支持。

1、在使用笔记本时,插上网线后,无线网卡就自动禁用了,反之亦然,总之LAN和WLAN不能同时使用。一开始没怎么注意这个问题,因为没有影响到我,但既然要做hostapd,就必须同时使用LAN和WLAN了。原来在BIOS中,有一项叫 “LAN/WLAN Switching” 的东西,就是它实现LAN和WLAN自动切换的,所以,必须将之禁止;

2、安装hostapd和dhcpd,使用yum很省事;

3、配置hostapd,下面是我的conf文件:
[php]
interface=wlan0 #这是无线网卡的设备名
driver=nl80211 #符合80211规范的网卡,都可以这么写,而不用写自己使用的驱动模块名称
channel=7
hw_mode=g
ssid=ED_ap #自定义ssid
wpa=3
ieee80211n=1
ht_capab=[HT40+][SHORT-GI-40][TX-STBC][RX-STBC1][DSSS_CCK-40]
wpa_psk=c1d33430cb7b673b1de110ecb051e28e79be5bc2db1b9bf92d3221a7b0f6723a #这是加密后的密码
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

ctrl_interface=/var/run/hostapd.edward
ctrl_interface_group=edward #这两行中的edward是我系统的用户组,根据实际情况修改。
[/php]
需要注意的,wpa_psk 这行加密后的密码,使用 wpa_passphrase 算出来的,比如我要为一个ssid为test的设置一个密码,而密码内容为password,则可以执行下面操作:
[php]
# wpa_passphrase test password
network={
ssid="test"
#psk="password"
psk=9a15ed29a9b80e5d5232a0644cfd404b83979b57af8305806dd4d4865006ed7d
}
[/php]
更多信息,可以参考使用 hostapd 轻松实现强 WiFi 加密

4、配置dhcpd服务,自动分配地址总比手动输入要省事:
[php]
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 192.168.123.0 netmask 255.255.255.0 {
range 192.168.123.100 192.168.123.200;
option domain-name-servers 172.16.80.11, 202.106.0.20, 8.8.8.8;
option routers 192.168.123.1;
default-lease-time 600;
max-lease-time 7200;
}
[/php]

5、启动hostapd服务,当然fedora17会调用 /etc/hostapd/hostapd.conf ,要么将手写的配置文件与之替换,要么就使用下面方式手动启动:
[php]sudo hostapd -B hostapd.conf [/php]
其中加入 -B 参数是放入后台运行的意思。

6、附加IP地址,
[php]sudo ifconfig wlan0 192.168.123.1 netmask 255.255.255.0 up[/php]

7、启动dhcpd服务,
[php]sudo dhcpd -q -cf dhcpd.conf wlan0 [/php]

8、加入iptables转发规则,
[php]sudo iptables -t nat -A POSTROUTING -o wlan0 -s 192.168.123.0/24 -j MASQUERADE [/php]

一切顺利的话,ifconfig中会多出一个mon.wlan0,现在可以测试下新建立的AP是否能正常工作了。

另外,如果要停止的话,可以kill掉dhcpd的进程,取消iptables的转发,将wlan0的IP地址去掉,kill掉hostapd服务的进程即可。当然,一些测试正常后,可以写成start.sh和stop.sh脚本就更方便了。

备注:
我用的fedora17,之前使用过一些别人的无线AP,NetworkManager记录过相应的信息,所以启用wlan0后,会在一定时间内,去自动链接记录中的AP。如果这个步骤一旦触发,必定影响hostapd效果。因为如果成功,则使用的是他人的AP,如果失败,则wlan0上ipv4地址就会消失。所以,为了避免此类现象发生,可以到 /etc/sysconfig/network-scripts/ 目录下,查看 ifcfg- 开头的文件,除了本地网卡以外的,都是其他AP生成的文件,将其全部移走或删除,以keys- 开头的文件,都是相对应AP的密码文件,移走或删除都行。