CentOS 7 之 hostapd AP模式配置

最近想搞个无线路由,linux下的无线路由/无线AP的实现就是 hostapd 这个软件了。

网上有很多关于 hostapd 的介绍,百度一下就能得到很多相关的信息,这里只是整理我自己配置hostapd的一步骤,过程中也遇到大大小小的坑,方便以后查询避免。

硬件部分

AP的工作模式我们只需要一块无线网卡和一块有线网卡。无线网卡PCI接口或者USB接口的都可以,有线网卡通常集成在主板上或插在主板上百兆/千兆的速率,市面上也很常见。

一般linux系统内核默认就已经支持绝大多数的硬件型号并且工作良好,如果遇到内核无法识别的网卡型号,就需要自己手动安装驱动模块或者手动编译。搞定驱动的方法及相关步骤并不在本文的讨论范围之内。

要使用AP模式无线网卡首先要支持AP模式才行。如何检测无线网卡是否支持AP模式,可以通过下面命令查看:

iw list
[[email protected] ~]# iw list
Wiphy phy0
……省略……
 Supported interface modes:
   * IBSS
   * managed
   * AP                                    #说明无线网卡支持AP模式
   * AP/VLAN
   * monitor
……省略……

我的Intel Corporation Centrino Wireless-N 105 无线网卡支持5种,AP模式也在受支持的范围。

软件部分

我用的是 CentOS 7 的系统,目前已经更新至 CentOS 7.1, 官方实际上并没有提供hostapd的软件包,要使用hostapd这个软件的第一步就是要启用EPEL的源。

关于EPEL源的介绍请自行百度或看看《CentOS 7 安装EPEL源》

1、安装 EPEL 源

yum update                            #先更新系统
yum install epel-release              #安装EPEL源

2、安装 hostapd 软件

我们可能不知道系统提供哪些有关hostapd的软件包,可以先搜索一下有哪些包含hostapd的软件包。

当然如果没有安装并启用EPEL源的话将无法通过 yum search <软件包名字符串> 命令搜索到任何结果。安装并启用EPEL源后使用下面命令搜索。

yum search hostapd
[[email protected] ~]# yum search hostapd
已加载插件:fastestmirror, remove-with-leaves
Loading mirror speeds from cached hostfile
============================ N/S matched: hostapd ============================
hostapd-logwatch.x86_64 : Logwatch scripts for hostapd
hostapd.x86_64 : IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator

从上面可以看到hostapd.x86_64就是我们想要的软件包,使用 yum 进行安装。

yum install hostapd

那么接下来配置使用 hostapd 就是从他的软件包中的文件入手。因此要先查看hostapd软件包所提供文件列表,使用 rpm -ql <软件包名>进行查询。

rpm -ql hostapd
[[email protected] ~]# rpm -ql hostapd
/etc/hostapd
/etc/hostapd/hostapd.conf                        #最主要的配置文件
/etc/sysconfig/hostapd                           
/usr/lib/systemd/system/hostapd.service          #服务脚本
/usr/sbin/hostapd                                #主要的命令
/usr/sbin/hostapd_cli
……省略……
/usr/share/doc/hostapd-2.4/hostapd.conf          #该文件夹下包含相关配置示例一定要看
……省略……
/usr/share/man/man1/hostapd_cli.1.gz             #man手册
/usr/share/man/man8/hostapd.8.gz

3、启动或停止 hostapd 操作

如果需要开机自动启动 hostapd 服务

systemctl enable hostapd.service

手动启动

systemctl start hostapd.service

重启

systemctl restart hostapd.service

停止

systemctl stop hostapd.service

禁止开机自动启动

systemctl disable hostapd.service

4、hostapd AP模式配置

首先要说明的是:默认安装的 hostapd 是没有配置的并且无法启动。

通过上面 rpm -ql hostapd 命令可以看到,hostapd 软件包已经提供了 hostapd.conf 的最全最详细的说明,也就是上面软件包文件列表中的 /usr/share/doc/hostapd-<版本号>/hostapd.conf 这个文件,只不过里面全是英文的。有关 hostapd.conf 的中文说明可以看看《CentOS 7 之 hostapd.conf 配置说明》

按照我们要求 hostapd 正常启动并工作且满足下面几点:

  1. 工作在AP模式
  2. 连接时要求输入密码

工作在AP模式就需要有线网卡和无线网卡进行桥接,这就要求我们首先要建立一个桥接接口。

使用 nmcli 命令来配置:

首先使用 ip link 命令就可以看到哪些本机已经识别是网卡名称:

ip link
[[email protected] ~]# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: p2p1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
    link/ether 00:14:78:66:2e:a7 brd ff:ff:ff:ff:ff:ff
3: wlp2s0: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
    link/ether 90:94:e4:78:49:b5 brd ff:ff:ff:ff:ff:ff

使用 nmcli 建立一个桥接接口 br0 并设置开机自动连接,“br0”可以自由设定,只要保证上下配置一致就可以。为了方便通用,一般桥接接口都是用这种方式命名。

nmcli connection add type bridge autoconnect yes save yes ifname br0

将有线接口 p2p1 加入到桥接接口 br0 中,CentOS 7 中的网络接口默认不再像以前 eth0 eth1 等这种方式命名,而是会加上总线顺序等来进行命名,我这里是的PCI 千兆网卡为 p2p1 有些主板上会类似 enp2s0 这种。

nmcli connection add type bridge-slave autoconnect yes save yes ifname p2p1 master br0

查看接口

[[email protected] ~]# nmcli connection show 
NAME               UUID                                  TYPE            DEVICE
bridge-br0         bc7e63a4-7fee-4419-8f09-e316a78f42e7  bridge          br0
bridge-slave-p2p1  59fc1f91-4e60-4388-ad41-1a4937c8ff25  802-3-ethernet  p2p1

坑提示:实际上到这一步就可以了,这里我们只建立了一个只有一个有线接口的桥,并没有包含无线接口。而事实上 nmcli 命令也并不支持将将无线接口加入网桥接口 br0 无线接口加入网桥就只能通过 hostapd.conf 来进行。

虽然将无线网卡接口加入网桥的命令可以正常执行。

nmcli connection add type bridge-slave autoconnect yes save yes ifname wlp2s0 master br0

但显示网络连接时注意 DEVICE 字段,新添加的无线网卡的桥接的 DEVICE 字段为“--”空。

nmcli connection show
[[email protected] ~]# nmcli connection show 
NAME                      UUID                                  TYPE            DEVICE
bridge-br0                bc7e63a4-7fee-4419-8f09-e316a78f42e7  bridge          br0
bridge-slave-p2p1         59fc1f91-4e60-4388-ad41-1a4937c8ff25  802-3-ethernet  p2p1
bridge-slave-wlp2s0       18880002-44c1-4a84-968a-66670c00322f  802-3-ethernet  --

当激活连接时会提示未找到设备。

nmcli connection up bridge-slave-wlp2s0
[[email protected] ~]# nmcli connection up bridge-slave-wlp2s0 
Error: no device found for connection ‘bridge-slave-wlp2s0‘.

好吧……删掉没有用的无线桥接连接。

nmcli connection delete bridge-slave-wlp2s0

下面继续:

之前有提到过有关 hostapd.conf 的中文说明可以看看《CentOS 7 之 hostapd.conf 配置说明》

这里只是一个最小化的配置:

# /etc/hostapd/hostapd.conf 最小化配置
interface=wlp2s0
bridge=br0                              #无线网卡桥接到 br0 就是通过这个参数来完成
driver=nl80211
ssid=test
hw_mode=g
channel=1
auth_algs=3
ignore_broadcast_ssid=0                 # 是否广播,0 广播
wpa=3
wpa_passphrase=12345678                 # 无线连接密码

坑提示:我在上面的提示中提到过,之前我们只建立了一个只有一个有线接口的桥。请注意上面 bridge=br0 选项,这个非常重要,如果要运行AP模式就一定要指定要桥接的网桥接口。bridge=br0 选项说明将无线网卡接口 wlp2s0 加入到网桥 br0 ,无线网卡接口由第一行 interface=wlp2s0 选项指定。这样 br0 才是一个包含有线接口 p2p1 和一个无线接口 wlp2s0 的网桥。

其他命令方式进行配置:

虽然还有其他方式建立网桥的命令,但是如果是在 CentOS 7 下面,最简单的还是使用 nmcli 命令,因为 CentOS 7 默认提供 NeteorkManager 这个软件,使用 nmcli 命令配置好连接后一直有效。但 nmcli 也并不是万能的,前面有提到过,我目前遇到了两个问题:1. nmcli 不支持将无线网卡加入到网桥;2. 到目前为止 nmcli 不支持设置无线网卡静态IP地址(这个在 hostapd 配置路由模式会遇到)。

关于 CentOS 7 桥接网络配置可以看看《<<<<<<这篇文章>>>>>>>》。

启动 hostapd 服务

到此我们已经配置了网桥,网桥将自动从路由器获取IP地址、网关及DNS等设置,也就是本机将自动就能上网。hostapd 也配置好了,SSID为test,密码12345678。因为是桥接接口,所以当无线客户端连接成功后也将自动从路由器那获取IP地址、网关及DNS等设置。

现在是时候启动 hostapd 服务了。

systemctl start hostapd.service

而结果确实启动失败,查看服务状态:

systemctl status hostapd.service
[[email protected] ~]# systemctl status hostapd          
● hostapd.service - Hostapd IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator
   Loaded: loaded (/etc/systemd/system/hostapd.service; enabled)
   Active: failed (Result: exit-code) since 一 2015-09-21 20:19:49 CST; 3s ago
  Process: 6897 ExecStart=/usr/sbin/hostapd /etc/hostapd/hostapd.conf -P /run/hostapd.pid $OTHER_ARGS (code=exited, status=1/FAILURE)
 Main PID: 6897 (code=exited, status=1/FAILURE)
9月 21 20:19:49 server hostapd[6897]: wlp2s0: interface state HT_SCAN->DISABLED
9月 21 20:19:49 server hostapd[6897]: wlp2s0: AP-DISABLED
9月 21 20:19:49 server hostapd[6897]: wlp2s0: Unable to setup interface.
9月 21 20:19:49 server hostapd[6897]: wlp2s0: interface state DISABLED->DISABLED
9月 21 20:19:49 server hostapd[6897]: wlp2s0: AP-DISABLED
9月 21 20:19:49 server hostapd[6897]: hostapd_free_hapd_data: Interface wlp2s0 wasn‘t started
9月 21 20:19:49 server hostapd[6897]: nl80211: deinit ifname=wlp2s0 disabled_11b_rates=0
9月 21 20:19:49 server systemd[1]: hostapd.service: main process exited, code=exited, status=1/FAILURE
9月 21 20:19:49 server systemd[1]: Unit hostapd.service entered failed state.
9月 21 20:19:49 server systemd[1]: hostapd.service failed.

上面实际上看不出任何问题的具体细节。

5、hostapd 调试

先看看 man hostapd 的手册了解一下如何进行调试。

man hostapd
[[email protected] ~]# man hostapd
……省略……
hostapd [-hdBKtv] [-P <PID file>] <configuration file(s)>
       -h     Show usage.
       -d     Show more debug messages.             #调试选项
       -dd    Show even more debug messages.        #调试选项详细输出
       -B     Run daemon in the background.
       -P <PID file>    Path to PID file.
       -K     Include key data in debug messages.
       -t     Include timestamps in some debug messages.
       -v     Show hostapd version.
……省略……

看样子很简单大致就是上面的内容。那接下来以调试模式运行。

/usr/sbin/hostapd /etc/hostapd/hostapd.conf -d
[[email protected] ~]# /usr/sbin/hostapd /etc/hostapd/hostapd.conf -d
……省略……
Could not set interface wlp2s0 flags (UP): Operation not possible due to RF-kill
nl80211: Failed to set interface up after switching mode
……省略……

坑提示:“Operation not possible due to RF-kill”,那么 RF-kill 又是什么呢?关于 RF-kill 可以看看这篇《rfkill 无线设备软开关》

好吧,先安装 rfkill 软件包。

yum install rfkill

看看无线网卡是否被关掉了

rfkill list
[[email protected] ~]# rfkill list
0: phy0: Wireless LAN
        Soft blocked: yes
        Hard blocked: no

解锁

rfkill unblock wlan
[[email protected] ~]# rfkill unblock wlan

再次运行调试模式

/usr/sbin/hostapd /etc/hostapd/hostapd.conf -d

OK一切正常,那么就可以结束调试以正常模式启动服务了

systemctl start hostapd.service

搞定。

6、配置小结

在 hostapd AP模式的配置中实际可能会遇到以及需要解决的问题就是网桥的配置,而且有点奇葩。

时间: 2024-11-05 18:58:53

CentOS 7 之 hostapd AP模式配置的相关文章

CentOS 7 之 hostapd 路由模式配置

这篇是 linux 下使用 hostapd 实现无线接入点 AP 模式的另一种实现方式:hostapd 路由模式配置. 对于软硬件的基本配置及 hostapd 安装在<CentOS 7 之 hostapd AP模式配置>的前半部分内容中有说明,可以先看看那篇,再看本文. hostapd 的AP模式配置需要的有线网卡和无线网卡进行桥接,那路由模式配置主要就是将无线网卡的数据通过有线网卡进行伪装.转发两个方面,也就不再需要将有线和无线网卡进行桥接. 配置这种路由模式就类似一台普通的无线路由器,有线

orangepi one AP模式配置

前两天买了一块orangepi one开发板,目的是做个局域网共享目录,具体共享协议用samba:这块板子有两个网卡,一个有线一个无线:有线主要用来ssh登陆调试,修改配置. 首先下载armbian的镜像,烧写到SD卡中,上电用SD卡启动板子,用网线直连路由器,这样便可知道DHCP获取到的IP,之后便可用ssh登陆板子做一些配置了:armbian初始化用户名和密码为root,1234. 要顺利的配置下去,要确保路由器能连上网:以下进入正题. 一.软件安装: apt-get install hos

树莓派配置AP模式

所需硬件:树莓派.无线网卡 1.查看无线网卡是否被识别 [email protected] ~ $ sudo lsusb Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. Bus

Linux中USB无线网卡实现AP模式(hostapd交叉编译环境下)

以手机上WIFI热点为例,有4种常用的"认证/加密" a. open b. WEP c. WPA(TKIP) d. WPA2(AES) 需要用到的源代码有: hostapd-2.0.tar.gz,下载地址:点击这里! openssl-1.0.1d.tar.gz,下载地址:点击这里! dhcp-4.2.5-P1.tar.gz,下载地址:点击这里! 首先交叉编译dhcp-4.2.5-P1.tar.gz tar xzf dhcp-4.2.5-P1.tar.gz cd dhcp-4.2.5-P

使用共享网卡的NAT模式配置VMware中的CentOS的上网功能

昨天写了一篇文章总结了前两天折腾VMware 10中的CentOS上网的问题,结果留下一下小瑕疵,就是视频教程中通过共享网卡使用NAT模式配置虚拟机的方法.今天在结合昨天的基础上终于弄明白了这个问题. 这个问题归根结底源于VMware 10的网络设置上.首先还是在Windows7的“网络”——“更改适配器设置”中共享网卡给vmnet8,会出一个提示框,记下里面出现的ip,我这里面是192.168.137.1,然后打开vmnet那块网卡的ipv4设置,如下图,其中的ip,子网掩码,默认网关通通不改

licheepi zero 开启AP模式

记录一下licheepi zero如何开启AP模式 首先联网...能ping通百度  ping www.baidu.com 接下来同步源索引,apt-get update,等待完成 完成后,apt-get install hostapd  如果已经下载了就跳过吧 接下来修改vi /etc/default/hostapd 下面其中一行 #DAEMON_CONF= 修改为  DAEMON_CONF="/etc/default/hostapd.conf"  ,保存 下一步配置hostapd

Cisco UCS环境中CentOS带Vlan ID的网络配置指南

最近新进了一批Cisco UCS C系列服务器,经过两周的部署安装终于可以进行测试了.本文简要介绍一下cisco UCS服务器中操作系统(CentOS 6)的网络配置.可以简单的认为,本文描述的是一台物理服务器用网线将网卡连接到上层交换机的trunk模式的端口中的网络配置. 物理连接拓扑图如下所示. 顶层采用Cisco C3560物理交换机,为整个机群提供Internet连接.Vlan划分为两个,一个管理Vlan一个应用Vlan,Vlan ID分别为4和31,上联端口全部设置为trunk模式.

Android KitKat 4.4 Wifi移植之AP模式与网络共享功能调试记录

Tethering技术在移动平台上已经运用的越来越广泛了,它可以把移动设备当做一个接入点,其它的设备可以通过Wi-Fi,USB或是Bluetooth等方式连接到此移动设备.在Android中可以将Wifi设为AP模式作为WLAN接入点,从而与其他设备共享Android的互联网连接.Android成为接入点后,就无法通过WLAN连接使用Android的应用程序访问互联网,但可以通过其他方式如以太网或移动网络访问互联网.此时以太网或移动网络在网络共享(Tethering)中是作为upstream的角

CentOS 7 学习(三)配置Tomcat集群

所谓集群,就是把多台服务器集合起来,对外提供一个接口访问,对用户来说完全透明,常用的办法就是前端放一个服务器,将用户请求分发到不同的服务器,大致有以下几种方案 1)采取DNS轮询:将用户的连接解析到不同的服务器上,这会产生一个问题,如果一个服务器宕掉,DNS无法及时更新,就会出现问题 2)反向代理服务器:将用户的连接转发到不同的服务器上,这有两种方式,一个是修改HTTP头,让用户的连接转到固定的服务器,以后不再和代理服务器交互,这会修改用户浏览器里的地址,可能会不怎么友好:如果不修改地址,用户总