【51CTO专稿】无线AP可以为传统的有线局域网提供无线扩展接入,而一般的无线网卡只能作为客户端连接到无线AP。目前市面上很多无线网卡都具有模拟AP功能,不单可以作为无线客户端连接上无线网络,也可以切换为模拟AP,供其他无线客户端连接。而笔记本上的模拟AP其典型应用场景如下:在没有无线路由器的情况下,电脑通过有线连接到宽带线路已经可以上网。电脑上安装具有模拟AP功能的无线网卡,并设置共享可以访问有线网络的网络连接,模拟AP与可以访问有线网络的网络连接就虚拟出一个"无线路由器"。
随着个人越来越多的其他的无线设备如手机、PAD以及很多类似平板设备的普及,我们发现很多时候我们的外出等特殊情况下让我们的其他设备接入有线网络已经成为了一个现实问题,那么我们可以充分发挥我们的随身笔记本的功能,将其通过软件设置成为模拟AP,这样就可以解决很多特殊情况下其他设备上网的问题了,如果您是一位WINDONS的用户,那么在win7下面用"承载网络"这一功能来模拟AP。当然,在LINUX系统下我们也可以通过软件配置来实现这样的功能。下面笔者将以FEDORA18下使用无线AP功能为例,讲述在LINUX系统下实现自定义无线AP的过程及升级带来的问题及解决办法。
一、实验环境:
- 操作系统:FEDORA18
- 内核版本:3.11.4-101.fc18.i686.PAE
- 无线网卡型号:tp-link TL-WN310G
二、无线AP创建过程:
1、在终端下分别使用命令yum install hostapd、yum install dnsmasq安装hostapd及dnsmasq软件组件包。其中hostapd 是 Host Access Point 守护进程,提供对基于 Linux 的无线接入点的强 WPA2 加密和身份验证。配置 hostapd 非常简单,它支持 WPA2-Personal 和 Enterprise,提供了对 WPA2-Personal 的独特修改,可让管理它变得更复杂或更简单,随后我们可以通过/etc/hostapd/hostapd.conf配置文件详细的配置hostapd的各种参数,让其将无线网卡模拟成为无线AP。而Dnsmasq 提供 DNS 缓存和 DHCP 服务功能。作为域名解析服务器(DNS),dnsmasq可以通过缓存 DNS 请求来提高对访问过的网址的连接速度。作为DHCP 服务器,dnsmasq 可以为局域网电脑提供内网ip地址和路由。DNS和DHCP两个功能可以同时或分别单独实现。dnsmasq轻量且易配置,适用于个人用户或少于50台主机的网络,我们将通过它来为我们接入后的客户端设备提供DHCP以及DNS服务。这样客户端就可以通过无线模拟AP顺利访问网络。
2、在系统中使用vi命令编辑hostapd配置文件/etc/hostapd/hostapd.conf(该在安装hostapd软件组件包时自动创建完成),内容如下:
- ctrl_interface=/var/run/hostapd
- ctrl_interface_group=wheel
- # Some usable default settings...
- macaddr_acl=0
- auth_algs=1
- ignore_broadcast_ssid=0
- # Uncomment these for base WPA & WPA2 support with a pre-shared key
- wpa=2
- wpa_key_mgmt=WPA-PSK
- wpa_pairwise=TKIP
- rsn_pairwise=CCMP
- # DO NOT FORGET TO SET A WPA PASSPHRASE!!
- wpa_passphrase=******
- # Most modern wireless drivers in the kernel need driver=nl80211
- #ieee80211n=1
- # Customize these for your local configuration...
- interface=wlan0
- hw_mode=g
- channel=7
- ssid=HOSTAP
- logger_stdout=-1
- logger_stdout_level=2
- max_num_sta=5
在该配置文件中SSID其实指的就是无线AP的访问名,用户可以随意定义自己喜欢的名字。而wpa_passphrase等号后的字符其实就是无线AP的连接密码,用户同样需要根据自己的需求进行修改。
3、在系统中使用vi命令编辑dnsmasq配置文件/etc/dnsmasq.conf,对如下行进行修改,内容如下:
- interface=wlan0
- listen-address=192.168.0.1
- #no-dhcp-interface=
- dhcp-range=192.168.0.50,192.168.0.150,12h
- dhcp-option=3,192.168.0.1
- dhcp-option=6,8.8.8.8
其中dhcp=ranage参数为dhcp地址范围,即租借时间12小时,dhcp-option=3,192.168.0.1为客户端配置网关,该地址其实就是模拟为无线AP无线网卡的IP地址。
dhcp-option=6,8.8.8.8为客户端配置dns,用户应该自己修改为外网的dns地址。
4、修改网络设置,打开Linux主机网络数据转发功能,命令模式如下:
- echo 1 >/proc/sys/net/ipv4/ip_forward
5、设置无线接入点IP地址,命令模式如下:
- ifconfig wlan0 192.168.0.1 netmask 255.255.255.0
6、使用命令systemctl启动hostapd及dnsmasq网络服务,命令模式如下:
- systemctl start hostapd.service
- systemctl start dnsmasq.service
7、如果该linux系统开启了防火墙需要使用iptables开启数据转发功能,命令模式如下:
- iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o em1 -j MASQUERADE
- iptables -A FORWARD -s 192.168.0.0/24 -o em1 -j ACCEPT
- iptables -A FORWARD -d 192.168.0.0/24 -m conntrack --ctstate ESTABLISHED, RELATED -i em1 -j ACCEPT
通过以上配置,在FEDORA18初次安装后作为无线AP使用是没有问题的。
三、问题及解决办法
FEDORA18内核升级到3.11.4-101.fc18.i686.PAE后,启动hostapd系统会报类似如下错误:
- nl80211: Failed to set interface wlan0 into AP mode
- nl80211 driver initialization failed.
导致LINUX系统无法创建模拟无线AP,终于用GOOGLE在:
- https://wiki.archlinux.org/index.php/Software_Access_Point#NetworkManager_is_interfering
帖子中找到了解决办法。其实后来发现只需要将netmanager网络管理器中无线网卡设置为"设备未托管"状态,之后hostapd就可以正常启动。
使用sed -i '/\[keyfile\]/a unmanaged-devices=mac:00:23:cd:10:3e:0b' /etc/NetworkManager/NetworkManager.conf;
在/etc/NetworkManager/NetworkManager.conf文件中的[keyfile]字段之后添加内容为:
unmanaged-devices=mac:00:23:cd:10:3e:0b的一行,其中"00:23:cd:10:3e:0b"为无线网卡MAC地址。这样该网卡就已经不再受NetworkManager管理了,在NetworkManager管理器中无线网络状态将更改为“设备未托管”状态。
使用sed -i '/^unmanaged-devices=mac:00:23:cd:10:3e:0b/d' /etc/NetworkManager/NetworkManager.conf命令,在文件中删除 unmanaged-devices=mac:00:23:cd:10:3e:0b这一行内容,可将无线网络重新托管在NetworkManager管理器中。
客户端使用HOSTAPD无线AP时,网速不稳定,导致某些时刻无法打开网页或者其它因为网络超时导致的网络不可访问故障。
该问题主要是因为无线数据传输校验中随机种子数较少导致的无线网络数据传输时延过大导致的,用户可以通过命令cat /proc/sys/kernel/random/entropy_avail来查看具体数值,该值一般小于1000,用户需要通过在终端中执行yum install haveged命令安装随机数生成器(haveged),并使用systemctl enable haveged.servce命令来启动随机数生成器(haveged)已提高entropy_avail数值。这样无线网络时延将恢复到正常状态。网络不在出现以上描述的问题。