做网络调试和应急组网的兄弟,肯定都遇到过这种场景:手头没有路由器,只有一台装了 Kali Linux 的笔记本,却需要临时开一个 WiFi 热点给手机、平板或者其他设备用。这个需求听起来简单,实际上坑比想象中多——网卡不支持 AP 模式、NetworkManager 状态不对、热点开起来本机反而断网、手机连上了却上不了网,随便一个都能卡半天。
其实在 Kali 里开 WiFi 热点,本质就是让无线网卡临时扮演路由器的角色:广播 SSID、给接入设备分配 IP、再把数据包转发到上行网络。这篇文章是我反复实测后整理出的完整记录,把三条主流方案的完整流程、代码、配置和踩过的每一个坑都写清楚了。排版也按可打印的标准来,涉及的命令和配置都拆成了清单格式,需要的话直接打印出来对着做就行。适合刚接触 Kali 的新手,也适合需要在现场临时搭建测试网络的工程师参考。
1. 动手之前,先把热点的原理和方案选型搞明白
网上关于 Kali 开热点的教程一大把,但大部分都只丢给你几条命令,跑通了算运气,跑不通就没人管了。我建议动手之前先花几分钟理解原理,后面的排查会省下大量时间。
1.1 开热点,到底在做什么
WiFi 热点本质上是一个微型无线接入点(Access Point,AP)。普通无线网卡默认工作在 STA 模式,也就是“去连别人的路由器”的角色;而 AP 模式则反过来,让无线网卡自己变成一个小基站,手机、平板作为客户端接入到这张网卡上。
一台设备要变成可用的热点,至少需要完成三件事:
第一,无线网卡以 AP 模式广播一个 SSID,配好加密方式和密码。第二,通过 DHCP 服务给接入设备分配 IP 地址,让它们处于同一个局域网。第三,开启 IP 转发和 NAT,把来自无线客户端的数据包转发到上行网络(通常是有线网口或者蜂窝网络),否则客户端连上了热点也上不了互联网。
你可以把它理解成:电脑的一张无线网卡变成了一座小桥,手机从桥上走过去,再经有线网卡这条“大路”访问外部网络。理解了这个模型,后面配置 hostapd 和 dnsmasq 的时候,你就知道每一条配置在干什么了。
1.2 三条路线对比:nmcli、create_ap、hostapd+dnsmasq
在 Kali 里开热点,主流的做法有三条,各有各的适用场景:
| 方案 | 依赖 | 上手难度 | 灵活性 | 建议场景 |
|---|---|---|---|---|
| nmcli 自带命令 | NetworkManager | 最低,一条命令搞定 | 一般,可调参数有限 | 临时应急、快速分享网络 |
| create_ap 脚本 | hostapd + dnsmasq + iptables | 低,封装完善 | 较高,支持常见参数 | 经常开热点、需要自动化 |
| hostapd + dnsmasq 手动 | 两个独立组件 | 高,需理解原理 | 极高,完全可控 | 深入学习、集成到自研脚本 |
我个人的选择习惯是这样的:如果只是临时开个热点给手机用几分钟,直接用 nmcli,一条命令解决问题,不装任何额外组件。如果需要在现场长时间开热点、或者要带着多台设备做测试,用 create_ap,它的脚本把 hostapd、dnsmasq、iptables 的前后依赖都处理好了,还能后台运行和开机自启。如果想彻底搞懂热点的工作原理,或者要把热点功能集成进自己的工具脚本,那就手动配置 hostapd + dnsmasq,虽然繁琐,但每一步都是可控的。
需要特别提醒:千万别在没搞清楚网卡是否支持 AP 模式之前就盲目装包、敲命令,这是新手最容易踩的坑。
1.3 硬件的坑,永远排在第一位
Kali 开热点这件事,90% 的失败案例都出在硬件支持上。不是所有无线网卡都能进入 AP 模式,很多笔记本内置网卡(尤其是某些较新的型号)在 Linux 下驱动支持不完整,或者芯片本身就不允许 AP 模式,你再怎么配置都是白费。
动手前先跑几条命令确认:
iw dev这条命令会列出当前系统的无线接口。如果这里什么都看不到,说明网卡驱动没加载成功,后面的一切都无从谈起。
iw list | grep -A 20 "Supported interface modes"关键是看输出列表里有没有AP这一行。如果列表里只有managed和monitor,没有AP,那这张网卡基本就告别热点功能了。实测下来,很多 Intel 笔记本内置网卡在 Linux 下就不太愿意配合,反而是外置 USB 无线网卡在 AP 模式上表现更稳定,常见的 RTL8812AU、AR9271、MT7612U 等芯片都有不错的支持。
另外别忘了检查无线开关状态:
rfkill list如果显示blocked: yes,说明无线功能被软开关禁用了,执行sudo rfkill unblock all解锁再继续。
还有一点要提前想清楚:一张无线网卡同一时刻只能工作在一种模式下。如果你想用笔记本自带的无线网卡去连 WiFi,同时又想用同一张网卡开热点,那不行。标准的做法是:笔记本通过有线网卡上网,用无线网卡开热点共享给其他设备。
2. 环境准备:这10分钟决定了你后面顺不顺
环境准备是很多人跳过的步骤,但恰恰是最值得花时间的。我建议按下面的顺序来一遍,确保系统处于可用状态。
2.1 更新系统与安装依赖包
Kali 是基于 Debian 的滚动发行版,软件源和包版本变化比较快,直接装包之前先把系统索引更新一下:
sudo apt update sudo apt upgrade -y如果你的 Kali 默认源连接特别慢,可以换成国内镜像源,比如阿里云镜像。编辑/etc/apt/sources.list,把 Kali 官方源替换成镜像站,然后再次sudo apt update。换源这件事单独说很简单,但很多新手照着网上教程改完后发现下载报错,多半是没执行更新命令,或者镜像源地址写错了。
接着安装核心组件:
sudo apt install -y hostapd dnsmasq git iwhostapd 负责让无线网卡变成 AP,dnsmasq 负责 DHCP 和 DNS 转发,iw 用来查看无线网卡信息,git 是为了后面拉取 create_ap 脚本。这些包即使你最后只用 nmcli,也建议装上,以备不时之需。
2.2 无线网卡驱动与开关检查
这一节要和 1.3 结合起来看,但除了查看是否支持 AP,还要确认驱动和固件是否正常加载。建议执行:
dmesg | grep -i firmware dmesg | grep -i wireless如果看到 firmware 加载失败或者无线网卡初始化报错,说明驱动有问题,需要先解决驱动再继续。常见的情况是网卡芯片比较新,内核自带的驱动还不完善,可以考虑升级内核,或者寻找对应芯片的开源驱动源码自行编译。
同时建议确认一下系统识别到的网卡硬件型号:
lspci | grep -i network lsusb | grep -i wireless笔记本内置网卡通常在lspci里能看到,USB 外置网卡在lsusb里能看到。把型号记下来,万一后面遇到问题,去查这个型号的 Linux 兼容性会非常有针对性。
2.3 确保 NetworkManager 处于可控状态
Kali 桌面版默认使用 NetworkManager(简称 NM)管理网络连接。热词里经常有人问networkmanager is not running,因为 Kali 安装后 NM 服务可能没有启动,或者在某些精简版里压根没有启用。
先看状态:
systemctl status NetworkManager如果显示inactive (dead),执行:
sudo systemctl enable --now NetworkManager如果显示active (running),那就没问题。这里有个关键点:如果你打算用 nmcli 或 create_ap 方案,NetworkManager 必须正常运行;但如果你打算手动 hostapd + dnsmasq,反而需要让 NetworkManager 不要管理那张无线网卡,否则两个网络服务会抢网卡,导致热点起不来。具体操作我会在第 3 章详细说。
3. 三种实操方案完整流程(含全部代码)
这一章是正文的核心,我会把三条方案的完整流程都写出来,命令和配置可以直接复制。
3.1 方案一:用 nmcli 开热点,一分钟搞定
如果只是临时开热点,nmcli 是最快的路径。前提是 NetworkManager 服务正在运行,且无线网卡支持 AP 模式。
一条命令搞定:
sudo nmcli dev wifi hotspot ifname wlan0 ssid KaliHotspot password "kali12345"参数说明:
ifname wlan0:指定用哪张无线网卡,如果不加这个参数,NM 会自动选择一张。ssid KaliHotspot:热点的名称,按你的需求改。password "kali12345":热点密码,要求至少 8 位。
执行成功后可以看到Connection activated之类的提示,这时候手机就能搜到KaliHotspot这个热点了。想查看当前热点的连接配置:
nmcli connection showNM 会自动创建一个名为Hotspot的连接配置。想改密码或 SSID,用nmcli connection modify修改这个配置。停止热点的命令是:
sudo nmcli connection down Hotspot实测下来,nmcli 方案在大多数支持 AP 的网卡上都比较稳,而且不需要额外安装 hostapd 和 dnsmasq。缺点是想自定义网关、DNS、IP 地址段就比较麻烦,适合应急,不适合深度定制。
3.2 方案二:用 create_ap 脚本,功能最均衡
create_ap 是 GitHub 上一个非常经典的开源脚本,它把 hostapd、dnsmasq、iptables 这些底层组件封装好,一条命令就能开热点,支持桥接、NAT、后台运行、开机自启。
安装:
git clone https://github.com/oblique/create_ap.git cd create_ap sudo make install安装依赖:
sudo apt install -y hostapd dnsmasq iptables基础用法:
sudo create_ap wlan0 eth0 KaliHotspot kali12345这里两个网卡参数的含义:第一个wlan0是提供热点的无线网卡,第二个eth0是提供上行网络的接口。如果你的上行网络是别的网卡,比如enp3s0或者 USB 网卡usb0,换成对应的接口名即可。
想让 create_ap 在后台运行:
sudo create_ap --daemon wlan0 eth0 KaliHotspot kali12345停止热点:
sudo create_ap --stop wlan0开机自启需要先创建一个配置文件,告诉脚本每次开机用哪张网卡、开什么热点。编辑/etc/create_ap.conf:
WIFI_IFACE=wlan0 INTERNET_IFACE=eth0 SSID=KaliHotspot PASSPHRASE=kali12345然后启用服务:
sudo systemctl enable create_ap sudo systemctl start create_apcreate_ap 最大的优势是把 hostapd 和 dnsmasq 的协调工作都处理好了,基本一条命令就能跑通。它的日志输出也很清晰,调试的时候可以直接看前台输出,比手动配置好排查得多。
3.3 方案三:手动 hostapd + dnsmasq,完全可控
如果你想把每一步都掌握在自己手里,或者想在无人值守的脚本里集成热点功能,手动配置 hostapd + dnsmasq 是最灵活也是最能学到东西的路线。
第一步,把无线网卡从 NetworkManager 的接管中释放出来。NetworkManager 默认会占着无线网卡,如果不放手,hostapd 启动时会报“设备忙”或“操作不支持”:
sudo nmcli device set wlan0 managed no第二步,编辑 hostapd 配置文件。我用的是/etc/hostapd/hostapd.conf:
interface=wlan0 driver=nl80211 ssid=KaliHotspot hw_mode=g channel=6 wpa=2 wpa_passphrase=kali12345 wpa_key_mgmt=WPA-PSK rsn_pairwise=CCMP逐行解释一下:
interface=wlan0:告诉 hostapd 用哪张网卡。driver=nl80211:Linux 无线驱动标准接口,绝大多数网卡都用这个。ssid=KaliHotspot:热点广播的名称。hw_mode=g:工作频段,g 表示 2.4GHz。如果你的网卡支持 5GHz,可以用hw_mode=a,但 5GHz 的覆盖范围通常比 2.4GHz 小。channel=6:固定信道。2.4GHz 下建议用 1、6、11 这几个互不重叠的信道。wpa=2:启用 WPA2 加密,这个是必须的,不要开无密码热点。wpa_passphrase=kali12345:热点密码,至少 8 位。
第三步,配置 dnsmasq。建议在/etc/dnsmasq.d/下新建一个独立配置文件,避免改动 dnsmasq 的主配置。创建/etc/dnsmasq.d/hotspot.conf:
interface=wlan0 bind-interfaces dhcp-range=192.168.4.10,192.168.4.100,12h dhcp-option=3,192.168.4.1 dhcp-option=6,223.5.5.5,119.29.29.29 no-resolv逐行解释:
interface=wlan0:只在 wlan0 上提供 DHCP 服务。bind-interfaces:让 dnsmasq 只监听指定接口,避免它接管本机其他网卡的 DNS 解析,这是防止“热点一开,本机断网”的关键配置。dhcp-range=192.168.4.10,192.168.4.100,12h:给接入设备分配的 IP 范围是 192.168.4.10 到 192.168.4.100,租约 12 小时。dhcp-option=3,192.168.4.1:把网关指向本机在 wlan0 上的 IP。dhcp-option=6,223.5.5.5,119.29.29.29:给客户端指定 DNS 服务器,我这里用的是公共 DNS,你也可以换成其他公共 DNS。no-resolv:不让 dnsmasq 读取系统的/etc/resolv.conf,避免 DNS 解析冲突。
第四步,给 wlan0 配置 IP 地址,开启 IP 转发,配置 NAT:
sudo ip addr add 192.168.4.1/24 dev wlan0 sudo sysctl -w net.ipv4.ip_forward=1 sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE第一条命令给 wlan0 配置一个静态 IP,192.168.4.1 是热点的网关地址,必须和 dnsmasq 配置里的网关一致。第二条命令开启内核 IP 转发,让数据包能在 wlan0 和 eth0 之间流转。第三条命令用 iptables 做 NAT,把来自无线客户端的数据包伪装成从 eth0 出去。
注意第三条命令里的-o eth0要换成你实际的上行网卡接口名,如果写错,客户端连上热点后是出不了网的。
第五步,启动服务:
sudo systemctl enable --now hostapd sudo systemctl restart dnsmasq如果一切顺利,手机应该能搜到KaliHotspot,输入密码就能上网。如果中间某一步报错,先别慌,第 4 章会专门讲排查。
3.4 停止热点与恢复网络的标准流程
手动方案停止热点的顺序和启动是反着的,关键是恢复系统网络状态:
sudo systemctl stop hostapd dnsmasq sudo ip addr del 192.168.4.1/24 dev wlan0 sudo iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE sudo nmcli device set wlan0 managed yes建议把整套启停流程写成一个脚本,方便重复使用。我自己的习惯是准备一个hotspot-start.sh和一个hotspot-stop.sh,里面写好完整的启停逻辑,需要的时候直接调用,不用每次临时敲一堆命令。
4. 踩坑实录:这些坑我基本都替你踩过了
这一章是我最想写的部分。网上教程多数只讲怎么做,不讲出了问题怎么办。这里整理了我实际遇到的几类问题,按频率排序。
4.1 热点一开,本机先断网了
这个现象非常经典:热点开成功了,手机也能连上,但 Kali 自己上不了网了。原因通常是 dnsmasq 默认会尝试接管系统所有网卡的 DNS 解析,把本机的/etc/resolv.conf改了指向,导致系统解析不到域名。
解决办法就是我在 3.3 配置里强调的bind-interfaces和no-resolv。加上之后,dnsmasq 就只在 wlan0 上提供服务,不影响本机其他网络接口。
另外还有一种可能是路由表发生了变化。如果用的是 create_ap 方案,它一般会自己处理好路由。如果是手动方案,排查时可以用ip route看一眼默认路由是否还在。默认路由被顶掉的话,手动加回一条即可:
sudo ip route add default via 你的原网关地址 dev eth04.2 “NetworkManager is not running”到底怎么破
这个报错几乎每个用 nmcli 的人都会遇到。出现的原因很简单:NetworkManager 服务没起来。
先确认状态:
systemctl status NetworkManager如果是inactive (dead),直接启动并设置开机自启:
sudo systemctl enable --now NetworkManager再执行nmcli dev wifi hotspot ...通常就能通过了。
但这里有一个很容易混淆的地方:如果你在手动 hostapd + dnsmasq 方案里也试图用 NetworkManager 管理有线网卡,并且把无线网卡设成了managed no,那nmcli相关命令可能会报错。这不是系统坏了,而是你同时用了两套网络管理机制。记住一个原则:用 nmcli 方案就让 NM 全权管理网络;用 hostapd + dnsmasq 方案就让 NM 放手无线网卡。两套机制不要混着管同一张卡。
4.3 手机连上热点却上不了网
这个问题的排查优先级很重要。我一般按这个顺序来:
- 先确认手机有没有拿到 IP。在 dnsmasq 的日志里看:
journalctl -u dnsmasq -f如果看到 DHCPDISCOVER 和 DHCPACK,说明地址分配正常。如果什么都没看到,说明客户端发的 DHCP 请求没到达 dnsmasq,检查 dnsmasq 的interface配置。
- 确认本机能上网:
curl -I https://www.baidu.com- 确认 IP 转发是否开启:
cat /proc/sys/net/ipv4/ip_forward如果输出是 0,说明转发没开,重新执行sudo sysctl -w net.ipv4.ip_forward=1。
- 确认 NAT 规则是否正确:
sudo iptables -t nat -L POSTROUTING -v看到 MASQUERADE 规则,并且-o后面的网卡名和你的上行接口一致,就说明 NAT 没问题。如果-o写错了网卡,数据包根本不会从正确的接口出去。
- 确认 DNS 是否正常。手机连上热点后,如果浏览器提示“无法解析服务器地址”,检查 dnsmasq 的
dhcp-option=6是否配置了可用的 DNS。公网 DNS 一般没问题,但某些网络环境会屏蔽特定 DNS,可以换一个试试。
排查的原则是:从底层到上层,先看物理链路,再看 IP 分配,再看路由和转发,最后看 DNS。不要一上来就怀疑无线网卡有问题。
4.4 热点断连、网速慢,先看这四件事
热点能用之后,另一个高频问题是断连和网速慢。我总结了四个原因,按出现频率排序:
第一个是信道拥挤。2.4GHz 频段只有 1、6、11 这三个互不重叠的信道,周围邻居路由器多了之后干扰非常严重。解决办法是换信道,或者在条件允许时切换到 5GHz,用hw_mode=a配置 hostapd。
第二个是无线网卡的省电模式。部分网卡在 Linux 下默认开启省电,会导致延迟和掉速,可以关掉:
sudo iw dev wlan0 set power_save off实测下来,这个操作对网速的改善非常明显。
第三个是 USB 无线网卡的供电与散热问题。USB 网卡开 AP 模式时功耗比平时高很多,插在主机的后置 USB 口会比前置口更稳;长时间跑热点的 USB 网卡最好加个散热片或者换个 USB 风扇对着吹。
第四个是网卡本身的能力限制。一些低功耗网卡在 AP 模式下速率上限本来就不高,客户端数量多了之后还会明显下降。这时候天冷天热都没办法,只能换硬件。
连接状态的观察可以用:
iw dev wlan0 station dump这条命令能看到每个客户端连接的信号强度、速率、收发包情况,是判断问题的重要依据。
4.5 连不上、断连、网速慢,分别抓什么日志
很多人遇到问题就瞎改配置,改完更懵。我建议先拿日志说话,再动手。
如果热点连不上、客户端根本搜不到 SSID,重点看 hostapd 和内核日志:
journalctl -u hostapd -f dmesg -w | grep -i wlan0如果 hostapd 没有报错,但 SSID 就是搜不到,检查网卡是否真的进入了 AP 模式:
iw dev wlan0 info如果 type 显示的不是 AP,说明 hostapd 没有正常工作。
如果是频繁断连,重点抓内核日志和驱动报错:
dmesg -w断连通常和驱动崩溃、固件异常、供电不足有关,内核日志里通常能看到线索。同时看 hostapd 日志里有没有AP-STA-DISCONNECTED,这类事件能帮你判断是不是客户端主动断开。
如果是网速慢,重点看无线链路质量:
iw dev wlan0 station dump观察信号强度(signal)和速率(tx bitrate),信号太差就先解决距离和干扰,如果信号很好但速率低,再检查是不是省电模式和信道干扰。
本质上,不同的症状对应不同的日志源:连接建立看 hostapd,链路稳定看 dmesg,性能问题看 iw 统计和抓包。把这些日志配合起来看,大部分问题都不难定位。
5. 进阶用法与使用红线
热点能稳定跑起来之后,还有一些常用的管理技巧和必须注意的安全边界。
5.1 隐藏SSID、MAC白名单:让热点更好管
如果你的热点是不希望随便被人搜到的,可以隐藏 SSID。手动 hostapd 方案在配置文件里加一行:
ignore_broadcast_ssid=1重启 hostapd 之后,热点就不再广播 SSID 了,别人需要手动输入热点名称才能连接。但说实话,隐藏 SSID 只是防君子不防小人,真想找到这个热点并不难,所以它只算是一种管理手段,不能替代加密。
更实际的管理手段是 MAC 地址白名单。在 hostapd.conf 里启用 MAC 过滤:
macaddr_acl=1 accept_mac_file=/etc/hostapd/hostapd.accept然后在/etc/hostapd/hostapd.accept里写入允许接入的 MAC 地址,每行一个。这样即使有人知道密码,不在白名单里也连不进来。
5.2 查看已连接设备和DHCP租约
临时组网的时候,经常需要知道当前有哪些设备连到了热点上。查看无线客户端的命令是:
iw dev wlan0 station dump查看 DHCP 租约记录:
cat /var/lib/misc/dnsmasq.leases租约文件里能看到设备 MAC、分配的 IP 和剩余租期,配合iw输出,基本能对应上“哪台设备拿了哪个 IP”。
5.3 规范使用:临时热点也有安全和边界
最后必须说几句关于使用边界的话。开热点本身是再正常不过的网络操作,无论是临时组网、给物联网设备配网、还是搭建测试环境,都很有用。但你要清楚,热点一旦打开,所有接入设备的数据都会经过你这台电脑。在没有授权的情况下,不要利用这个位置去抓取、篡改其他用户的流量,也不要截获别人的通信内容。这些行为不仅不道德,还可能违法。
另外,在办公网络或者受管制的网络环境中,私自架设热点可能违反信息安全规定,动手之前先确认是否被允许。热点用完记得关闭共享,密码不要用太弱的,也不要长期开放一个无人值守的热点。安全从来不是某个工具的属性,而是使用者的习惯。
我把这套启停流程整理成脚本之后,现在开一个热点基本就是十几秒的事。最大的体会是:Kali 开热点这件事,问题大多出在开搞之前——网卡不支持 AP、驱动没加载、NetworkManager 状态不对,这些问题不排查清楚,后面的命令写得再漂亮也白搭。所以如果你今天只记住一句话,那就是动手之前先看一眼iw list的输出,确认网卡支持 AP 模式,然后再按方案执行。最后再分享一个小习惯:我会把第 3 章里的几个脚本和配置复制到 U 盘里,现场装完系统直接拉下来跑,省去大量重复敲字的时间,你也可以试试。