linux软AP--hostapd+dhcpd

2018年05月08日 ⁄ 综合 ⁄ 共 4908字 ⁄ 字号    ⁄ 评论关闭

随着手机、笔记本等无线设备的增多,公司里的家用三个无线路由器已经不堪重负,老是有人说连不上。谁让咱是运维呢,在很多人眼里运维 =网管 (深表委屈),没办法就再兼一个企业网管的职务吧 。给BOSS提出的解决方案有二:一、购买企业无线路由
,价格从几百到几千不等,性能从支持30台设备到100台以也不等,最大速率从150M到1300M等也有很多档次,还有一些其他参数和功能不再一一表述;二、购买无线网卡配合linux hostapd +dhcpd或dnsmasq ,功能方面可以根据需要自由扩展 ,成本一块无线网卡100元以内,一台退休的破台机(而且可以兼做网关,ftp等用)。

一、网卡选择

不同于windows上,大部分的网卡都支持软AP ,linux下的网卡需要支持mode master的才可以做软AP 。具体识别方法如下

1、iwconfig识别

[root@localhost ~]$ sudo iwconfig wlan0 mode master
Password:
Error for wireless request "Set Mode" (8B06) :
SET failed on device wlan0 ; Invalid argument.

2、iw识别

上面的操作失败,证明不支持。再进行进一步的验证,有些新的网卡用的是mac80211 framework,对于这些网卡的话,用iwconfig来测试它是否支持master模式是行不通的。

因为他们是使用新的 nl80211接口在用户空间通信的。再使用iw命令进行测试:

[root@localhost ~]$ sudo  iw list
........略........................
Supported interface modes:
* IBSS
* managed
* AP
* AP/VLAN

如果「Supported interface modes」中有「AP」的话,那么恭喜你,你的无线网卡可以架设虚拟AP 。如果没有则不支持。

3、驱动识别

[root@localhost ~]$ sudo ethtool -i wlan0
driver: iwlagn
version: 3.0-ARCH
firmware-version: 8.83.5.1 build 33692
bus-info: 0000:03:00.0
supports-statistics: no
supports-test: no
supports-eeprom-access: no
supports-register-dump: no

例如上面的示例中使用的驱动为iwlagn,通过http://wireless.kernel.org/en/users/Drivers AP模式支持的驱动列表里的查找AP项为yes的未发现iwlagn
,证明其不支持。

即然如此,如何在未购买网卡前选择一款一定支持的网卡呢?wireless.kernel.org也给我们提供了一个方法 ,通过http://wireless.kernel.org/en/users/Devices  硬件列表
(该页按pci、usb、pcmcia接口类型做了区分,点开相应的类型即可查看具体的硬件)。当然,这个表里列出的并不完全,也并不能保证是最适合做软AP的硬件 。是否识合请参查看上面的三个方法。

二、hostapd+dnsmasq配置

选择好网卡,接下来就是linux下的软件配置。以linux mint为例(基于ubuntu ,以下的示例同样适用于ubuntu)

1、安装软件

[root@localhost ~]$ sudo apt-get install hostapd dnsmasq

Dnsmasq是一个小巧且方便地用于配置DNS和DHCP的工具,适用于小型网络 。如果网络环境内的机器较多,建议换用dhcpd 。

2、hostapd配置

[root@localhost ~]$ sudo vim /etc/hostapd/hostapd.conf
interface=wlan0
driver=nl80211
ssid=My_wifi
channel=6
hw_mode=g
ignore_broadcast_ssid=0
auth_algs=1
wpa=3
wpa_passphrase=11111111
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

以上是一个示例配置,配置了一个AP名称为My_wifi,密码为8个1的wpa加密方式的软AP 。配置完成后可以通过hostadp  /etc/hostapd/hostapd.conf检测文件配置 。配置文件正常的话可以通过/etc/init.d/hostapd
start启动,启动前,请确认以下行是否增加,如果该行值为空的话,请按下面修改

# sudo vim /etc/init.d/hostapd
将文件中 DAEMON_CONF 的值改成下面这样:
DAEMON_CONF=/etc/hostapd/hostapd.conf

3、dnsmasq配置

#sudo vim /etc/dnsmasq.conf
interface=wlan0
listen-address=192.168.100.1
#no-dhcp-interface=
dhcp-range=192.168.100.50,192.168.100.150,12h
server=/google/8.8.8.8

上面配置了dnsmasq 监听的接口,该接口的IP、dhcp地址的范围、租期长短、dns等。如果想使用dhcpd也可以,这里省略dhcpd.conf的配置 。3、配置无线接入点IP

sudo ifconfig wlan0 192.168.100.1 netmask 255.255.255.0  up 

4、开启主机的路由转发

echo 1 >/proc/sys/net/ipv4/ip_forward

以上配置为立即生效,但重启系统后就会失效,可以使其重启后有效的方法是修改/etc/sysct.conf文件,在其中增加如下一行:

#sudo vim /etc/sysctl.conf
net.ipv4.ip_forward=1
#sysctl -p 生效

5、共享上网

关于通过局域网eth0共享上网的方法有两种:一种是桥接模式,一种是nat模式,这里以nat模式为例:

iptables -A FORWARD -i wlan0 -o eth0 -s 192.168.100.0/24 -m state --state NEW -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

通过以上步骤配置就可以完成无线AP上网了。

三、wifi-hostapd-ap工具

以上操作步骤也可以通过配置图形化的工具去操作 ,该工具就是wifi-hostapd-ap 。该工具是由俄罗斯人开发,其图形界面需要依赖qt 。该工具的安装方式如下(还是以我笔记本的系统linux mint为例):

# sudo apt-add-repository ppa:ekozincew/ppa
# sudo apt-get update && sudo apt-get install wifi-hostapd-ap

其他linux版本可以通过 https://code.google.com/p/wifi-hostapd-ap/downloads/list 页面下载安装。

不过该工具默认为俄语界面,内置的有英语,可通过以下方法修改。如下图:

选择好英语,点中间的键是保存,保存后退出wifi_hostapd_ap,然后再重新启动。

如下图所示已经变成英文,其中editor部分是关于模板的部分,有兴趣的可以试试。

hostapd.conf配置相关部分

下面是dnsmasq.conf部分的配置

完成后点击active激活所有的配置,客户端连接上后,可以在list of clients上查看目前已连接的客户端

该部分参考台湾yahoo部落格格

四、其他

1、关于网卡不能使用软AP模式

如常见的RTL8187卡王,在windows下可以很方便的做soft AP,换到 hostapd 下就不支持。个人感觉不是网卡硬件不支持,而是由于驱动不支持导致的。想要解决某些在windows下支持的在linux下也支持可以通过修改驱动解决 ,当然这需要想当高的水平 --- 个人观点 ,不知道是否正确 。

2、freebsd下检测网卡是否支持soft AP

由于freebsd自身的移定性,很多像软网关,软AP都会选择以freebsd为基础进行更改,如大名鼎鼎的pfsense 。这里还是以卡王为例,因为手头有这么一块卡 。当时想在linux下不行,兴许在freebsd下就会支持 。如何查看freebsd下无线网卡是否支持AP模式呢?

[root at thor ~]# ifconfig ndis0
ndis0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 2290
ether 00:25:d3:93:50:c8
media: IEEE 802.11 Wireless Ethernet autoselect (autoselect)
status: no carrier
[root at thor ~]# ifconfig ndis0 list caps
ifconfig: unable to get device capabilities: Invalid argument
[root at thor ~]# ifconfig wlan0 create wlandev ndis0
[root at thor ~]# ifconfig wlan0
wlan0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500
ether 00:25:d3:93:50:c8
media: IEEE 802.11 Wireless Ethernet autoselect (autoselect)
status: no carrier
ssid "" channel 1 (2412 Mhz 11b)
country US authmode OPEN privacy OFF txpower 0 bmiss 7 scanvalid 60
bintval 0
[root at thor ~]# ifconfig wlan0 list caps
drivercaps=1802303<STA,803ENCAP,IBSS,PMGT,TXPMGT,WPA1,WPA2>
cryptocaps=b<WEP,TKIP,AES_CCM>

如上面的操作所示,通过ifconfig wlan0 list caps命令查看输出的结果里有没有AP项,没有表示也不支持。所以最终的结果是卡王在freebsd下也不支持。

freebsd soft AP相关的设置参看以下页面

http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/network-wireless.html

http://www.freebsdwiki.net/index.php/AccessPoint#Useful_Association_Commands

3、客户端使用HOSTAPD无线AP时,网速不稳定

客户端使用HOSTAPD无线AP时,网速不稳定,导致某些时刻无法打开网页或者其它因为网络超时导致的网络不可访问故障。

该问题主要是因为无线数据传输校验中随机种子数较少导致的无线网络数据传输时延过大导致的,用户可以通过命令cat /proc/sys/kernel/random/entropy_avail来查看具体数值,该值一般小于1000,用户需要通过在终端中执行sudo apt-get install haveged命令安装随机数生成器(haveged),并使用/etc/init.d/haveged start命令来启动随机数生成器(haveged)提高entropy_avail数值。这样无线网络时延将恢复到正常状态。网络不在出现以上描述的问题。

linux软AP--hostapd+dhcpd的更多相关文章

  1. ubuntu设置WPA2-PSK的wifi热点(AP)——hostapd+dhcpd

    在ubuntu 12.04中,默认可以设置的wifi热点是只能用WEP加密,毫无疑问,这样的加密方式,安全性低,现在可以在10几秒的时间内破解,并且只能添加ad-hoc模式的热点,不支持添加AP模式, ...

  2. Linux下用hostapd架无线AP

    Published by 荒野无灯 on 2011-10-08 00:56:02 under 服务器/MySQL Tags: 路由,无线AP,hostapd 34452 views 本文将介绍在lin ...

  3. 软AP的实现------hostapd的编译运行

    最近要给摄像头做一个软ap,让手机能够连上这个热点,从而能够与摄像头进行通信. 1.什么是hostapd : hostapd能够使得无线网卡切换为master模式,模拟AP(通常可以认为是路由器)功能 ...

  4. 网易视频云技术分享:linux软raid的bitmap分析

    网易视频云是网易倾力打造的一款基于云计算的分布式多媒体处理集群和专业音视频技术,提供稳定流畅.低时延.高并发的视频直播.录制.存储.转码及点播等音视频的PAAS服务,在线教育.远程医疗.娱乐秀场.在线 ...

  5. linux rtl8188eu ap模式 密码错误 disassoc&#160;reason&#160;code(8)

    2018-05-30 14:12:46 于深圳南山科技园 最近有个项目,客户需要通过手机app通过机器wifi热点连接,从而实现对机器的设置及视频的实时预览等各种功能.这两天一直在搞rtl8188eu ...

  6. linux中怎样设置dhcpd

    linux中怎样设置DHCP  在 linux 以下设置 DHCP一点也不复杂﹐您全部要做的仅仅有一个文件﹕/etc/dhcpd.conf . 以下﹐我用我自己的设置文件来说说怎么改动这个文件﹕  d ...

  7. ubuntu建立软ap共享无线网络

    建立ad-hoc模式共享网络 viewtopic.php?f=116&t=387194 有些android手机可能不支持ad-hoc模式,要第三方rom才行. 首先安装这些工具 代码: apt ...

  8. Linux软Raid--mdadm命令

    mdadm:为软RAID提供管理界面,RAID设备可命名为/dev/md0./dev/md1./dev/md2./dev/md3等 命令的语法格式:mdadm[mode] <raiddevice ...

  9. linux软raid练习

    创建一个空间大小为10G的raid5,要求其chunk为1024k,格式为ext4文件系统,开机可自动挂载至/backup目录,并支持acl功能: 1 2 3 4 5 6 7 8 9 10 11 12 ...

随机推荐

  1. Gparted Live分区调整

    由于年少无知,在安装ubuntu系统的时候,以为/temp是软件包安装时解压的缓冲,所以给/temp留了10G,而以为/var只是记录一些log而已,因此把仅存的1G分配给了它.随后在安装软件时出现“ ...

  2. jetty服务器原理与maven集成

    jetty服务器原理+MyEclipse下与Maven集成 Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境.Jetty是使用Java语 ...

  3. apt下载open-jdk8报错add-apt-repository: command not found

    今天下载jdk8报错 在Ubuntu下,时不时会有这个错误的. add-apt-repository: command not found sudo apt-get install software- ...

  4. [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project triage: Compilation failure [ERROR] No compiler is provided in this environment.

    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-c ...

  5. 解决 ASP.NET Core 自定义错误页面对 Middleware 异常无效的问题

    我们基于 Razor Class Library 实现了自定义错误页面的公用类库(详见之前的随笔),但是在实际使用时发现如果在 middleware 中发生了异常,则不能显示自定义错误页面,而是返回默 ...

  6. Java中“==”和“equals()”的区别

    “==”比较的是变量所指向的对象,当S1在内存中定义以后,再定义s2的时候s2所指向的值是定义s1时候所创建的,而不是又在内存创建了一个“Monday”. “equals”比较的是对象所指向的值,所以 ...

  7. SpringBoot中使用springfox+swagger2书写API文档

    随着前后端的分离,借口文档变的尤其重要,springfox是通过注解的形式自动生成API文档,利用它,可以很方便的书写restful API,swagger主要用于展示springfox生成的API文 ...

  8. Express全系列教程之(八):session的基本使用

    一.关于session session是另一种记录客户状态的机制,与cookie保存在客户端浏览器不同,session保存在服务器当中:当客户端访问服务器时,服务器会生成一个session对象,对象中 ...

  9. 线性表->链式存储->线形链表(单链表)

    文字描述: 为了表示前后两个数据元素的逻辑关系,对于每个数据元素,除了存储其本身的信息之外(数据域),还需存储一个指示其直接后继的信息(即直接后继的存储位置,指针域). 示意图: 算法分析: 在单链表 ...

  10. AES加密的S盒和逆S盒的推导代码备份(C实现)

    摘取自https://www.cnblogs.com/Junbo20141201/p/9369860.html,感谢原作者的详细解读. #include <stdio.h> ][] = { ...