CentOS7 hostapd无AP模式实现详解
时间:2026-06-23 07:42
本文介绍如何在 Linux 系统中利用 hostapd 实现无线接入点(AP)的路由模式配置,这是一种不同于桥接模式的玩法。 关于软硬件基本配置及 hostapd 的安装,请参考《CentOS 7 之 hostapd AP 模式配置》前半部分。简单来说,传统的 AP 模式需要将有线网卡与无线网卡进行
本文介绍如何在 Linux 系统中利用 hostapd 实现无线接入点(AP)的路由模式配置,这是一种不同于桥接模式的玩法。
关于软硬件基本配置及 hostapd 的安装,请参考《CentOS 7 之 hostapd AP 模式配置》前半部分。简单来说,传统的 AP 模式需要将有线网卡与无线网卡进行桥接,而路由模式的核心原理是通过伪装和转发,将无线网卡的数据经有线网卡传输,从而省去桥接步骤。
路由模式配置起来类似于一台典型的无线路由器:有线网口作为 WAN 口连接上游网络,无线网卡发射 Wi-Fi 信号供手机、笔记本等设备接入。区别在于此模式没有四个 LAN 口,无法直接通过网线连接台式机。不过,Linux 网络功能强大,可以通过添加交换机等设备实现有线接入,只是配置更复杂。本文将将其视为一台没有 LAN 口的路由器进行配置。
hostapd.conf 路由模式配置
先来看一个最小化的配置:
```
# /etc/hostapd/hostapd.conf 最小化配置
interface=wlp2s0
# bridge=br0 # 不再需要桥接,把这行注释掉即可
driver=nl80211
ssid=test
hw_mode=g
channel=1
auth_algs=3
ignore_broadcast_ssid=0 # 是否广播,0 为广播
wpa=3
wpa_passphrase=12345678 # 无线连接密码
```
这个配置跟之前 AP 模式的配置文件基本一样,唯一的区别就是把 `bridge=br0` 这一行注释掉。
有线接口配置
首先需确保有线接口配置正确且能正常上网。最简便的方式是从路由器自动获取 IP 地址、网关和 DNS。若无路由器,则需手动配置上网方式(如 PPPoE 拨号、静态 IP 等),动态获取最为省心。
无线接口设置
### 使用 ip addr add 命令
通过 `ip addr add` 命令可为无线网卡分配 IP,例如 `172.16.0.1/24` 或私有地址。注意:无线网卡 IP 不能与有线网卡处于同一网段(如有线网卡通常获取的是 `192.168.1.0/24` 网段)。
```
ip addr add 172.16.0.1/24 dev wlp2s0
```
但这样设置的话,重启之后就会失效。
### 坑提示:关于 NetworkManager
注意:CentOS 7 默认使用 NetworkManager 管理网络,但其 `nmcli` 命令不支持为无线网卡设置静态 IP。因此,要么用 `ip addr add` 临时配置,要么在 `/etc/sysconfig/network-scripts/` 下新建传统配置文件。
### 使用网络配置文件(永久保存)
如果想保存设置,可以新建一个文件:
```
vi /etc/sysconfig/network-scripts/ifcfg-static-wlp2s0
```
内容如下(注释掉的部分不需要的可以删掉,但核心参数要保留):
```
DEVICE=wlp2s0 # 指定无线网卡的接口
ONBOOT=yes # 开机就进行设置
IPADDR=172.16.0.1 # 指定IP地址
PREFIX=24 # 指定掩码长度
```
保存后需停用并禁用 NetworkManager.service,否则重启后可能导致 network.service 无法正常启动。
```
systemctl disable NetworkManager.service
systemctl stop NetworkManager.service
```
配置生效后,可以重启 network.service 服务,或者直接重启系统来验证:
```
systemctl restart network.service
```
启用转发和配置接口伪装
启用 IP 转发
先临时启用一下:
```
sysctl -w net.ipv4.ip_forward=1
```
如果想重启后还能保持设置,可以新建一个配置文件 `/etc/sysctl.d/ip_forward.conf`,内容就一行:
```
net.ipv4.ip_forward = 1
```
系统重启后会自动加载 `/etc/sysctl.d/` 文件夹下的配置。
配置接口伪装
CentOS 7 下,firewalld 和 iptables 均可实现接口伪装,但两者冲突,只能启用其一。默认启用的是 firewalld.service。
使用 firewalld 配置接口伪装
如果有图形界面,操作会简单很多。这里只用命令行方式。
首先,确保 firewalld.service 已启动:
```
systemctl start firewalld.service
```
将无线接口加入到 trust 区域(默认所有接口属于 public 区域,限制比较严格,会导致无线客户端无法连接):
```
firewall-cmd --zone=trusted --add-interface=wlp2s0 --permanent
```
对有线上网接口所在的区域启用伪装(默认有线接口属于 public 区域):
```
firewall-cmd --zone=public --add-masquerade --permanent
```
最后重启 firewalld 服务:
```
systemctl restart firewalld.service
```
使用 iptables 配置接口伪装
如果习惯用 iptables,需要先安装 `iptables-services` 这个包,里面包含 iptables.service 和 ip6tables.service 两个服务。
先停掉并禁用 firewalld.service:
```
systemctl stop firewalld.service
systemctl disable firewalld.service
```
再启用 iptables.service(目前主要用 IPv4,所以只用 iptables.service 就行):
```
systemctl enable iptables.service
systemctl start iptables.service
```
然后配置接口伪装:
```
iptables -t nat -A POSTROUTING -o p2p1 -j MASQUERADE
```
一般来说,上面这一条命令就够了。如果防火墙设置比较严格,还需要添加允许从无线网卡转发的规则:
```
iptables -t filter -A FORWARD -i wlp2s0 -j ACCEPT
```
dnsmasq 配置:DHCP 与 DNS 服务
dnsmasq 负责为无线客户端分配 IP 地址并提供 DNS 解析服务。
安装 dnsmasq
如果没有安装,先安装:
```
yum install dnsmasq
```
设置开机自启动:
```
systemctl enable dnsmasq.service
```
dnsmasq.conf 配置
编辑 `/etc/dnsmasq.conf`:
```
# 指定接口,可以附加 lo 接口,也可以用 '*' 通配符
interface=wlp2s0
# 绑定接口
bind-interfaces
# DHCP 地址池:从 172.16.0.100 到 172.16.0.200,租约时间 1 小时
dhcp-range=172.16.0.100,172.16.0.200,255.255.255.0,1h
```
启动 dnsmasq 前需确保无线网卡已正确设置 IP。dnsmasq 会自动将无线网卡的地址(`172.16.0.1`)作为客户端的网关和 DNS 服务器。
```
systemctl start dnsmasq.service
```
最后,重新启动 hostapd 服务,让所有配置生效:
```
systemctl restart hostapd.service
```
来源:https://www.jb51.net/os/RedHat/528515.html
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。