RSS

Linux下用hostapd架无线AP

18 Jan

写在前面:其实早就想写这篇文章了,不过现在在写的这篇应该会跟原先预期的有很大的不同,虽然题目是这个,但是……还是把我遇到的种种想到的跟想不到的情况一起说说吧。
原先入了kindle,wifi还是很必要的,连上wifi,书、杂志、报纸……唰唰的就过来了。而且Amazon的silk浏览器也还可以(虽然还是Experimental),看看New York Times、瞧瞧Gmail……都很方便。而且现在冬天了,早上躺在床上都不想起来(至少我是这样的),更别说对着电脑敲键盘了。有wifi就好了,钻在被窝,掏出小机机,连上自建的AP,那速度~啧啧……而且。。。有了它,玛麻再也不用担心我每个月的流量了。不光手机,平板的话就更好了,在家到哪儿都有无线,大年夜拿着平板,连上自己房间的wifi热点,陪着父母在客厅一起看春晚,爽~
好了,我们开始吧,先从Windows开始,Windows下很简单,方法也很多,win7的话直接启动承载网络就行了,不多说了,自行Google吧(因为这不是这篇文章的重点)。另外要是够懒的话也可以使用软件:ConnectifyVisual RouterBzeek……设置同样很简单,略。
好了,Windows下就这样,但是,作为一个不折腾会死星人+对瘟到死无爱星人的我来说,这显然不是我想要的。重点来了。
其实Linux下要是ad-hoc的话很简单,我也不多说了,但是问题是kindle不支持这个模式,所以没戏。
然后就只有AP咯,这里我走了不少弯路,网上很多乱七八糟的,被误导了很多次。搞清楚之后呢,其实也很简单,前提是有一枚足够给力的无线网卡(偏偏我就是没有)。
首先,对于PCI网卡:
isaac@halo:~$ lspci
可以看到我的是这个:
05:00.0 Network controller: Intel Corporation Centrino Wireless-N 1000
对于USB网卡的话:
isaac@halo:~$ lsusb
好了,下面一步比较关键,看你的无线网卡是否支持“master mode”,也就是AP模式,如果不支持的话,下面的你不用看了,基本没戏了。
isaac@halo:~$ sudo iwconfig wlan0 mode master
[sudo] password for isaac:
Error for wireless request "Set Mode" (8B06) :
SET failed on device wlan0 ; Invalid argument.

可以看到我的因特尔网卡悲剧掉了。
不过还有机会。。。有些新的网卡用的是mac80211 framework,对于这些网卡的话,用iwconfig来测试它是否支持master模式是行不通的。
因为他们是使用新的 nl80211接口在用户空间通信的.我们用iw这个工具来测试(没有的话就装一个):
isaac@halo:~$ iw list
如果”Supported interface modes”中有AP的话,那么恭喜,你的网卡支持用hostapd来架设软AP。
Supported interface modes:
* IBSS
* managed
* monitor

我的悲剧了。
好了,对于我来说,到这儿就差不多可以了(根本就不支持AP,还捣鼓个鸟蛋啊!),但还是不甘心,于是就有了接下来的故事(如果你足够幸运的话,那么下面的斜体部分就可以直接跳过了):
在亚马逊看中了Mercury MW150u这款无线网卡,说是采用AR9271芯片(Linux下用ath9k_htc驱动(内核自带),支持AP模式),前天发货,昨天就到了,发货到挺给力的,不过悲剧的还在后面,到手后果断插上开始“调教”,然后……这玩意儿用的是RALink的芯片,而不是Alteros的芯片,准确的说是RALink RT5370N,然后我就无奈了,算了,凑和着捣鼓吧,应该问题不是很大,然后……
插上之后压根儿就没法儿驱动啊,更别说什么架AP了,然后就是请教谷歌大大咯,这个问题好像挺普遍的样子,大部分都是国外的开源社区(貌似国内的社区没有啥学习的氛围),不过貌似挺棘手,好多都是折腾了好多天最后实在不行就再买了一块其他的网卡(这招貌似挺管用的),但是我还是说一下官方驱动的安装方法,至少让它驱动起来,能不能建AP先不管,步骤如下:

  1. 首先在这儿下载官方的驱动并解压;
  2. 修改os/linux/config.mk:将HAS_WPA_SUPPLICANT和HAS_NATIVE_WPA_SUPPLICANT_SUPPORT都改成=y并保存;
  3. 修改os/linux/usb_main_dev.c:在MODULE_DESCRIPTION(“RT2870 Wireless Lan Linux Driver”);后面加上一句MODULE_LICENSE(“GPL”);并保存;
  4. 编译安装:
    isaac@halo:~$ sudo make
    isaac@halo:~$ sudo make install

现在再ifconfig -a应该就可以看到ra0这个网卡了(可能需要重启):
ra0 Link encap:Ethernet HWaddr 38:83:45:17:b7:44
inet6 addr: fe80::3a83:45ff:fe17:b744/64 Scope:Link
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:70 (70.0 B) TX bytes:3796 (3.7 KB)

网上说编译安装完成之后还要运行:
isaac@halo:~$ sudo modprobe rt5370sta
来加载这个模块,不过我发现编译安装完成之后就已经加载了,所以不需要手动加载了。
事情看似到这里已经结束了,可是事实却没有这么简单……这个驱动只支持infrastructure和adhoc功能,要玩Soft AP的话得用rt2800usb。而且貌似要3.0及以上内核。
isaac@halo:~$ sudo modprobe rt2800usb
isaac@halo:~$ sudo -s
root@halo:~# echo 148F 5370 > /sys/bus/usb/drivers/rt2800usb/new_id
root@halo:~# exit

好了,网卡的问题到这儿就结束了就简单了:

  1. 安装hostapd,修改/etc/hostapd/hostapd.conf。这是一个WPA-PSK的配置,用hostapd -d /etc/hostapd/hostapd.conf来测试配置是否可用。
    interface=wlan1
    driver=nl80211
    ssid=vlad_is_here
    channel=6
    hw_mode=g
    ignore_broadcast_ssid=0
    auth_algs=1
    wpa=3
    wpa_passphrase=xxxxxxxx
    wpa_key_mgmt=WPA-PSK
    wpa_pairwise=TKIP
    rsn_pairwise=CCMP
  2. 起hostapd服务
    isaac@halo:~$ sudo /etc/rc.d/hostapd start
  3. 为新无线网卡指定IP
    isaac@halo:~$ sudo ifconfig wlan1 10.10.10.1 netmask 255.255.255.0
  4. 安装配置dhcp,/etc/dhcpd.conf如下
    default-lease-time 600;
    max-lease-time 7200;

    subnet 10.10.10.0 netmask 255.255.255.0 {
    range 10.10.10.10 10.10.10.100;
    option routers 10.10.10.1;
    option domain-name-servers 8.8.8.8;
    option ip-forwarding off;
    option broadcast-address 10.10.10.255;
    }

  5. 起dhcpd服务
    isaac@halo:~$ sudo /etc/rc.d/dhcp4 start
  6. 安装iptables,增加转发规则。这里要把流量转发到wlan0
    isaac@halo:~$ sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
  7. 启用内核转发功能:在/etc/sysctl.conf加一行net.ipv4.ip_forward=1

收工!

 
Leave a comment

Posted by on January 18, 2012 in Others

 

Tags: ,

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: