# Linux 无线热点搭建教程(2.4GHz / 5GHz 双方案)
本教程提供两种创建 Wi‑Fi 热点的方法:
- **2.4GHz 频段**:使用 `nmcli`(NetworkManager 内置功能),配置简单,无需额外软件。
- **5GHz 频段**:使用 `hostapd` + `dnsmasq`,需要手动配置,并**必须包含国家码**(`country_code`)。同时提供修复无线监管数据库(`regulatory.db`)签名问题的步骤,确保 5GHz 信道可用。
两种方案均包含 NAT 转发,让连接热点的设备通过有线网卡上网。
---
## 1. 准备:确定网卡名称
首先查看系统中的无线网卡名称:
`bash
iw dev
输出示例:
phy#0
Interface wlp1s0
ifindex 3
wdev 0x1
addr 90:0f:0c:11:e3:45
type managed
其中 wlp1s0 就是无线网卡名称(本文后续以 wlp1s0 为例,请替换为你的实际名称)。
同时,确认有线网卡名称(用于 NAT 转发),通常为 eno1、eth0 等,可通过 ip link show 查看。
2. 2.4GHz 热点(使用 nmcli,推荐)
NetworkManager 自带热点功能,一条命令即可创建并自动配置 DHCP。
2.1 创建热点
sudo nmcli dev wifi hotspot ifname wlp1s0 ssid MyHotspot_2G password "YourPassword"
ifname:无线网卡名称
ssid:热点名称
password:至少 8 位(省略则创建开放网络)
执行后,NetworkManager 会创建一个名为 Hotspot 的连接配置,并立即启动热点。
2.2 修改 IP 地址段(可选)
默认 IP 段为 10.42.0.0/24,网关为 10.42.0.1。如需改为其他网段(例如 192.168.5.0/24):
sudo nmcli connection modify Hotspot ipv4.addresses 192.168.5.1/24
sudo nmcli connection modify Hotspot ipv4.gateway 192.168.5.1
sudo nmcli connection modify Hotspot ipv4.dhcp-range "192.168.5.10,192.168.5.100,24h"
重启热点使配置生效:
sudo nmcli connection down Hotspot && sudo nmcli connection up Hotspot
2.3 设置开机自启
sudo nmcli connection modify Hotspot autoconnect yes
以后每次开机热点会自动启动。
3. 5GHz 热点(使用 hostapd + dnsmasq)
由于 nmcli 对 5GHz 支持有限,我们使用 hostapd(AP 管理)和 dnsmasq(DHCP 服务)手动搭建。
3.1 安装软件包
sudo apt update
sudo apt install hostapd dnsmasq
dnsmasq 通常已默认安装,若已存在则无需重复安装。
3.2 修复无线监管数据库(regulatory.db)签名问题(重要)
如果内核日志(dmesg | grep regulatory)出现 loaded regulatory.db is malformed or signature is missing/invalid,则 5GHz 信道可能被限制。需替换正确的数据库文件。
3.2.1 检查当前签名者
openssl pkcs7 -inform DER -in /lib/firmware/regulatory.db.p7s -print_certs -text -noout
若输出显示 Issuer: CN=benh@debian.org 等,说明该文件由 Debian 签名,而内核加载的公钥为 sforshee 和 wens(见 dmesg | grep X.509),可能导致验证失败。
3.2.2 下载官方最新数据库(由 sforshee/wens 签名)
cd /tmp
wget https://git.kernel.org/pub/scm/linux/kernel/git/sforshee/wireless-regdb.git/plain/regulatory.db
wget https://git.kernel.org/pub/scm/linux/kernel/git/sforshee/wireless-regdb.git/plain/regulatory.db.p7s
3.2.3 替换系统文件并防止修改
sudo cp regulatory.db /lib/firmware/regulatory.db-debian
sudo cp regulatory.db.p7s /lib/firmware/regulatory.db.p7s-debian
sudo chattr +i /lib/firmware/regulatory.db*
3.2.4 更新 alternatives(如有)
sudo update-alternatives --remove-all regulatory.db 2>/dev/null
sudo update-alternatives --install /lib/firmware/regulatory.db regulatory.db /lib/firmware/regulatory.db 100
sudo update-alternatives --install /lib/firmware/regulatory.db.p7s regulatory.db.p7s /lib/firmware/regulatory.db.p7s 100
3.2.5 重启生效
sudo reboot
重启后检查:sudo dmesg | grep regulatory 应无错误。
3.3 安装和配置 hostapd(必须包含国家码)
安装hostapd
sudo apt install hostapd
创建配置文件 /etc/hostapd/hostapd.conf:
sudo nano /etc/hostapd/hostapd.conf
内容如下(使用 5GHz 非 DFS 信道,我使用149,并必须设置 country_code):
interface=wlp1s0
ssid=MyHotspot_5G
hw_mode=a
country_code=CN # 必须设置,否则可能导致信道不可用
ieee80211d=1 # 启用国家信息通告
wpa=2
wpa_passphrase=YourPassword
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
auth_algs=1
# 管理帧保护设为可选,提高兼容性
ieee80211w=2
group_cipher=CCMP
ap_isolate=0
# 选择一个非 DFS 信道(避免雷达干扰,兼容性好)
channel=149 # 可选 36, 40, 44, 48, 149, 153, 157, 161
ieee80211ac=1
ieee80211d=1
ieee80211ax=1
vht_oper_chwidth=2
ht_capab=[HT40+][SHORT-GI-20][SHORT-GI-40][MAX-AMSDU-7935]
vht_capab=[MAX-A-MPDU-LEN-EXP3][VHT160][SHORT-GI-80][SHORT-GI-160][SU-BEAMFORMER][SU-BEAMFORMEE]
若信道 36 不可用,可尝试 40、44、48、149、153、157、161 等,但请确保这些信道在国家允许范围内。
如需让 hostapd 自动读取此配置,编辑 /etc/default/hostapd:
sudo nano /etc/default/hostapd
取消注释并设置:
DAEMON_CONF="/etc/hostapd/hostapd.conf"
3.4 为无线网卡设置静态 IP(使用 systemd-networkd)
hostapd 不会自动分配 IP,我们需要为 wlp1s0 设置一个固定 IP(例如 192.168.4.1/24)作为网关。
推荐使用 systemd-networkd 实现持久化配置。
3.4.1 创建 network 配置文件
创建 /etc/systemd/network/20-wlan.network:
sudo nano /etc/systemd/network/20-wlan.network
写入(注意 Name 必须匹配你的无线网卡名称):
[Match]
Name=wlp1s0
[Network]
Address=192.168.4.1/24
3.4.2 启用 systemd-networkd
sudo systemctl enable systemd-networkd
sudo systemctl start systemd-networkd
3.4.3 防止 NetworkManager 管理该接口(避免冲突)
在 /etc/NetworkManager/NetworkManager.conf 的 [keyfile] 段中添加:
unmanaged-devices=interface-name:wlp1s0
然后重启 NetworkManager:
sudo systemctl restart NetworkManager
3.5 配置 dnsmasq(仅 DHCP,不占用 DNS 端口)
dnsmasq 默认已安装。备份原配置并创建新配置:
sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.bak
sudo nano /etc/dnsmasq.conf
写入:
# 只监听无线接口
interface=wlp1s0
bind-interfaces
# 禁用 DNS 功能(避免与系统 DNS 冲突)
port=0
# DHCP 地址池(192.168.4.2 ~ 192.168.4.100,租期 24h)
dhcp-range=192.168.4.2,192.168.4.100,255.255.255.0,24h
# 网关和 DNS
dhcp-option=3,192.168.4.1
dhcp-option=6,8.8.8.8,114.114.114.114
# 日志
log-queries
log-facility=/var/log/dnsmasq.log
启动并设置开机自启:
sudo systemctl enable dnsmasq
sudo systemctl start dnsmasq
3.6 启动 hostapd
sudo systemctl enable hostapd
sudo systemctl start hostapd
检查状态:
sudo systemctl status hostapd
若启动失败,可运行调试模式查看具体错误:
sudo hostapd -dd /etc/hostapd/hostapd.conf
4. NAT 转发(两种方案通用)
让热点设备通过有线网卡(如 eno1)访问互联网。
4.1 开启 IP 转发
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
4.2 添加 iptables 规则
sudo iptables -t nat -A POSTROUTING -o eno1 -j MASQUERADE
sudo iptables -A FORWARD -i eno1 -o wlp1s0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlp1s0 -o eno1 -j ACCEPT
4.3 保存规则(持久化)
安装 iptables-persistent(若未安装):
sudo apt install iptables-persistent -y
sudo netfilter-persistent save
对于 Debian 等系统,也可使用:
sudo iptables-save > /etc/iptables/rules.v4
5. 测试与验证
- 用手机搜索对应 SSID,输入密码连接。
- 查看 IP:连接后应获取到对应网段的 IP(2.4G 为
10.42.0.x 或自定义,5G 为 192.168.4.x)。
- 测试是否能上网(如打开浏览器访问任意网站)。
6. 故障排查
| 现象 |
可能原因 |
解决办法 |
| 2.4G 热点创建失败 |
网卡不支持 AP 模式 |
检查 iw list | grep AP |
| 5G 热点启动失败,日志提示“channel not found” |
所选信道不被驱动或监管域限制 |
确保已替换 regulatory.db,并在 hostapd.conf 中正确设置 country_code;尝试其他非 DFS 信道(如 36、149) |
| 5G 热点启动失败,日志提示“country_code not set” |
未配置国家码 |
在 hostapd.conf 中添加 country_code=CN(替换为你所在国家) |
| 能连接但无法上网 |
NAT 规则未生效或 IP 转发未开启 |
检查 sysctl net.ipv4.ip_forward 和 iptables 规则 |
| 重启后 5G 热点未启动 |
hostapd/dnsmasq 未启用自启,或 systemd-networkd 未配置 |
确保对应服务 enable,并检查 network 配置文件 |
| DHCP 未分配 IP |
dnsmasq 未正确绑定接口 |
检查 interface= 是否匹配无线网卡名称,查看日志 /var/log/dnsmasq.log |
附:常用命令
- 查看无线网卡信息:
iw dev
- 查看当前 Wi-Fi 连接:
nmcli connection show
- 查看已连接客户端(2.4G/5G 通用):
sudo iw dev wlp1s0 station dump
- 手动停止热点(2.4G):
sudo nmcli connection down Hotspot
- 手动停止 5G 服务:
sudo systemctl stop hostapd dnsmasq
现在你可以根据需求选择 2.4GHz 或 5GHz 方案,搭建自己的 Wi‑Fi 热点!
注意如果更改了regdb会导致系统更新wireless-regdb出错,你可以忽略相关错误和更新,如需重新允许更新,请使用:sudo chattr -i /lib/firmware/regulatory.db取消只读后更新