强曰为道
与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

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
BSSIDAP 的 MAC 地址
SSID网络名称
MODEInfra(基础模式)/ 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-PSKWPA3-SAE
密钥交换4-Way HandshakeSAE (Simultaneous Authentication of Equals)
前向保密
离线字典攻击易受攻击抗攻击
密码强度要求较高
兼容性广泛需要新硬件
NM key-mgmtwpa-psksae

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-FASTPAC 令牌★★
EAP-SIM/AKASIM 卡运营商

修复常见 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
WPA3wifi-sec.key-mgmt sae
Enterprisewifi-sec.key-mgmt wpa-eap + 802-1x 参数
MAC 随机化wifi.cloned-mac-address=random

扩展阅读