用Hostapd创建可用的软AP
来源:互联网 发布:他知道我们在膜他知乎 编辑:程序博客网 时间:2024/06/06 15:50
1. 介绍
hostapd是一款运行在用户态软件,能够为认证服务器提供管理接入点。下面是无线网卡常见的工作模式及其作用。
显然,平时我们的计算机的无线网卡一般工作在Managed模式,而我们平常使用的路由器的无线网卡则是一般工作在Master模式。在本篇文章中,我们借助hostapd让我们计算机的无线网卡更换模式,使其工作在Master模式,这样我们的计算机就能够成为一个无线接入点从而为其他设备提供服务。
2. 安装配置
- Ubuntu 14.04
- hostapd v2.6
- isc-dhcp-server
hostapd可通过一下命令安装,获取到的是最新版本2.6。
$ sudo apt-get install hostapd
想要获取以前的版本或是想要详细了解hostapd,请浏览以下地址,下载后编译(2.6版本没有创建mon.wlan0接口,如果有需要用到这个接口的需要下载以前的版本)。
http://w1.fi/releases/http://w1.fi/cgit/hostap/plain/hostapd/README
isc-dhcp-server我的系统自带了,没有的可以按以下命令下载。
$ sudo apt-get install isc-dhcp-server
3. 流程
- 开启hostapd让电脑的无线网卡工作在Master模式,开启后,其他设备能够搜索到该热点,但由于无法获取到IP地址仍然无法连接。
- 根据实际情况,选择采用网桥方式或是DHCP服务器加上NAT来使该AP可用。
- 如果选择的是网桥方式,那么IP地址将会由电脑实际连接的外网分配,并且连接的终端可以直接发送数据到外网。热点连上了就可以直接用了,且和计算机的有线端同处于一个子网。
- 如果选择的是DHCP服务器加NAT的方式,那么开启DHCP服务器,就能够连上热点,但是无法连到网络。通过配置NAT,让终端发出的数据包的IP修改为公网IP,即可连上网络。
4.创建软AP
启动hostapd即可创建软AP,配置好hostapd的配置文件hostapd.conf,然后在终端输入以下命令即可启动,其中xx/xxx是你存放对应配置文件的位置。
$ sudo hostapd xx/xxx/hostapd.conf
关于配置文件示例及更多说明请浏览以下地址,也可以在/usr/share/doc/hostapd/example目录下查看。
http://w1.fi/cgit/hostap/plain/hostapd/hostapd.conf
下面是我自己简单配置的一个文件,仅供参考。
#无线设备名称,基本都是wlan0,可用iwconfig命令查看interface=wlan0#使用的网桥名称,如果是用DHCP+NAT方式可忽略此行#bridge=br0 #hostapd 0.6.8或者更高版本唯一选择driver=nl80211#终端看到的wifi名称,请自行修改ssid=mywifi#指明要选用的无线传输协议,这里表示使用802.11ghw_mode=g#802.11b/g都至多只有三条互不干扰的信道,即1,6,11,一般填这三个其中一个 channel=1 #验证身份的算法,1表示只支持wpa,2表示只支持wep,3表示两者都支持,wep已经被淘汰了,请不要使用。auth_algs=1#wpa加密方式,1代表支持wpa,2代表支持wap2,3代表两者都支持。wpa=1#wifi密码,请自行修改wpa_passphrase=123456789#对所有用户进行同样的认证,不进行单独的认证,如果需要,请设置为WPA-EAP。wpa_key_mgmt=WPA-PSK#控制支持加密数据的秘钥,CCMP比TKIP更强wpa_pairwise=CCMP
如果开启的时候,提示interface wlan0 wasn’t start,是因为你的wlan设备没有打开的原因。无线设备一般有三种状态,使用中,软锁定和硬锁定。其中软锁定就是关闭但可被软件激活,硬锁定则不可以。
输入下面两句命令,先关闭wifi,再软锁定wlan,最后重新打开hostapd即可。
sudo nmcli nm wifi offsudo rfkill unblock wlan
5. 网桥
我们可以在我们的计算机创建一个网桥,两端分别是以太网接口(我的是eth0)和无线网接口(我的是wlan0)。这样,连接到wlan0的设备能够被eth0端接口的网络服务。这种结构比较简单,通过wlan0连接的设备相当于直接连接到外部网络,与提供AP服务的计算机eth0在同一个子网。
但是,这同时也要求外部网络能够服务你的无线设备,如果你是通过拨号或是需要认证上网或是其他通过DHCP只能拿到一个IP地址的方式都不行。
6.DHCP+NAT
1) DHCP
开启DHCP服务器是为了让终端能够获取到IP地址,分配的地址是私有的,因此只要不与公有的地址相冲突就可以,RFC 1918 为私有网络预留出了三个IP 地址块,上述三个范围内的地址不会在因特网上被分配,我们可以放心使用。
A 类:10.0.0.0~10.255.255.255B 类:172.16.0.0~172.31.255.255C 类:192.168.0.0~192.168.255.255
我们需要配置/etc/dhcp/dhcp.conf文件,添加要分配的网段,指明分配的地址范围,默认网关和DNS服务器地址。在文件最后我们添加以下内容。注意要分配的网段不能和主机eth0所处的网段相同。(我的主机处在192.168.0.1/24,所以我下面挑的是10.0.0.0/8这段地址。
subnet 10.0.0.0 netmask 255.0.0.0 { range 10.0.0.2 10.0.0.10; option routers 10.0.0.1; option domain-name-servers 8.8.8.8;}
然后我们配置无线接口wlan0所处的网段,注意要跟上面的配置一致。
$ sudo ifconfig wlan0 10.0.0.1 netmask 255.0.0.0
最后开启dhcp服务器即可,连上热点会从10.0.0.2到10.0.0.10之间分配一个ip地址给客户端。
$ sudo service isc-dhcp-server start
2) NAT
NAT一般分为三类,分别是SNAT,DNAT以及PNAT。
- SNAT,Source Network Address Translation
源地址转换,能够为内部客户端代理访问外部网络。目标地址和端口不变,源地址修改成对外可见的公网地址,端口随机生成,并将映射记录在NAT表中。当数据返回时,根据端口将目的地址修改成对应表项的IP地址和端口,这样可以解决多个设备共享一个公有IP上网的问题。 - DNAT,Destination Network Address Translation
目标地址转换,用来隐藏真实服务器的地址。接收到数据时,源地址和端口不变,对目的地址和端口进行修改。当接收到真实服务器发送给请求的客户端回应时,对源目的地址和端口进行修改。 - PNAT , Port Network Address Translation
端口地址转换,用来将不同服务统一成一个公网地址,对应不同的端口。接收到数据时,根据目的地址和目的端口将其修改成对应真实服务的地址和端口,并记录在表项中。当接收到真实服务器发送给请求的客户端回应时,根据表项记录对源目的地址和端口进行修改。
在这里,我们要用到的是SNAT,这可以借助iptables工具来实现。iptables能够帮助我们配置管理linux内部防火墙。我们首先打开转发功能,然后将192.168.0.1/24网段的地址都修改为eth0的出口地址。
$ sudo sysctl net.ipv4.ip_forward=1$ sudo iptables -t nat -A POSTROUTING -s 10.0.0.1/8 -o eth0 -j MASQUERADE
7.后续
可以根据自身适宜的方案建立一个bash脚本,以免每次开启AP时都得重新输入命令。
本文参考了以下链接。
- https://wiki.archlinux.org/index.php/Software_access_point
- https://wiki.archlinux.org/index.php/Network_bridge
- https://wiki.archlinux.org/index.php/Internet_sharing
- 用Hostapd创建可用的软AP
- Ubuntu 下用hostapd创建AP热点
- hostapd(AP)的配置文件
- 软AP之Hostapd介绍
- 可用的hostapd.conf
- linux 发无线 软AP hostapd+dnsmasq
- linux软AP--hostapd+dhcpd
- linux软AP实现,hostapd+dhcpd+dnsmasq
- Linux下用hostapd架无线AP
- Linux下用hostapd架无线AP
- Linux下软AP功能之Hostapd介绍
- Linux下软AP功能之Hostapd介绍
- Linux下软AP功能之Hostapd介绍
- Linux下软AP功能之Hostapd介绍
- Linux下用hostapd架无线AP(转载)
- 使用Hostapd开启AP功能
- Ubuntu下通过Hostapd建立软AP提供无线上网功能
- hostapd实现WIFI 热点(AP)
- Java集合框架
- SpringBoot(2) 搭建SpringFox环境
- android:sqlite的使用(读取res/raw的db文件)一种方法
- CC2530 zstack 2.5.1 生成hex文件
- cocos2d-x 检测矩形碰撞
- 用Hostapd创建可用的软AP
- tomcat报错
- ECMAScript 6(3)const和顶层对象
- 网络程序设计
- Arcgis 三维场景模拟
- VirtualBox Ubuntu hadoop-1.2.1 搭建总结
- 网络程序设计考察报告
- 【LeetCode】 260. Single Number III
- android的Socket通信