NetworkManager 运维教程 / 第 5 章:WiFi 管理
第 5 章:WiFi 管理
5.1 WiFi 设备状态
查看 WiFi 硬件和软件开关
# 查看 WiFi 总体状态
nmcli radio wifi
# enabled
# 开关 WiFi
sudo nmcli radio wifi on
sudo nmcli radio wifi off
# 查看 WiFi 设备
nmcli device status | grep wifi
# wlan0 wifi disconnected --
# 查看 WiFi 设备详细信息
nmcli device show wlan0 | grep -i "GENERAL\|WIFI\|WIRELESS"
# 检查 WiFi 硬件开关(射频 kill switch)
rfkill list
# 0: phy0: Wireless LAN
# Soft blocked: no
# Hard blocked: no
# 解除软封锁
sudo rfkill unblock wifi
# 如果 hard blocked,需要物理开关或 Fn+Fx 键解除
5.2 WiFi 扫描
# 扫描可用的 WiFi 网络
nmcli device wifi rescan
# 等待扫描完成后列出
sleep 2 && nmcli device wifi list
# 示例输出:
# IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY
# * AA:BB:CC:DD:EE:FF HomeNetwork Infra 6 270 Mbit/s 85 ▂▄▆█ WPA2
# 11:22:33:44:55:66 Office5G Infra 36 540 Mbit/s 70 ▂▄▆_ WPA2 802.1X
# 77:88:99:AA:BB:CC CafeOpen Infra 11 54 Mbit/s 45 ▂▄__ --
# DD:EE:FF:00:11:22 Neighbor Infra 1 130 Mbit/s 30 ▂___ WPA1 WPA2
# 过滤特定字段
nmcli -t -f SSID,SIGNAL,SECURITY device wifi list
# 只显示特定 SSID
nmcli device wifi list | grep "HomeNetwork"
# 按信号强度排序
nmcli -t -f SSID,SIGNAL device wifi list | sort -t: -k2 -rn
# 持续扫描(后台)
watch -n 5 "nmcli device wifi rescan && nmcli device wifi list"
扫描输出字段说明
| 字段 | 说明 |
|---|---|
IN-USE | * 表示当前连接的 AP |
BSSID | AP 的 MAC 地址 |
SSID | 网络名称 |
MODE | Infra(基础模式)/ Ad-hoc |
CHAN | 信道号 |
RATE | 最大速率 |
SIGNAL | 信号强度百分比 |
BARS | 信号强度条 |
SECURITY | 安全类型 |
5.3 连接 WiFi 网络
一键连接
# 连接到开放网络
nmcli device wifi connect "CafeWiFi"
# 连接到加密网络
nmcli device wifi connect "HomeNetwork" password "MyPassword123"
# 指定接口连接
nmcli device wifi connect "HomeNetwork" password "MyPassword123" ifname wlan0
# 指定 BSSID 连接(连接到特定 AP)
nmcli device wifi connect "HomeNetwork" password "MyPassword123" \
bssid "AA:BB:CC:DD:EE:FF"
# 连接后自动创建并保存连接配置
# 后续自动连接无需再指定密码
使用连接名连接
# 查看已保存的 WiFi 连接
nmcli connection show | grep wifi
# 使用连接名连接
nmcli connection up "HomeNetwork"
# 断开
nmcli connection down "HomeNetwork"
# 查看连接详情
nmcli connection show "HomeNetwork"
创建 WiFi 连接(更多控制)
# 创建 WPA2-PSK 连接
nmcli connection add \
type wifi \
con-name "HomeWiFi" \
ifname wlan0 \
ssid "HomeNetwork" \
wifi-sec.key-mgmt wpa-psk \
wifi-sec.psk "MyPassword123" \
ipv4.method auto \
ipv6.method auto \
connection.autoconnect yes \
connection.autoconnect-priority 10
# 设置 WiFi 频段偏好
nmcli connection modify "HomeWiFi" wifi.band a # 5GHz only
nmcli connection modify "HomeWiFi" wifi.band bg # 2.4GHz only
nmcli connection modify "HomeWiFi" wifi.band "" # 自动(默认)
# 固定信道
nmcli connection modify "HomeWiFi" wifi.channel 36
# 设置连接优先级(数值越大越优先)
nmcli connection modify "HomeWiFi" connection.autoconnect-priority 10
nmcli connection modify "OfficeWiFi" connection.autoconnect-priority 5
# 设置连接度量值(路由优先级)
nmcli connection modify "HomeWiFi" ipv4.route-metric 100
5.4 隐藏网络
隐藏网络不广播 SSID,需要手动指定才能连接。
# 连接到隐藏网络
nmcli device wifi connect "HiddenSSID" password "password" hidden yes
# 创建隐藏网络连接配置
nmcli connection add \
type wifi \
con-name "HiddenNetwork" \
ifname wlan0 \
ssid "HiddenSSID" \
wifi.hidden yes \
wifi-sec.key-mgmt wpa-psk \
wifi-sec.psk "password" \
connection.autoconnect yes
# 验证隐藏属性
nmcli connection show "HiddenNetwork" | grep wifi.hidden
# wifi.hidden: yes
注意:隐藏网络安全性并不比普通网络更高。隐藏 SSID 只是不广播,但可以通过抓包发现。安全应依赖 WPA3 或 WPA2 认证。
5.5 WiFi 热点(AP 模式)
将 Linux 设备变成 WiFi 热点。
# 创建热点(最简方式)
nmcli device wifi hotspot \
ifname wlan0 \
con-name "MyHotspot" \
ssid "MyHotspot" \
password "HotspotPass123"
# 查看热点信息
nmcli connection show "MyHotspot"
# 查看热点状态
nmcli device show wlan0 | grep -i "GENERAL.STATE\|IP4"
# 停止热点
nmcli connection down "MyHotspot"
# 修改热点配置
nmcli connection modify "MyHotspot" \
wifi-sec.psk "NewPassword456"
# 配置热点的 IP 范围(DHCP 服务器)
# NM 默认使用 10.42.0.0/24
# 如需自定义,修改 IPv4 配置
nmcli connection modify "MyHotspot" \
ipv4.method shared \
ipv4.addresses "192.168.50.1/24" \
ipv4.dns "8.8.8.8"
热点高级配置
# 使用 5GHz 频段
nmcli connection modify "MyHotspot" \
wifi.band a \
wifi.channel 36
# 修改热点 SSID
nmcli connection modify "MyHotspot" \
wifi.ssid "NewHotspotName"
# 查看连接到热点的设备
# NM 自带的 dnsmasq 会分配 IP
# 可以查看 ARP 表
arp -a | grep "10.42.0"
# 或查看 dnsmasq 租约
cat /var/lib/NetworkManager/dnsmasq-wlan0.leases
5.6 WPA3
WPA3 是 WiFi 联盟推出的新一代安全标准。
WPA3-Personal (SAE)
# 连接到 WPA3 网络
nmcli device wifi connect "WPA3Network" password "SecurePassword" \
wifi-sec.key-mgmt sae
# 创建 WPA3 连接配置
nmcli connection add \
type wifi \
con-name "WPA3Home" \
ifname wlan0 \
ssid "WPA3Network" \
wifi-sec.key-mgmt sae \
wifi-sec.psk "SecurePassword"
# WPA3/WPA2 混合模式(兼容旧设备)
nmcli connection add \
type wifi \
con-name "WPA3Transition" \
ifname wlan0 \
ssid "TransitionNetwork" \
wifi-sec.key-mgmt wpa-psk sae \
wifi-sec.psk "Password123"
WPA3 与 WPA2 对比
| 特性 | WPA2-PSK | WPA3-SAE |
|---|---|---|
| 密钥交换 | 4-Way Handshake | SAE (Simultaneous Authentication of Equals) |
| 前向保密 | ❌ | ✅ |
| 离线字典攻击 | 易受攻击 | 抗攻击 |
| 密码强度要求 | 低 | 较高 |
| 兼容性 | 广泛 | 需要新硬件 |
| NM key-mgmt | wpa-psk | sae |
OWE(Opportunistic Wireless Encryption)
开放网络加密,为开放 WiFi 提供加密保护:
# 连接 OWE 网络
nmcli device wifi connect "OpenOWE" \
wifi-sec.key-mgmt owe
# 创建 OWE 连接
nmcli connection add \
type wifi \
con-name "OWENetwork" \
ifname wlan0 \
ssid "OpenOWE" \
wifi-sec.key-mgmt owe
5.7 WPA/WPA2 Enterprise(802.1X)
企业 WiFi 认证使用 RADIUS 服务器,支持多种 EAP 方法。
PEAP(最常见)
# PEAP + MSCHAPv2(用户名/密码)
nmcli connection add \
type wifi \
con-name "Corp-WiFi" \
ifname wlan0 \
ssid "CorporateNetwork" \
wifi-sec.key-mgmt wpa-eap \
802-1x.eap peap \
802-1x.phase2-auth mschapv2 \
802-1x.identity "john.doe" \
802-1x.password "corporatepass" \
802-1x.domain-suffix-match "corp.example.com" \
802-1x.ca-cert "/etc/ssl/certs/corp-ca.pem" \
connection.autoconnect yes
EAP-TLS(证书认证)
# EAP-TLS(双向证书认证)
nmcli connection add \
type wifi \
con-name "Corp-TLS" \
ifname wlan0 \
ssid "CorpTLSNetwork" \
wifi-sec.key-mgmt wpa-eap \
802-1x.eap tls \
802-1x.identity "john.doe@corp.example.com" \
802-1x.client-cert "/home/john/.certs/client.pem" \
802-1x.private-key "/home/john/.certs/client-key.pem" \
802-1x.private-key-password "keypass" \
802-1x.ca-cert "/etc/ssl/certs/corp-ca.pem" \
802-1x.phase2-domain-suffix-match "radius.corp.example.com"
EAP-TTLS
# EAP-TTLS + PAP
nmcli connection add \
type wifi \
con-name "Corp-TTLS" \
ifname wlan0 \
ssid "CorpTTLS" \
wifi-sec.key-mgmt wpa-eap \
802-1x.eap ttls \
802-1x.phase2-auth pap \
802-1x.identity "username" \
802-1x.password "password" \
802-1x.anonymous-identity "anonymous@corp.example.com"
EAP 方法对比
| EAP 方法 | 认证方式 | 安全等级 | 复杂度 | 常见度 |
|---|---|---|---|---|
| PEAP | 用户名/密码(内层 MSCHAPv2) | 中 | 低 | ★★★★★ |
| EAP-TLS | 双向证书 | 高 | 高 | ★★★★ |
| EAP-TTLS | 用户名/密码(多种内层) | 中 | 中 | ★★★ |
| EAP-FAST | PAC 令牌 | 中 | 高 | ★★ |
| EAP-SIM/AKA | SIM 卡 | 高 | 高 | 运营商 |
修复常见 Enterprise 连接问题
# 问题:证书验证失败
# 解决:指定正确的 CA 证书
nmcli connection modify "Corp-WiFi" \
802-1x.ca-cert "/path/to/correct-ca.pem"
# 或临时禁用证书验证(不推荐用于生产)
nmcli connection modify "Corp-WiFi" \
802-1x.system-ca-certs no
# 问题:域名不匹配
# 确认 RADIUS 服务器的证书 SAN
openssl x509 -in radius-cert.pem -text | grep -A5 "Subject Alternative"
# 设置正确的域名匹配
nmcli connection modify "Corp-WiFi" \
802-1x.domain-suffix-match "radius.corp.example.com"
# 问题:Phase2 认证失败
# 检查认证服务器支持的 EAP 方法
journalctl -u NetworkManager | grep -i "802-1x\|eap\|radius"
5.8 WiFi 性能优化
# 优先连接 5GHz 网络
nmcli connection modify "HomeWiFi" wifi.band a
# 如果 5GHz 不可用,回退到 2.4GHz
# 使用连接克隆创建两个配置
nmcli connection clone "HomeWiFi" "HomeWiFi-5g"
nmcli connection modify "HomeWiFi-5g" \
wifi.band a \
connection.autoconnect-priority 10
nmcli connection clone "HomeWiFi" "HomeWiFi-2g"
nmcli connection modify "HomeWiFi-2g" \
wifi.band bg \
connection.autoconnect-priority 5
# 检查当前 WiFi 连接的速率
iwconfig wlan0 | grep -i "bit rate\|frequency\|link quality"
# 查看连接的信道和带宽
nmcli -f wifi-properties connection show "HomeWiFi"
# 设置 MTU(如果 AP 支持巨型帧)
nmcli connection modify "HomeWiFi" wifi.mtu 1500
5.9 WiFi 安全最佳实践
| 实践 | 说明 |
|---|---|
| 使用 WPA3 | 优先使用 SAE 或 OWE |
| 强密码 | 至少 12 位,包含大小写、数字、特殊字符 |
| 验证证书 | Enterprise 模式下始终指定 CA 证书 |
| 禁用自动连接 | 不信任的网络设为手动连接 |
| MAC 随机化 | 公共场所使用随机 MAC |
| VPN | 公共 WiFi 上使用 VPN |
# 启用 MAC 地址随机化
sudo tee /etc/NetworkManager/conf.d/mac-randomization.conf << 'EOF'
[device]
wifi.scan-rand-mac-address=yes
[connection]
wifi.cloned-mac-address=random
ethernet.cloned-mac-address=stable
EOF
sudo nmcli general reload conf
5.10 本章小结
| 要点 | 命令/说明 |
|---|---|
| WiFi 开关 | nmcli radio wifi on/off |
| 扫描网络 | nmcli device wifi rescan && nmcli device wifi list |
| 连接网络 | nmcli device wifi connect SSID password PASS |
| 隐藏网络 | hidden yes 参数 |
| 热点 | nmcli device wifi hotspot |
| WPA3 | wifi-sec.key-mgmt sae |
| Enterprise | wifi-sec.key-mgmt wpa-eap + 802-1x 参数 |
| MAC 随机化 | wifi.cloned-mac-address=random |