https://github.com/mengning/remoteapd/wiki/Hostapd-Configuration-Guide
http://linsir.sinaapp.com/post/Raspberry_Pi_Wifi_Router
无线AP可以为传统的有线局域网提供无线扩展接入,而一般的无线网卡只能作为客户端连接到无线AP。目前市面上很多无线网卡都具有模拟AP功能,不单可以作为无线客户端连接上无线网络,也可以切换为模拟AP,供其他无线客户端连接。
随着个人越来越多的其他的无线设备如手机、PAD以及很多类似平板设备的普及,我们发现很多时候我们的外出等特殊情况下让我们的其他设备接入有线网络已经成为了一个现实问题,那么我们可以充分发挥我们的随身笔记本的功能,将其通过软件设置成为模拟AP,这样就可以解决很多特殊情况下其他设备上网的问题了,如果您是一位WINDONS的用户,那么在win7下面用"承载网络"这一功能来模拟AP。在LINUX系统下我们也可以通过Hostapd软件配置来实现这样的功能。
一、实验环境:
操作系统:Ubuntu 内核版本:Ubuntu13.04 无线网卡型号:tp-link TL-WN310G
二、无线AP创建过程:
1. 安装依赖文件:
libnl库主要提供基于LINUX内核的netlink protocol相关APs函数。
libssl-dev库提供ssl开发库。
hr@ubuntu:~$ sudo apt-get install libnl-dev libpopt-dev libssl-dev
2. 下载hostapd:http://hostap.epitest.fi/hostapd/
注意下载(Latest release: hostapd-2.0.tar.gz)
3. 解压
tar -zxvf hostapd-2.0.tar.gz
4. 进入hostapd-2.0/hostapd/
cd hostapd-2.0/hostapd/
5. 备份默认的config
cp defconfig .config
6. 安装Hostapd
make
sudo make install
7. 插上无线网卡
ifconfig//命令下应该会显示有wlan0,表明无线网卡已经插上.
8. 配置wlan0网口
sudo gedit /etc/network/interfaces
添加
auto wlan0
iface wlan0 inet static
address 192.168.0.1
netmask 255.255.255.0
9. 准备hostapd的配置文件
sudo gedit /etc/hostapd.conf
添加
interface=wlan0//接入点设备名称注意不要包含ap后缀,即如果该设备称为wlan0ap,填写wlan0即可
driver=nl80211//设置无线驱动类型
ssid=fyqhr //AP热点名字
hw_mode=g //指定802.11协议包括a=IEEE802.11a,b = IEEE 802.11b, g = IEEE 802.11g
channel=11 //channel:设定无线频道
dtim_period=1 //设置DTIM周期,稳定的关键。AP通过设置DTIM的间隔(缺省是一个beacon时间,100ms),根据这个间隔发送组播流量。
rts_threshold=2347 //可考虑注销此项目来提高网卡性能,如果更改后变得不稳定则取消注销。
fragm_threshold=2346 //可考虑注销此项目来提高网卡性能,如果更改后变得不稳定则取消注销
macaddr_acl=0 //macaddr_acl:可选,指定MAC地址过滤规则,0表示除非在禁止列表否则允许,1表示除非在允许列表否则禁止,2表示使用外部RADIUS服务器.
auth_algs=3 //auth_algs指定采用哪种认证算法,采用位域(bit fields)方式来制定,其中第一位表示开放系统认证(Open System Authentication, OSA),第二位表示共享密钥认证(Shared Key Authentication, SKA)。如果设置alth_algs的值为1,表示只采用OSA;如果为3则两种认证方式都支持。
ieee80211n=0//如果是n网卡则参数为1,否则为0
wpa=2//老师原本值为3,改成2后手机连接AP成功,wpa:指定WPA类型,这是一个位域值(bit fields),第一位表示启用WPA,第二位表示启用WPA2。在我的配置中,无论设置成1、2或3,都可以正常连接.
wpa_passphrase=1234567890//设置密码,长度为8~63个字符
wpa_key_mgmt=WPA-PSK//WPA加密类型//wpa_pairwise/rsn_pairwise:如果启用了WPA,需要指定wpa_pairwise;如果启用了WPA2,需要指定rsn_pairwise,或者采用wpa_pairwise的设定。都可以设定成TKIP、CCMP或者两者都有,具体含义我也没仔细弄清楚。一篇比较老的文章说TKIP不兼容Windows Mobile.
wpa_pairwise=TKIP
rsn_pairwise=CCMP
10. 安装dnsmasq
ps -e | grep dnsmasq
sudo killall dnsmasq
sudo apt-get install dnsmasq //此时有可能ping不通域名,重启后再试一下
sudo gedit /etc/resolv.conf //如果ping不通可手动重新配置一下NDS(当前可用的)
11. 配置DHCP服务器
sudo gedit /etc/dnsmasq.conf
添加:
interface=wlan0
bind-interfaces
except-interface=lo
dhcp-range=192.168.0.100,192.168.0.200,6h//dhcp=ranage参数为dhcp地址范围,租借时间6h
dhcp-option=3,192.168.0.1//dhcp-option=3,192.168.0.1 #为手机配置网关
dhcp-option=6,219.219.223.10 //dhcp-option=6,219.219.223.10 #为手机配置dns,这里是USTCSZ的DNS
12. 设置无线接入点IP地址
sudo ifconfig wlan0 192.168.0.1 netmask 255.255.255.0
13. 启动AP
sudo hostapd -B /etc/hostapd.conf
14. 重启dnsmasq,否则本机无法上网
sudo /etc/init.d/dnsmasq restart
此时已经可以收到AP信号了,但无法上网
因为本机DNS被修改为了127.0.0.1,需手动修改为本地可使用DNS服务器
sudo gedit /etc/resolv.conf
15. 切换到root权限
sudo -s //切换到root权限
16. 修改网络设置,打开Linux主机网络数据转发功能
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
echo 1 > /proc/sys/net/ipv4/ip_forward //如果该linux系统开启了防火墙需要使用iptables开启数据转发功能
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
17.此时AP热点已经可以被手机连接成功,并能上网(PS:测试了小米2和中兴U930hd可一起连接上,但是不知道是不是我的网卡问题,虽然可以上网了,但是不是很稳定,容易掉线)
三、常见问题:
nl80211: Failed to set interface wlan0 into AP mode
nl80211 driver initialization failed.
导致LINUX系统无法创建模拟无线AP的原因有二:
1.设备被内核托管
终于用google在:https://wiki.archlinux.org/index.php/Software_Access_Point#NetworkManager_is_interfering
帖子中找到了解决办法:
其实后来发现只需要将netmanager网络管理器中无线网卡设置为"设备未托管"状态,之后hostapd就可以正常启动。
/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数值。这样无线网络时延将恢复到正常状态。网络不在出现以上描述的问题。
2.无线ap不支持ap模式
这就没办法喽~~
3.问题补充
启动hostapd时,如果遇到如下错误
unknown configuration item 'ieee80211n'
可以修改.config文件,将
#CONFIG_IEEE80211N=y
前面的'#'去掉,然后重新编译,安装(make clean, make, make install).
配置过程遇到以下问题的解决方法:
0.我在获取hostapd的时候会报依赖冲突,要更新一下源:sudo apt-get update
1.安装配置无线网卡 这一步是针对在虚拟机中操作所需要的步骤,如果不是虚拟机下操作则可以跳过
2.配置hostapd的参数含义: ssid:别人所看到的我们这个无线接入点的名称; hw_mode:指定802.11协议,包括 a = IEEE 802.11a, b = IEEE 802.11b, g = IEEE 802.11g; channel:设定无线频道; interface:接入点设备名称,注意不要包含ap后缀,即如果该设备称为wlan0ap,填写wlan0即可; bridge:指定所处网桥,对于一个同时接入公网、提供内部网和无线接入的路由器来说,设定网桥很有必要; driver:设定无线驱动,我这里是nl80211; macaddr_acl:可选,指定MAC地址过滤规则,0表示除非在禁止列表否则允许,1表示除非在允许列表否则禁止,2表示使用外部
RADIUS服务器; accept_mac_file:指定允许MAC列表文件所在;
3.安装dnsmasq: 如果遇到不能上网的情况,可能是dnsmasq更改了你的域名服务器 打开文件:gedit /etc/resolv.conf将nameserver 127.0.0.1改为 nameserver 8.8.8.8(这是谷歌提供的一个免费DNS服务器)
4.启动hostapd,dnsmasq: sudo hostapd -B /etc/hostapd.conf步报 failed to ...into AP mode解决方法: 打开文件: sudo gedit /etc/NetworkManager/NetworkManager.conf 在keyfile后加 [keyfile] unmanaged-devices=mac:你的网卡mac地址,这是将你插上的外置网卡设为unmanaged状态