hostapd 安装 802.1X认证

参见:https://blog.csdn.net/qq_20448859/article/details/54131187

用Hostapd创建可用的软AP

1. 介绍

  hostapd是一款运行在用户态软件,能够为认证服务器提供管理接入点。下面是无线网卡常见的工作模式及其作用。

工作模式作用
Master(AP)成为无线接入点提供无线接入服务
Managed(STA)作为客户端连接其他无线接入点
Monitor监听附近所有无线流量
Ad-hoc多台计算机直接相连

  显然,平时我们的计算机的无线网卡一般工作在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. 流程

  1. 开启hostapd让电脑的无线网卡工作在Master模式,开启后,其他设备能够搜索到该热点,但由于无法获取到IP地址仍然无法连接。
  2. 根据实际情况,选择采用网桥方式或是DHCP服务器加上NAT来使该AP可用。
  3. 如果选择的是网桥方式,那么IP地址将会由电脑实际连接的外网分配,并且连接的终端可以直接发送数据到外网。热点连上了就可以直接用了,且和计算机的有线端同处于一个子网。
  4. 如果选择的是DHCP服务器加NAT的方式,那么开启DHCP服务器,就能够连上热点,但是无法连到网络。通过配置NAT,让终端发出的数据包的IP修改为公网IP,即可连上网络。

4.创建软AP

  启动hostapd即可创建软AP,配置好hostapd的配置文件hostapd.conf,然后在终端输入以下命令即可启动,其中xx/xxx是你存放对应配置文件的位置。

$ sudo hostapd xx/xxx/hostapd.conf
  • 1

  关于配置文件示例及更多说明请浏览以下地址,也可以在/usr/share/doc/hostapd/example目录下查看。

http://w1.fi/cgit/hostap/plain/hostapd/hostapd.conf
  • 1

  下面是我自己简单配置的一个文件,仅供参考。

#无线设备名称,基本都是wlan0,可用iwconfig命令查看
interface=wlan0

#使用的网桥名称,如果是用DHCP+NAT方式可忽略此行
#bridge=br0  

#hostapd 0.6.8或者更高版本唯一选择
driver=nl80211

#终端看到的wifi名称,请自行修改
ssid=mywifi

#指明要选用的无线传输协议,这里表示使用802.11g
hw_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 off
sudo 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.010.255.255.255
B 类:172.16.0.0172.31.255.255
C 类:192.168.0.0192.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

参见:https://blog.csdn.net/nuaa_llf/article/details/54747806


    本实验的目的是在Linux Mint18的环境下安装hostapd来实现802.1x,其中mint作为路由的功能,即将hostapd设置为radius客户端。而要入网的是一部android手机,认证的radius服务器是运行在centos6.8上的freeradius。

【hostapd简介】

         hostapd 是用户控件的守护进程用于无线接入点(AP)和授权服务器(authentication servers)。它实现了IEEE802.11的AP管理,IEEE802.1X/WPA/WPA2/EAP授权,RADIUS 客户端,EAP服务器和RADIUS 授权服务器,目前最新版本支持Linux系统(HOST AP,madwifi,mac80211-based驱动)和FreeBSD(net80211)。

【hostapd安装】

         首先需要安装dnsmasq和hostapd,这里可以选择从仓库安装或者从源码安装。

         sudo apt-get install dnsmaq hostapd

         或者下载hostapd-x.y.tar.gz,解压并修改deconfig为.config: cd hostapd-x.y/hostapd && cp defconfig .config。如果你的系统里是libnl3.2,就设置CONFIG_LIBNL32=y并make。

【hostapd配置】

         在运行hostapd之前需填写配置文件hostapd.conf,这里我们将它设置为radius客户。细节如下:

          #open 802.1x authenticate

          interface=wlp3s0f0                                              //网卡接口名称,用ifconfig获得
          driver=nl80211
          ssid=My_WiFi
          channel=10
          hw_mode=g
          ignore_broadcast_ssid=0
          auth_algs=1
          wpa=1

          ieee8021x=1
          auth_server_addr=192.168.1.10                        //radius server的ip地址
          auth_server_port=1812
          auth_server_shared_secret=testing123           //预共享的秘密字

          wpa_key_mgmt=WPA-EAP
          wpa_pairwise=TKIP 

【hostapd运行】

          在启动hostapd之前需要对mint的NetworkManager进行设置,用两个命令——nmcli和rfkill:

          新版本nmcli用法:sudo nmcli radio wifi off (关闭wifi使其托管),然后可先用rfkill list观察系统对网卡AP功能的限制情况,如本系统启动后如图:

          

         这里可以看到0和2都将wlan功能进行了限制,因此rfkill unblock 0&&rfkill unblock 2解除限制,使状态如下图,否则无法hostapd正常打开。

          

        接下来就可以用sudo ./hostapd  [path for hostapd.conf]开启hostapd,并用sudo ifconfig wlan0 [gateway ip] netmask 255.255.255.0设置mint网关ip地址。启动后如下图所示:


        最后设置dnsmasq进行ip地址的分配,这里不作详细介绍。

【后续工作】

        再到centos上安装freeradius,这里忍不住称赞freeradius这个软件,是我目前遇到的开源的radius里做的最好的,支持各种认证方法。默认安装的话,在/etc/raddb目录里,有它的配置文件,在users里设置用户名称和密码,在client.conf里设置radius客户的ip为mint ap的地址,并填写预共享秘密字,最后在eap.conf里选择需要使用的认证方法。这里也不作详细介绍。

         最后展示一张在mint AP 上用wireshark截图的认证过程,从中可以看出认证完成并允许入网。

     


  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
这个错误提示表示hostapd服务无法读取配置文件`/etc/hostapd/hostapd.conf`。通常情况下,这个问题是由于hostapd服务没有足够的权限来读取该配置文件引起的。你可以尝试以下方法来解决这个问题: 1. 检查文件权限:使用以下命令来检查hostapd.conf文件的权限: ``` ls -l /etc/hostapd/hostapd.conf ``` 如果该文件的权限不足,你可以使用以下命令来修改文件权限: ``` sudo chmod 644 /etc/hostapd/hostapd.conf ``` 这将为文件添加读权限,让hostapd服务能够读取该文件。 2. 检查文件所属用户和组:使用以下命令来检查hostapd.conf文件的所有者和所属组: ``` ls -l /etc/hostapd/hostapd.conf ``` 如果该文件的所有者和所属组与hostapd服务的用户和组不匹配,你可以使用以下命令来修改文件所有者和所属组: ``` sudo chown root:root /etc/hostapd/hostapd.conf ``` 这将把文件的所有者和所属组都修改为root,让hostapd服务能够读取该文件。 3. 检查文件路径:使用以下命令来检查hostapd.conf文件的路径是否正确: ``` ls -l /etc/hostapd/hostapd.conf ``` 如果该命令无法找到文件或者文件路径错误,你可以使用以下命令来重新创建该文件或者修复文件路径: ``` sudo touch /etc/hostapd/hostapd.conf ``` 这将创建一个新的hostapd.conf文件,你可以使用文本编辑器编辑该文件并保存。 如果以上方法都无法解决问题,你可以考虑卸载并重新安装hostapd服务,或者向相关技术支持寻求帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值