NetworkManager 与渗透测试工具的冲突处理
问题背景
NetworkManager 是 Kali 默认的网络连接管理程序,负责:
- 自动连接 Wi-Fi 网络
- 管理有线网络
- 管理 VPN
但它和渗透测试工具(airmon-ng、iwconfig、dhclient、aircrack-ng)有一个根本冲突:
NetworkManager 会持续扫描所有无线接口,尝试连接已保存的 Wi-Fi 网络、管理接口状态。当你手动把 wlan0 切成 monitor mode 时,NetworkManager 可能随时把它切回来。
临时解决方案(最常用)
airmon-ng 自己能处理这个冲突:
airmon-ng check kill # 杀掉 NetworkManager 和 wpa_supplicant
airmon-ng start wlan0 # 然后再切 monitor mode
check kill 会杀掉:
- NetworkManager
- wpa_supplicant
- dhclient
- ModemManager
测试完后恢复:
sudo systemctl start NetworkManager
半永久方案:让 NetworkManager 忽略无线接口
# 找到 NetworkManager 配置目录
sudo bash -c 'cat > /etc/NetworkManager/conf.d/ignore-wifi.conf <<EOF
[keyfile]
unmanaged-devices=interface-name:wlan0;interface-name:mon0
EOF'
sudo systemctl restart NetworkManager
这样 NetworkManager 就不会碰 wlan0 和 mon0,但你仍然可以在 GUI 里管理有线网络。
永久方案:禁用 NetworkManager
如果你整个 Kali 就是为了渗透测试用,完全不需要图形化网络管理:
sudo systemctl disable --now NetworkManager
sudo systemctl disable --now ModemManager
# 改用 WPA supplicant + dhcpcd
sudo systemctl enable --now wpa_supplicant
sudo systemctl enable --now dhcpcd
手动连接 Wi-Fi(不用 NetworkManager)
# 扫描网络
iw dev wlan0 scan | grep SSID
# 创建 wpa_supplicant 配置
cat > wpa.conf << 'WPA'
network={
ssid="MyWiFi"
psk="mypassword"
}
WPA
# 连接
sudo wpa_supplicant -Dnl80211 -i wlan0 -c wpa.conf &
# 或直接后台启动
sudo wpa_supplicant -B -Dnl80211 -i wlan0 -c wpa.conf
# 获取 IP
sudo dhclient wlan0
有线网络
sudo dhclient eth0 # 动态 IP
# 或手动配置
sudo ip addr add 192.168.1.100/24 dev eth0
sudo ip route add default via 192.168.1.1
IPv6 冲突
某些渗透测试工具默认用 IPv4,但系统配置了 IPv6,导致抓包或扫描异常。临时禁用 IPv6:
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
# 永久:
echo "net.ipv6.conf.all.disable_ipv6 = 1" | sudo tee -a /etc/sysctl.conf
echo "net.ipv6.conf.default.disable_ipv6 = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
systemd-networkd 替代方案
Kali 也可以用 systemd-networkd(systemd 自带的网络管理)替代 NetworkManager:
sudo systemctl disable --now NetworkManager
sudo systemctl enable --now systemd-networkd
# 创建有线网络配置
cat > /etc/systemd/network/10-eth0.network << 'NET'
[Match]
Name=eth0
[Network]
DHCP=ipv4
NET
# 创建 Wi-Fi 配置(需要 wpa_supplicant)
cat > /etc/systemd/network/10-wlan0.network << 'NET'
[Match]
Name=wlan0
[Network]
DHCP=ipv4
NET
sudo systemctl restart systemd-networkd
推荐实践
| 场景 | 推荐配置 |
|---|---|
| 日常使用 + 偶尔测试 | NetworkManager 保留 + airmon-ng check kill 按需 |
| 纯渗透测试专用机 | 禁用 NetworkManager + wpa_supplicant/dhcpcd |
| 虚拟机(NAT 模式) | NetworkManager 正常用,无线测试极少用到 |