Soft AP是一种通过无线网卡,使用专用软件在PC上实现AP功能的技术,它可以取代无线网络中的AP(Access Point,无线接入点),从而会降低无线组网的成本。
长期以来,高昂的组网成本是WLAN普及的最大障碍,虽然现在WLAN设备的价格已经降低了很多,但对价格敏感的SOHO用户而言,WLAN依然太贵。其中“昂贵”的AP就是造成总成本居高不下的主要因素,毕竟相对于价格低廉的HUB和交换机,600~1000元的AP要贵得多。
不过,Soft AP的出现将有可能扫除WLAN进入小型办公室及家庭的最后一道障碍,毕竟这类用户对价格的关注要远超过对安全性的担忧。
其实,Soft AP技术出现得并不晚,早期所谓的主机AP就是一种利用软件来实现AP功能的设备,它一般采用PC机,使用Windows、VXWorks、Linux等操作系统和主机AP程序。不过这种主机AP由于使用专用的设备,比AP便宜不了多少。而现在所说的Soft AP则是英特尔等公司力推的一个新概念,它可以让任何一台拥有无线网卡的PC或笔记本电脑具备AP功能!
Windows7搭建
- 首先在网络和共享中心-更改适配器设置里,删除已有的桥接,之后状态如下图:
- 然后在开始-所有程序-附件里,以管理员身份运行“命令提示符”,如图所示:
- 输入命令行(1),如下图,其中allow为网络承载模式为允许,Marcia是无线网络的ssid,12345678是密码,都可自己设定。
netsh wlan set hostednetwork mode=allow ssid=Marcia key=12345678 (1)
- 在网络和共享中心-更改适配器设置里的情况见下图,这时输入:
netsh wlan start hostednetwork (2)
可是万一并不能启动承载网络(如果可以的请跳过)。怎么办?
- 这里就是要特别注意的地方!!!为了能够让运行命令行(2)启动承载网络,本人摸索出了一个简单的解决方法,即先把无线网路连接和虚拟产生的无线网络连接2桥接,见下图。请注意,桥接要在两者设置成自动获得IP地址后,以及在网络和共享中心-管理无线网里删除所有临时点对点的ssid后再进行。
- 在刚才以管理员身份运行的dos下输入命令行(2),便‘激活’承载网络的启动。如图:
- 接着马上删除刚才建立的桥接!便可以用单无线网卡建立无线中继了,即在网络和共享中心-更改适配器设置里,把已经能无线上网的无线网络连接(比如abcd)共享给刚才产生的无线网络连接2(Marcia)。请见示意图:
再运行命令行(2)就可以实现一个中继后的无线AP。这样其他的无线设备就可以连接到Marcia、用同一网卡的网络上网,从而完美实现无线网中继和无线AP。
- 附注:
启动和取消承载网络可以用以下两个批处理文件,然后以管理员身份运行
l start.bat:
netsh wlan set hostednetwork mode=allow ssid=Marcia key=12345678
netsh wlan start hostednetwork
l stop.bat:
netsh wlan set hostednetwork mode=disallow
Linux搭建
l 将无线AP通过Masquerading/NAT与有线连入internet(作为无线网关);
l 将无线AP作为透明桥,桥接被用来做一个简单的AP或者两个无线设备的中继器。
预准备工作:
1.Wireless Tools (iwconfig, iwlist commands);
2.iptables firewall;
3.dnsmasq (caching DNS server and DHCP server);
方案一
方案1: Masquerading access point(NAT方式:此方式可以保证接口名不变,启用新的网络段,正好适合我目前使用的情况)。
这是最简单的方案,在linux上运行了防火墙和网关,你只需要添加无线接口。
你至少需要有一个有线的接口(如eth0)和一个无线的接口(wlan0),eth0连入了internet,wlan0提供ap功能。
iwconfig wlan0 mode Master;
如果报错说明不支持access point模式,你可以尝试Ad-hoc模式;
apt-get install dnsmasq;
eth0使用DHCP连入internet,使用下面命令获取IP和默认网关;
dhclient eth0 ;
然后设置无线接口为Master模式并输入SSID名,关闭加密:
iwconfig wlan0 essid "my wlan" mode Master enc off;
也可以开启wep加密:
iwconfig wlan0 essid "my wlan" mode Master enc 1A2B3C4D5E;
或者
iwconfig wlan0 essid "my wlan" mode Master enc "s:apple";
设置wlan0一个私有子网地址,不能和eth0同段。
ifconfig wlan0 10.0.0.1 netmask 255.255.255.0 broadcast 10.0.0.255 up;
为了两个地址之间的联系,我们需要在kernel中开启masquerading (NAT);
1.加载有关的kernel模块
modprobe ipt_MASQUERADE;
清空防火墙规则,确保包数据不被阻塞;
iptables –F;
开启两接口之间的NAT功能;
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;
最后我们要开启kernel到两个接口之间的前向包;
echo 1 > /proc/sys/net/ipv4/ip_forward;
在ubuntu系统下,
vi /etc/network/options中确保,
ip_forward=yes;
然后/etc/init.d/network restart;
开启DHCP服务器;
目前为止,我们已经能访问一个叫"my wlan"的无线网络,但是只能通过手动设置IP才能进行通信,接下来我们需要让我们的AP可以为连接他的设备动态获取IP。
需要使用dnsmasq工具包,可以从
http://www.thekelleys.org.uk/dnsmasq/doc.html;获取相关信息;
其配置为:
vi /etc/dnsmasq.conf;
interface=wlan0;
dhcp-range=10.0.0.10,10.0.0.110,255.255.255.0,6h;
保存之后重启:
/etc/init.d/dnsmasq restart;
到此,连入该wifi热点的设备可以自动获取IP了。
方案二
方案2:透明桥AP(桥接方式:使用简单,将新增一个桥接口,本地接口使用桥接口访问网络,都在同一个网段中)。
他们可以保持在同一个子网中,也就是说eth0获取的192.168.1.23;那么桥接后的接口都还是在192.168.1.段中,他们使用的是192.168.1.之前的同一个DHCP服务器分配的IP地址。桥接方式不需要使用dnsmasq工具包,但需要使用到bridge-utils工具包,主要用到里面的brctl命令。
在ubuntu系统下,修改的配置文件如下:你需要将名字和IP改为你自己网络中的名字和IP。
vi /etc/network/interfaces;
auto br0;
iface br0 inet static;
address 192.168.1.2;
network 192.168.1.0;
netmask 255.255.255.0;
broadcast 192.168.1.255;
gateway 192.168.1.1;
pre-up ifconfig wlan 0 0.0.0.0 up;
pre-up ifconfig wlan1 0.0.0.0 up;
pre-up iwconfig wlan0 essid “office” mode Managed;
pre-up iwconfig wlan1 essid “repeater” mode Master;
bridge_ports wlan0 wlan1;
post-down ifconfig wlan1 down;
post-down ifconfig wlan0 down;
iface br0 inet static;
pre-up ifconfig wlan 0 0.0.0.0 up;
pre-up ifconfig wlan1 0.0.0.0 up;
pre-up iwconfig wlan0 essid “office” mode Managed;
pre-up iwconfig wlan1 essid “repeater” mode Master;
pre-up brctl addbr br0;
pre-up brctl addif br0 wlan0;
pre-up brctl addif br0 wlan1;
post-down ifconfig wlan1 down;
post-down ifconfig wlan0 down;
post-down brctl delif br0 wlan0;
post-down brctl delif br0 wlan1;
post-down brctl delbr br0;
开启桥:
ifup -v br0;
#ifconfig br0 192.168.1.2 netmask 255.255.255.0 broadcast 192.168.1.255;
#route add default gw 192.168.1.1;
查看桥信息:
#brctl show br0;
动手操作
我尝试了方案1桥接,OK,以下是我使用的命令:
桥接网卡的方法:
ifconfig eth0 0.0.0.0 promisc;
brctl addbr br0;
brctl addif br0 eth0;
ifconfig mon.wlan0 0.0.0.0 promisc;
brctl addif br0 mon.wlan0;
./hostapd hostapd.conf –B;
brctl show;
ifconfig br0 up;
【hostapd.conf】内容如下:
interface=wlan0;
bridge=br0;
driver=nl80211;
ssid=bcmstb;
hw_mode=g;
channel=1;