why

在无线设备的测试中经常需要使用kali加外接无线网卡的方式来开启热点, 供设备连接, 然后才能进行测试

在使用过程中发现新版本的kali在图形化界面开启的热点如果需要使用密码, 安全性只能是WPA/WPA2/WPA3个人

按道理来讲这个选项应该会向下兼容, 也就是不支持WPA3的设备, 会使用WPA2进行连接

但在使用过程中发现某些设备会连不上热点, 哪怕输入正确密码也会一直卡在连接中的状态

由于kali这里默认使用NetworkManager对网卡进行托管

所以这里一直在找办法替代nm, 最后使用hostapd解决

how

这里使用的包有

  • hostapd: 开热点
  • dnsmasq: DHCP和DNS
  • iptables: 流量转发
  • netfilter-persistent: 持久化保存iptables配置

取消nm对网卡的托管

hostapdNetworkManager都能接管无线网卡设备, 为了让hostapd在使用无线网卡时网卡不被nm接管, 需要取消nm对无线网卡的托管

查看/etc/NetworkManager/NetworkManager.conf的内容, 一般内容如下:

1
2
3
4
5
[main]
plugins=ifupdown,keyfile

[ifupdown]
managed=false

如果没有启用keyfile, 则手动补上

然后可以在文件中添加两行

1
2
[keyfile]
unmanaged-devices=interface-name:wlan0

或者新建一个文件/etc/NetworkManager/conf.d/unmanaged.conf在其中添加同样的内容

为网卡分配ip

由于取消了nm对网卡的接管, wlan0此时是没有ip地址的, 使用ifconfig向网卡分配一个地址

1
sudo ifconfig wlan0 10.42.0.1 netmask 255.255.255.0

配置热点

在hostapd的配置文件/etc/hostapd/hostapd.conf内写入配置:

1
2
3
4
5
6
7
8
9
10
11
12
interface=wlan0 # 网卡
driver=nl80211
ssid=ansel # 热点名称
hw_mode=g
channel=6
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2 # 安全性
wpa_passphrase=11111111 # 密码
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP

为了解决nm开出的热点无法被某些设备连接, 所以这里wpa配置为2, #只是为了暂时注释, 实际配置文件中需要删除

默认状态下, 由于有nm的存在, hostapd的服务是屏蔽的, 如果需要hostapd开机自启, 需要手动解除屏蔽再启用:

1
2
3
sudo systemctl unmask hostapd
sudo systemctl enable hostapd
sudo systemctl start hostapd

这个时候热点已经可以被搜索到了, 但是仍然缺失两个功能: ip分配流量转发, 前者让连接热点的设备获得ip地址, 后者让设备可以上网

配置DHCP

在dnsmasq的配置文件目录新建一个配置文件写入自定义配置:

1
2
3
4
5
6
# /etc/dnsmasq.d/dnsmasq.conf
interface=wlan0 # 网卡
dhcp-range=10.42.0.2,10.42.0.100,255.255.255.0,24h # ip分配范围
dhcp-option=3,10.42.0.1 # 网关 IP
dhcp-option=6,8.8.8.8 # DNS 服务器
server=8.8.8.8

同样可以配置开机自启:

1
2
sudo systemctl enable dnsmasq
sudo systemctl start dnsmasq

配置流量转发

使用iptables, 将网卡wlan0上的流量转发到eth0上, 实现通网:

1
2
3
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT

持久化保存iptables命令

使用netfilter-persistent保存iptables命令:

1
sudo netfilter-persistent save 

使用reload即可加载iptables配置:

1
sudo netfilter-persistent reload

启动脚本

相关的配置完成后, 可以写一个net.sh脚本来完成剩余需要手动操作的命令:

1
2
3
4
# 为网卡配置ip
sudo ifconfig wlan0 10.42.0.1 netmask 255.255.255.0
# 加载iptables配置
sudo netfilter-persistent reload

快速方案

使用linux-wifi-hotspot包可以快速开启热点, 实现原理和上面的方法相同, 安装的时候会同时把上面提到的包都安装, 只是整合了一下功能, 同时有gui界面

安装(arch):

1
yay -S linux-wifi-hostpot

图形界面使用:

image-20250729095758181