Wi‑Fi 已连接但无法 Ping:AP 绑定与持久化配置
适用场景 设备显示 Wi‑Fi 已连接,但出现以下现象: 可以通过管理网口 SSH 到设备; 设备 Wi‑Fi 地址无法从电脑 Ping 通; 设备通过 Wi‑Fi 无法 Ping 通电脑或网关; 同一 SSID 下存在多个 AP/BSSID,电脑和设备关联到了不同 AP。 本文所有网络名称、地址和设备标识均使用占位符
适用场景
设备显示 Wi‑Fi 已连接,但出现以下现象:
可以通过管理网口 SSH 到设备;
设备 Wi‑Fi 地址无法从电脑 Ping 通;
设备通过 Wi‑Fi 无法 Ping 通电脑或网关;
同一 SSID 下存在多个 AP/BSSID,电脑和设备关联到了不同 AP。
本文所有网络名称、地址和设备标识均使用占位符。
关键概念
“Wi‑Fi 已连接”只说明无线网卡完成了关联,不代表二层数据链路、VLAN、AP 上联和 IP 路由已经可用。
NetworkManager 中最容易混淆的是设备与连接配置:
概念含义示例device当前网卡及运行状态<WIFI_INTERFACE>connection保存在 NetworkManager 中的持久化配置<PROFILE_NAME>SSID无线网络广播名称<WIFI_SSID>BSSID某一个具体 AP 的无线 MAC 地址<TARGET_BSSID>
connection.id 只是本机配置的显示名称,802-11-wireless.ssid 才是实际连接的无线网络名称。iw ... link 中的频率和 BSSID 表示当前实际使用的频段与 AP。
因此,连接配置名称中即使含有“2.4G”,实际连接仍可能是 5 GHz。应通过频率判断实际频段:
2xxx MHz:2.4 GHz;
5xxx MHz:5 GHz。
nmcli 常规操作速查
1. 查看 NetworkManager 总体状态
nmcli general status
nmcli networking
nmcli radio
nmcli device status
nmcli connection show
nmcli connection show --active
查看当前用户具有哪些 NetworkManager 权限:
nmcli general permissions
通常读取状态不需要 sudo;修改系统级连接配置可能需要 sudo 或桌面 Polkit 授权。
2. 查看网卡和当前连接
查看指定网卡的完整运行状态:
nmcli device show <WIFI_INTERFACE>
只取当前连接配置名:
nmcli -g GENERAL.CONNECTION device show <WIFI_INTERFACE>
查看当前实际关联的 AP、频率、信号和速率:
iw dev <WIFI_INTERFACE> link
常用输出选项:
-f <FIELDS>:只显示指定字段;-g <FIELDS>:只输出字段值,适合脚本;-t:机器可读的简洁格式;-p:便于人工阅读的美化格式。
例如:
nmcli -t -f DEVICE,TYPE,STATE,CONNECTION device status
nmcli -g connection.id,connection.uuid connection show "<PROFILE_NAME>"
3. 扫描 Wi‑Fi
主动重新扫描:
nmcli device wifi rescan ifname <WIFI_INTERFACE>
列出 SSID、BSSID、信道、频率、信号和加密方式:
nmcli -f IN-USE,SSID,BSSID,CHAN,FREQ,SIGNAL,SECURITY device wifi list ifname <WIFI_INTERFACE> --rescan no
同一个 SSID 可能对应多个 BSSID。排障时应记录电脑与设备各自连接的 BSSID,不能只比较 SSID。
4. 连接已有配置
启用一个已保存的连接配置:
sudo nmcli connection up "<PROFILE_NAME>"
指定网卡启用:
sudo nmcli connection up "<PROFILE_NAME>" ifname <WIFI_INTERFACE>
停用连接配置:
sudo nmcli connection down "<PROFILE_NAME>"
断开指定网卡:
sudo nmcli device disconnect <WIFI_INTERFACE>
如果 SSH 正在使用该 Wi‑Fi,执行 connection down、device disconnect 或关闭无线电会立即中断远程连接。远程修改前应保留有线、串口或其他管理链路。
5. 新建 Wi‑Fi 连接
推荐用 --ask 交互输入密码,避免密码出现在命令历史、进程参数或知识笔记中:
sudo nmcli --ask device wifi connect "<WIFI_SSID>" ifname <WIFI_INTERFACE> name "<PROFILE_NAME>"
连接隐藏 SSID:
sudo nmcli --ask device wifi connect "<WIFI_SSID>" ifname <WIFI_INTERFACE> name "<PROFILE_NAME>" hidden yes
不要把真实 Wi‑Fi 密码直接写入共享脚本、聊天记录或笔记。
6. 查看连接配置
查看全部属性:
nmcli connection show "<PROFILE_NAME>"
只查看常用字段:
nmcli -f connection.id,connection.uuid,connection.autoconnect,connection.autoconnect-priority,802-11-wireless.ssid,802-11-wireless.bssid,802-11-wireless.band,ipv4.method,ipv4.addresses,ipv4.gateway,ipv4.dns,ipv4.never-default connection show "<PROFILE_NAME>"
默认情况下,命令不会显示已保存的密码。不要使用会显示密钥的选项来制作日志或知识笔记。
7. 自动连接和优先级
开启或关闭开机自动连接:
sudo nmcli connection modify "<PROFILE_NAME>" connection.autoconnect yes
sudo nmcli connection modify "<PROFILE_NAME>" connection.autoconnect no
设置自动连接优先级,数值越大越优先:
sudo nmcli connection modify "<PROFILE_NAME>" connection.autoconnect-priority 100
修改配置后,可重新启用连接使其立即生效:
sudo nmcli connection up "<PROFILE_NAME>"
8. DHCP 与静态 IPv4
切换为 DHCP,并清除原有静态地址、网关和 DNS:
sudo nmcli connection modify "<PROFILE_NAME>" ipv4.method auto ipv4.addresses "" ipv4.gateway "" ipv4.dns ""
sudo nmcli connection up "<PROFILE_NAME>"
配置静态 IPv4:
sudo nmcli connection modify "<PROFILE_NAME>" ipv4.method manual ipv4.addresses "<IP_ADDRESS>/<PREFIX_LENGTH>" ipv4.gateway "<GATEWAY_IP>" ipv4.dns "<DNS_1> <DNS_2>"
sudo nmcli connection up "<PROFILE_NAME>"
如果连接只承担本地维护,不应提供默认路由:
sudo nmcli connection modify "<PROFILE_NAME>" ipv4.never-default yes
设置路由优先级,数值越小越优先:
sudo nmcli connection modify "<PROFILE_NAME>" ipv4.route-metric 600
添加或删除一条静态路由:
sudo nmcli connection modify "<PROFILE_NAME>" +ipv4.routes "<DESTINATION>/<PREFIX_LENGTH> <NEXT_HOP>"
sudo nmcli connection modify "<PROFILE_NAME>" -ipv4.routes "<DESTINATION>/<PREFIX_LENGTH> <NEXT_HOP>"
配置静态地址时,网关必须能从该接口所在子网到达。不要给维护网卡配置一个不属于其链路的网关。
9. 固定频段或具体 AP
固定到 5 GHz:
sudo nmcli connection modify "<PROFILE_NAME>" 802-11-wireless.band a
固定到 2.4 GHz:
sudo nmcli connection modify "<PROFILE_NAME>" 802-11-wireless.band bg
固定到某个具体 AP:
sudo nmcli connection modify "<PROFILE_NAME>" 802-11-wireless.bssid "<TARGET_BSSID>"
sudo nmcli connection up "<PROFILE_NAME>"
清除 BSSID 绑定,恢复在同名 AP 之间漫游:
sudo nmcli connection modify "<PROFILE_NAME>" 802-11-wireless.bssid ""
sudo nmcli connection up "<PROFILE_NAME>"
固定 BSSID 可以避开故障 AP,但目标 AP 离线后不会自动切换到其他同名 AP。
10. 重命名、克隆和删除连接配置
重命名只改变本机配置名称,不改变 SSID、IP 或 BSSID:
sudo nmcli connection modify "<OLD_PROFILE_NAME>" connection.id "<NEW_PROFILE_NAME>"
修改高风险参数前,可以克隆配置作为备份,并禁止备份配置自动连接:
sudo nmcli connection clone "<PROFILE_NAME>" "<BACKUP_PROFILE_NAME>"
sudo nmcli connection modify "<BACKUP_PROFILE_NAME>" connection.autoconnect no
确认目标名称和 UUID 后再删除配置:
nmcli connection show
sudo nmcli connection delete "<PROFILE_NAME>"
删除连接配置会移除其持久化设置,执行前必须确认目标。
11. 重新加载、应用和监控
如果手工修改了 NetworkManager 的磁盘配置文件,重新加载配置:
sudo nmcli connection reload
尝试把兼容的配置变更应用到当前设备:
sudo nmcli device reapply <WIFI_INTERFACE>
并非所有属性都支持运行时重新应用。BSSID、认证方式、IP 获取方式等变更通常应使用 connection up 重新激活。
实时观察 NetworkManager 状态变化:
nmcli monitor
nmcli device monitor <WIFI_INTERFACE>
检查本次开机的 NetworkManager 日志:
journalctl -u NetworkManager -b --no-pager
查看连接性检测结果:
nmcli networking connectivity check
本次故障的诊断与修改
修改前检查
先通过稳定的管理网口连接设备,避免 Wi‑Fi 重连时失去维护通道:
ssh <USER>@<DEVICE_MGMT_IP>
查看当前连接、配置、实际 AP、路由和邻居表:
nmcli -t -f DEVICE,TYPE,STATE,CONNECTION device status
nmcli -g GENERAL.CONNECTION device show <WIFI_INTERFACE>
nmcli -f connection.id,connection.autoconnect,802-11-wireless.ssid,802-11-wireless.bssid,ipv4.method,ipv4.addresses,ipv4.gateway connection show "<PROFILE_NAME>"
iw dev <WIFI_INTERFACE> link
ip route
ip neigh show dev <WIFI_INTERFACE>
如果邻居表中电脑与网关均显示 FAILED 或 INCOMPLETE,说明连 ARP/邻居解析都没有完成。此时应优先检查 AP、VLAN、无线隔离及静态 IP 所属网段,而不是先检查 ICMP 防火墙。
固定到已验证正常的 AP
先记录原 BSSID,以便回滚。然后将设备固定到电脑正在正常使用的 AP:
sudo nmcli connection modify "<PROFILE_NAME>" 802-11-wireless.bssid "<TARGET_BSSID>"
sudo nmcli connection up "<PROFILE_NAME>"
如果远程 SSH 用户需要交互输入 sudo 密码:
ssh -tt <USER>@<DEVICE_MGMT_IP> 'sudo nmcli connection modify "<PROFILE_NAME>" 802-11-wireless.bssid "<TARGET_BSSID>" && sudo nmcli connection up "<PROFILE_NAME>"'
验证
确认保存的配置和当前实际关联均已切换:
nmcli -f 802-11-wireless.bssid,ipv4.addresses,ipv4.gateway connection show "<PROFILE_NAME>"
iw dev <WIFI_INTERFACE> link
强制通过 Wi‑Fi 接口验证网关和电脑,避免多网卡路由干扰判断:
ping -I <WIFI_INTERFACE> -c 3 <GATEWAY_IP>
ping -I <WIFI_INTERFACE> -c 3 <PC_WIFI_IP>
ip neigh show dev <WIFI_INTERFACE>
再从电脑验证设备 Wi‑Fi 地址和 SSH:
ping -c 3 <DEVICE_WIFI_IP>
ssh <USER>@<DEVICE_WIFI_IP>
本次故障的判定依据是:切换前设备无法解析网关和电脑的邻居地址;切换到电脑所在的正常 AP 后,网关 Ping、双向 Ping、邻居解析和 Wi‑Fi SSH 均恢复。由此将问题定位到原 AP 的数据链路、VLAN、上联或隔离配置。
开机自动连接与取舍
nmcli connection modify 修改的是持久化连接配置。确认以下设置后,设备重启仍会连接指定 AP:
nmcli -f connection.autoconnect,802-11-wireless.ssid,802-11-wireless.bssid connection show "<PROFILE_NAME>"
应确认:
connection.autoconnect为yes;BSSID 为目标 AP;
静态 IP、前缀长度和网关正确。
如果目标 AP 断电或不可用,固定 BSSID 的设备不会自动漫游。修复整个无线网络后,可清除 BSSID 绑定恢复漫游。
多网卡路由注意事项
如果有线网卡配置了不属于自身子网的网关,ip route get <GATEWAY_IP> 可能错误地选择有线接口。排查 Wi‑Fi 时应使用 ping -I <WIFI_INTERFACE> 明确指定接口。
对只承担本地维护的有线连接,应单独评估是否删除错误网关并设置 ipv4.never-default yes。修改前先确认设备实际使用的云端出口,避免影响业务连接。
推荐的远程修改顺序
确认有备用管理链路,例如有线 SSH 或串口。
记录活动连接名、SSID、BSSID、IP、网关和路由。
每次只修改一类配置。
使用
nmcli connection up应用变更。检查
iw ... link、地址、路由和邻居表。双向 Ping,再测试 SSH 和业务连接。
确认持久化设置和开机自动连接。
验证成功后再清理旧配置或备份。