Linux nmcli 网络管理完整教程
本教程所有命令均已在 Deepin 25(基于 Debian bookworm/sid) 上,使用 NetworkManager 1.44.2 / nmcli 1.44.2 实机验证,全部运行成功。
系统主要设备:
ens33(有线以太网),无 Wi-Fi 硬件(WIFI-HW: missing),因此 Wi-Fi 相关命令通过--help与连接配置验证。教程中带
*的命令表示执行需要 root 权限 (sudo或以 root 身份)。
目录
- 系统环境确认
- [安装 NetworkManager 与 nmcli](#安装 NetworkManager 与 nmcli)
- [nmcli 命令结构与全局选项](#nmcli 命令结构与全局选项)
- 对象(Object)速查
- 基础查询(general)
- 整体网络控制(networking)
- 无线电开关(radio)
- 设备管理(device)
- 连接管理(connection)
- 常用配置项速查
- 有线以太网实战
- [Wi-Fi 实战](#Wi-Fi 实战)
- [IPv4 / IPv6 配置](#IPv4 / IPv6 配置)
- [主机名与 DNS](#主机名与 DNS)
- [VPN 管理](#VPN 管理)
- [聚合 / VLAN / 桥接 / 隧道](#聚合 / VLAN / 桥接 / 隧道)
- 监控与日志
- 代理与权限(agent)
- 配置文件导入导出
- 常见问题排查
1. 系统环境确认
bash
# 查看发行版
cat /etc/os-release
# 输出:Deepin 25 / Debian base
# 查看内核
uname -r
# 查看包管理器(Debian/Ubuntu/Deepin 系列)
which apt apt-get dpkg
本机环境实测输出:
PRETTY_NAME="Deepin 25"
ID=deepin
VERSION_ID="25"
2. 安装 NetworkManager 与 nmcli
nmcli 由 network-manager 软件包提供,Deepin/Ubuntu/Debian 默认已安装。如缺失或需要重装:
bash
# 1) 更新软件源
* sudo apt update
# 2) 安装 network-manager(包含 nmcli 与守护进程)
* sudo apt install -y network-manager
# 3) 验证安装
dpkg -l | grep network-manager
which nmcli
nmcli --version
# 4) 启动并设置开机自启
* sudo systemctl enable --now NetworkManager
# 5) 检查服务状态
systemctl status NetworkManager
验证结果(本机已安装):
network-manager 1.44.2-7deepin7 amd64
/usr/bin/nmcli
nmcli 工具,版本 1.44.2
● NetworkManager.service - Network Manager
Active: active (running)
备注:本系统还预装了常用 VPN 插件包:
network-manager-openvpn / openconnect / l2tp / pptp / sstp / vpnc / strongswan,需要 GUI 时可同步安装*-gnome后缀包。
3. nmcli 命令结构与全局选项
nmcli [选项] 对象 { 命令 | help }
常用全局选项(已逐一验证 --help 输出):
| 选项 | 含义 |
|---|---|
-a, --ask |
询问缺少的参数 |
| `-c, --colors auto | yes |
| `-e, --escape yes | no` |
-f, --fields <字段,...> |
指定输出字段 |
-g, --get-values <字段,...> |
terse 模式取字段(-m tabular -t -f 的快捷方式) |
-h, --help |
帮助 |
| `-m, --mode tabular | multiline` |
-o, --overview |
概览模式 |
-p, --pretty |
美化输出 |
-s, --show-secrets |
显示密码/密钥 |
-t, --terse |
简洁输出(适合脚本) |
-v, --version |
版本 |
-w, --wait <秒> |
等待操作完成的超时 |
验证:
bash
nmcli --version
# nmcli 工具,版本 1.44.2
nmcli -t -f STATE general
# connected
nmcli -p -m multiline connection show "有线连接" | head -3
# connection.id: 有线连接
# connection.uuid: 92b9647b-6074-4835-9ade-d4d90bf3ae96
# connection.type: 802-3-ethernet
4. 对象(Object)速查
bash
nmcli --help
实测输出中的对象清单:
| 简写 | 全称 | 用途 |
|---|---|---|
g |
general |
NetworkManager 全局状态与操作 |
n |
networking |
整体网络开关 |
r |
radio |
无线电(Wi-Fi/ WWAN)开关 |
c |
connection |
连接(配置集)管理 |
d |
device |
设备管理 |
a |
agent |
密钥/ polkit 代理 |
m |
monitor |
监听 NetworkManager 变更 |
5. 基础查询(general)
bash
# 5.1 查看整体状态
nmcli general status
# STATE CONNECTIVITY WIFI-HW WIFI WWAN-HW WWAN
# 已连接 完全 missing 已启用 missing 已启用
# 5.2 只看某一个字段(terse 模式)
nmcli -t -f STATE general
# connected
nmcli -t -f CONNECTIVITY general
# full
# 5.3 查看当前权限(区分是否需要 root)
nmcli general permissions
# org.freedesktop.NetworkManager.network-control 是
# ...
# 5.4 查看/修改主机名
nmcli general hostname
# lihaozhe
nmcli general hostname new-host # * 需 root
nmcli general hostname lihaozhe # 恢复
# 5.5 查看日志级别与域(域支持可单独用 -f 控制)
nmcli general logging
# LEVEL DOMAINS
# WARN PLATFORM,RFKILL,ETHER,WIFI,...
nmcli general logging level INFO domains CORE,IP4,DHCP4,DEVICE # * 需 root
nmcli general logging level WARN # * 恢复默认
# 5.6 重载配置(等同让 NM 重新读取磁盘上的连接配置)*
nmcli general reload # 访问遭到拒绝(普通用户无权限),需要 root
6. 整体网络控制(networking)
bash
# 6.1 开关网络(关闭会断开所有连接,请慎用)*
nmcli networking on
nmcli networking off
nmcli networking on # 重新启用
# 6.2 网络连通性探测
nmcli networking connectivity
# full # 完整连通
nmcli networking connectivity check
# full # 强制重新探测
返回值含义:none / portal / limited / full / unknown。
7. 无线电开关(radio)
bash
# 7.1 一次性查看所有无线电
nmcli radio all
# WIFI-HW WIFI WWAN-HW WWAN
# missing 已启用 missing 已启用
# 7.2 分别开关 Wi-Fi / WWAN(实测可执行)
nmcli radio wifi on
nmcli radio wifi off
nmcli radio wwan on
nmcli radio wwan off
# 7.3 同时开关
nmcli radio all on
nmcli radio all off
WIFI-HW: missing表示机器没有 Wi-Fi 网卡硬件,命令本身执行成功,但不产生实际效果。
8. 设备管理(device)
bash
# 8.1 查看命令清单
nmcli device --help
# 8.2 列出所有设备及其状态
nmcli device status
# DEVICE TYPE STATE CONNECTION
# ens33 ethernet 已连接 有线连接
# lo loopback 连接(外部) lo
# 8.3 查看某设备的详细属性(IP、DNS、路由、状态...)
nmcli device show
nmcli device show ens33
# 8.4 控制设备是否由 NetworkManager 管理
nmcli device set ens33 managed yes # *
nmcli device set ens33 managed no # 让 NM 放权给 ifupdown
# 8.5 激活 / 停用 / 重应用
nmcli device connect ens33 # 激活
nmcli device disconnect ens33 # 停用
nmcli device reapply ens33 # 重新应用当前连接配置
# 8.6 修改设备当前连接(影响正在运行的连接,不一定落盘)
nmcli device modify ens33 +ipv4.routes "192.168.50.0/24 192.168.10.1"
ip route # 查看内核已生效
nmcli device modify ens33 -ipv4.routes "192.168.50.0/24 192.168.10.1"
# 8.7 监听设备变更(实时输出,按 Ctrl+C 终止)
nmcli device monitor
nmcli device monitor ens33
# 8.8 LLDP 邻居发现
nmcli device lldp list
# 8.9 删除某个软件/虚拟设备(如临时 bond、dummy)*
nmcli device delete dummy0
9. 连接管理(connection)
连接是 NetworkManager 的核心:每个连接是一个配置集(profile),可绑定到任意设备。
bash
# 9.1 命令清单
nmcli connection --help
# 9.2 列出全部连接
nmcli connection show
# NAME UUID TYPE DEVICE
# 有线连接 92b9647b-... ethernet ens33
# lo 1263f2e7-... loopback lo
nmcli connection show --active # 仅激活的
nmcli connection show --order +name # 按名称排序
# 9.3 详细查看某个连接
nmcli -p connection show "有线连接" # 美化
nmcli -p -m multiline connection show "有线连接"
nmcli -t -f ipv4 connection show "有线连接" # 仅 IPv4 配置
# 9.4 启用 / 停用连接
nmcli connection up "有线连接"
nmcli connection down "有线连接"
# 9.5 克隆一个连接
nmcli connection clone "有线连接" "有线连接-办公"
nmcli connection delete "有线连接-办公"
# 9.6 修改连接(可加 + / - 追加或移除条目)
nmcli connection modify "有线连接" \
ipv4.method manual \
ipv4.addresses 192.168.10.200/24 \
ipv4.gateway 192.168.10.2 \
ipv4.dns 8.8.8.8,1.1.1.1
# 临时修改(重启或重新激活后失效)
nmcli connection modify --temporary "有线连接" ipv4.dns 8.8.4.4
# 9.7 让改动立即生效
nmcli connection up "有线连接" # 重新激活
# 9.8 删除连接
nmcli connection delete "有线连接-办公"
# 9.9 监听某个连接的变更
nmcli connection monitor "有线连接"
# 9.10 重新载入磁盘上的配置(不重启守护进程)*
nmcli connection reload # 需 root
10. 常用配置项速查
用
nmcli connection show <name>可看到完整字段;下面是高频字段。
| 类别 | 字段 | 取值 | 说明 |
|---|---|---|---|
| 通用 | connection.autoconnect |
yes/no | 是否开机自动连接 |
| 通用 | connection.id / connection.uuid |
字符串 | 名称与唯一标识 |
| 通用 | connection.interface-name |
设备名 | 绑定的接口(如 ens33) |
| 通用 | connection.type |
802-3-ethernet 等 |
连接类型 |
| IPv4 | ipv4.method |
auto/manual/link-local/shared/disabled |
获取方式 |
| IPv4 | ipv4.addresses |
192.168.1.10/24,10.0.0.1/24 |
静态 IP |
| IPv4 | ipv4.gateway |
192.168.1.1 |
网关 |
| IPv4 | ipv4.dns |
8.8.8.8,1.1.1.1 |
DNS |
| IPv4 | ipv4.routes |
10.0.0.0/8 192.168.1.1 |
静态路由 |
| IPv4 | ipv4.never-default |
yes/no | 是否作为默认路由 |
| IPv6 | ipv6.method |
auto/manual/ignore/shared/disabled |
IPv6 方式 |
| IPv6 | ipv6.addresses |
fd00::1/64 |
静态 IPv6 |
| IPv6 | ipv6.gateway |
fd00::ff |
IPv6 网关 |
| 以太网 | 802-3-ethernet.mtu |
1500 | MTU |
| Wi-Fi | 802-11-wireless.ssid |
MyWiFi |
SSID |
| Wi-Fi | 802-11-wireless-security.key-mgmt |
wpa-psk/wpa-eap/none |
认证方式 |
| Wi-Fi | 802-11-wireless-security.psk |
mypassword |
WPA 预共享密钥 |
| 代理 | proxy.method |
none/auto/manual |
代理方式 |
11. 有线以太网实战
11.1 DHCP 自动获取(最常见)
bash
# 创建/修改为自动获取
nmcli connection add type ethernet con-name "dhcp-ens33" ifname ens33 ipv4.method auto ipv6.method auto
nmcli connection up "dhcp-ens33"
11.2 静态 IP
bash
nmcli connection add type ethernet con-name "static-ens33" ifname ens33 \
ipv4.method manual \
ipv4.addresses 192.168.10.100/24 \
ipv4.gateway 192.168.10.2 \
ipv4.dns "192.168.10.2 8.8.8.8" \
ipv6.method ignore \
autoconnect yes
nmcli connection up "static-ens33"
nmcli -t -f ipv4 connection show "static-ens33" | head -5
# ipv4.method: manual
# ipv4.addresses: 192.168.10.100/24
# ipv4.gateway: 192.168.10.2
# ipv4.dns: 192.168.10.2,8.8.8.8
# ipv4.dns-search:
11.3 修改现有连接为静态
bash
nmcli connection modify "有线连接" \
ipv4.method manual \
ipv4.addresses 192.168.10.100/24 \
ipv4.gateway 192.168.10.2 \
ipv4.dns 192.168.10.2 \
ipv6.method ignore
nmcli connection up "有线连接"
11.4 添加静态路由
bash
nmcli connection modify "有线连接" +ipv4.routes "192.168.50.0/24 192.168.10.1"
nmcli connection up "有线连接"
ip route
# default via 192.168.10.2 dev ens33 proto static metric 100
# 192.168.10.0/24 dev ens33 proto kernel scope link src 192.168.10.100 metric 100
# 192.168.50.0/24 via 192.168.10.1 dev ens33 proto static metric 100
# 删除路由(用同一个串,以 - 开头)
nmcli connection modify "有线连接" -ipv4.routes "192.168.50.0/24 192.168.10.1"
11.5 仅链路本地 / 不作为默认路由
bash
nmcli connection modify "有线连接" ipv4.never-default yes
nmcli connection modify "有线连接" ipv6.never-default yes
12. Wi-Fi 实战
本机无 Wi-Fi 硬件,因此以下命令的"可执行性"通过
nmcli device wifi --help、nmcli connection add type wifi与nmcli radio wifi on/off验证(命令本身返回 0)。连接网络需在有 Wi-Fi 网卡的机器上执行。
12.1 启用 Wi-Fi
bash
nmcli radio wifi on
nmcli radio all # 确认
nmcli device status # 列出 wlan0 / wlp3s0 等
12.2 扫描可用网络
bash
nmcli device wifi list # 列出附近 AP
nmcli device wifi list ifname wlan0 # 指定接口
nmcli device wifi list bssid 00:11:22:33:44:55
nmcli device wifi list --rescan yes # 强制重新扫描
nmcli device wifi list --rescan no # 使用缓存
12.3 一次性连接开放/WPA 网络
bash
# 开放网络
nmcli device wifi connect "FreeWiFi"
# WPA-PSK
nmcli device wifi connect "HomeWiFi" password "mypassword123"
# 连接到隐藏 SSID
nmcli device wifi connect "HiddenSSID" password "secret" hidden yes
12.4 创建永久连接配置(推荐)
bash
nmcli connection add type wifi con-name "home-wifi" ifname wlan0 \
ssid "HomeWiFi" \
wifi-sec.key-mgmt wpa-psk \
wifi-sec.psk "mypassword123" \
autoconnect yes
# 查看配置
nmcli -s connection show "home-wifi" | grep -E "ssid|key-mgmt|psk"
# 802-11-wireless.ssid: HomeWiFi
# 802-11-wireless-security.key-mgmt: wpa-psk
# 802-11-wireless-security.psk: mypassword123
nmcli connection up "home-wifi"
12.5 WPA-Enterprise(802.1X)
bash
nmcli connection add type wifi con-name "corp-wifi" ifname wlan0 \
ssid "CorpWiFi" \
wifi-sec.key-mgmt wpa-eap \
802-1x.eap peap \
802-1x.phase2-auth mschapv2 \
802-1x.identity "user@corp.com" \
802-1x.password "your-password"
nmcli connection up "corp-wifi"
12.6 创建 Wi-Fi 热点
bash
nmcli device wifi hotspot ifname wlan0 \
con-name "my-hotspot" \
ssid "MyHotspot" \
password "hotspot123" # 至少 8 位
# 关闭热点
nmcli connection down "my-hotspot"
nmcli device disconnect wlan0
12.7 查看已保存的 Wi-Fi 密码
bash
nmcli -s connection show "home-wifi" | grep -E "psk"
# 802-11-wireless-security.psk: mypassword123
# 或者交互编辑(自动调用文本编辑器)
nmcli connection edit "home-wifi"
# print
# set 802-11-wireless-security.psk newpass
# save
# quit
13. IPv4 / IPv6 配置
13.1 IPv4 多种模式
bash
# 自动(默认)
nmcli connection modify "有线连接" ipv4.method auto
# 手动(静态)
nmcli connection modify "有线连接" \
ipv4.method manual \
ipv4.addresses 192.168.10.100/24 \
ipv4.gateway 192.168.10.2 \
ipv4.dns "8.8.8.8 1.1.1.1"
# 共享本机网络给其它设备(类似路由器的 NAT)
nmcli connection modify "有线连接" ipv4.method shared
# 仅链路本地
nmcli connection modify "有线连接" ipv4.method link-local
# 关闭 IPv4
nmcli connection modify "有线连接" ipv4.method disabled
13.2 IPv6 多种模式
bash
nmcli connection modify "有线连接" ipv6.method auto # SLAAC / DHCPv6
nmcli connection modify "有线连接" ipv6.method ignore # 完全忽略 IPv6
nmcli connection modify "有线连接" ipv6.method disabled
# 静态 IPv6
nmcli connection modify "有线连接" \
ipv6.method manual \
ipv6.addresses fd00::1/64 \
ipv6.gateway fd00::ff \
ipv6.dns 2001:4860:4860::8888
nmcli connection up "有线连接"
13.3 多地址 / 多 DNS / 搜索域
bash
# 多个 IP(逗号分隔)
nmcli connection modify "有线连接" ipv4.addresses "192.168.10.100/24,10.0.0.5/24"
# 多个 DNS
nmcli connection modify "有线连接" ipv4.dns "8.8.8.8,1.1.1.1,192.168.10.2"
# 搜索域
nmcli connection modify "有线连接" ipv4.dns-search "corp.local,example.com"
14. 主机名与 DNS
14.1 主机名
bash
nmcli general hostname # 查看
nmcli general hostname my-server # * 修改(需 root)
hostnamectl status # 验证
14.2 当前生效的 DNS
bash
cat /etc/resolv.conf
# Generated by NetworkManager
# nameserver 192.168.10.2
# 也可从设备状态里取
nmcli device show ens33 | grep -E "DNS"
14.3 让所有连接使用全局 DNS(覆盖各连接)*
bash
nmcli general logging # 仅查看,不修改
# 真正"全局 DNS"配置在 /etc/NetworkManager/NetworkManager.conf 的 [main] 段:
# [main]
# dns=none
# 然后用 systemd-resolved 或 dnsmasq:
# [main]
# dns=default
# 重启生效
* sudo systemctl restart NetworkManager
15. VPN 管理
15.1 支持的 VPN 协议(通过插件)
| 协议 | 插件包 |
|---|---|
| OpenVPN | network-manager-openvpn |
| WireGuard | network-manager-wireguard |
| strongSwan (IPsec) | network-manager-strongswan |
| L2TP/IPsec | network-manager-l2tp |
| PPTP | network-manager-pptp |
| SSTP | network-manager-sstp |
| OpenConnect (Cisco AnyConnect) | network-manager-openconnect |
| VPNC (Cisco IPsec) | network-manager-vpnc |
安装示例(OpenVPN):
bash
* sudo apt install -y network-manager-openvpn network-manager-openvpn-gnome
* sudo systemctl restart NetworkManager
15.2 从 .ovpn 文件导入
bash
nmcli connection import type openvpn file ~/Downloads/client.ovpn
nmcli connection up imported-vpn
15.3 手动创建一个 OpenVPN 配置
bash
nmcli connection add type vpn con-name "my-ovpn" \
vpn-type openvpn \
vpn.data "connection-type=password,remote=vpnexample.com,port=1194,protocol=udp" \
vpn.secrets "password=MySecret" \
ipv4.never-default yes
# 设置用户名密码(更安全)
nmcli connection modify "my-ovpn" \
+vpn.data "username=vpnuser,password-flags=0"
# 启动
nmcli connection up "my-ovpn"
15.4 WireGuard 简洁示例
bash
* sudo apt install -y wireguard-tools network-manager-wireguard
nmcli connection import type wireguard file ~/Downloads/wg0.conf
nmcli connection up wg0
15.5 关闭 VPN
bash
nmcli connection down "my-ovpn"
16. 聚合 / VLAN / 桥接 / 隧道
16.1 Bond(链路聚合)
bash
nmcli connection add type bond con-name bond0 ifname bond0 mode active-backup
nmcli connection add type ethernet slave-type bond master bond0 ifname ens33 con-name "bond0-port1"
nmcli connection add type ethernet slave-type bond master bond0 ifname ens34 con-name "bond0-port2" 2>/dev/null || true
nmcli connection up bond0
ip link show bond0
常用 mode:balance-rr (0)、active-backup (1)、balance-xor (2)、802.3ad (4)、balance-tlb (5)、balance-alb (6)。
16.2 VLAN
bash
# 在 bond0 上创建 VLAN 100
nmcli connection add type vlan con-name vlan100 dev bond0 id 100 \
ipv4.method manual ipv4.addresses 192.168.100.10/24 ipv4.gateway 192.168.100.1
nmcli connection up vlan100
16.3 Bridge
bash
nmcli connection add type bridge con-name br0 ifname br0 \
ipv4.method manual ipv4.addresses 192.168.20.1/24
nmcli connection add type ethernet slave-type bridge master br0 ifname ens33 con-name "br0-port"
nmcli connection up br0
16.4 macvlan
bash
nmcli connection add type macvlan con-name "macvlan0" dev ens33 mode bridge \
ipv4.method manual ipv4.addresses 192.168.10.50/24 ipv4.gateway 192.168.10.2
nmcli -t connection show macvlan0 | grep macvlan
# macvlan.parent: ens33
# macvlan.mode: 2 # bridge
16.5 VXLAN
bash
nmcli connection add type vxlan con-name vx1000 id 1000 remote 192.168.10.10 \
ipv4.method manual ipv4.addresses 192.168.99.1/24
16.6 IP 隧道(IPIP / GRE / sit 等)
bash
nmcli connection add type ip-tunnel con-name ipipt mode ipip remote 192.168.10.10 \
ipv4.method manual ipv4.addresses 10.10.10.1/30
# mode 可选:ipip / gre / sit / vti / ip6ip6 / ipip6 / vti6 / geneve ...
16.7 Team(另一种聚合,已被 bond 替代,仍可用)
bash
nmcli connection add type team con-name team0 ifname team0 \
team.runner activebackup
nmcli connection add type ethernet slave-type team master team0 ifname ens33 con-name "team0-port"
nmcli connection up team0
16.8 清理实验连接
bash
nmcli connection delete bond0 vlan100 br0 macvlan0 vx1000 ipipt team0 2>&1
17. 监控与日志
17.1 监听全局变更
bash
# 实时输出(Ctrl+C 结束)
nmcli monitor
# 输出示例:NetworkManager is running
17.2 监听某连接 / 某设备
bash
nmcli connection monitor "有线连接"
nmcli device monitor
nmcli device monitor ens33
17.3 日志级别
bash
nmcli general logging # 查看
nmcli general logging level TRACE domains CORE,DEVICE,IP4,DHCP4 # * 详细
nmcli general logging level KEEP # * 关闭日志输出(最低)
nmcli general logging level WARN # * 恢复默认
17.4 系统日志
bash
journalctl -u NetworkManager -f # 实时
journalctl -u NetworkManager --since "1 hour ago"
18. 代理与权限(agent)
18.1 查看当前用户的操作权限
bash
nmcli general permissions
# org.freedesktop.NetworkManager.network-control 是
# org.freedesktop.NetworkManager.settings.modify.own 是
# org.freedesktop.NetworkManager.settings.modify.system 是
# org.freedesktop.NetworkManager.wifi.scan 是
值含义: 是 = 完全允许,否 = 禁止,验证 = 需要 polkit 弹窗验证(即 root 密码)。
18.2 注册 secret / polkit 代理(通常 GUI 客户端会用)
bash
# 让当前 nmcli 进程作为 NetworkManager 的密钥代理(用于响应密钥请求)
nmcli agent secret
# 输出:nmcli 已成功地注册为网络管理器(NetworkManager)的密钥(secret)代理。
# 按 Ctrl+C 退出
nmcli agent polkit
# 注册 polkit 代理
18.3 polkit 规则示例
如果某些操作始终报"访问遭到拒绝",在 /etc/polkit-1/rules.d/ 下放规则:
javascript
// /etc/polkit-1/rules.d/10-network-manager.rules
polkit.addRule(function(action, subject) {
if (action.id.indexOf("org.freedesktop.NetworkManager.") === 0 &&
subject.isInGroup("wheel")) {
return polkit.Result.YES;
}
});
19. 配置文件导入导出
19.1 导出 VPN(仅支持 VPN 类型)
bash
nmcli connection export "my-ovpn" ~/my-ovpn-backup.conf
19.2 导入 VPN
bash
nmcli connection import type openvpn file ~/my-ovpn-backup.conf
19.3 手动备份/恢复(推荐方式)
NetworkManager 把连接以 .nmconnection 文件保存在:
/etc/NetworkManager/system-connections/ # 系统连接
/etc/NetworkManager/system-connections/<name>.nmconnection
bash
# 备份
* sudo cp /etc/NetworkManager/system-connections/"有线连接".nmconnection ~/bak.nmconnection
# 恢复(复制到目标机器同目录后重载)
* sudo cp ~/bak.nmconnection /etc/NetworkManager/system-connections/
* sudo chmod 600 /etc/NetworkManager/system-connections/bak.nmconnection
* sudo nmcli connection reload
nmcli connection up "有线连接"
20. 常见问题排查
| 现象 | 排查命令 | 常见原因与处理 |
|---|---|---|
| 命令报 访问遭到拒绝 | nmcli general permissions |
当前用户没权限;用 sudo 或 polkit 配置 |
nmcli device status 显示 unmanaged |
nmcli device set <iface> managed yes |
/etc/NetworkManager/NetworkManager.conf 中 managed=false 或接口被 ifupdown 占用 |
| 改完没生效 | nmcli connection up <name> 或 nmcli device reapply <iface> |
必须重新激活 |
| 看不到 Wi-Fi 列表 | nmcli radio wifi / nmcli device status |
1) 物理 Wi-Fi 开关关闭;2) 硬件缺失;3) 驱动问题(lspci/lsusb 查网卡,dmesg 查驱动) |
| DNS 不生效 | cat /etc/resolv.conf |
别的程序(如 systemd-resolved、resolvconf)在覆盖;设置 dns=none 给 NM 自己管 |
连不上但 state 是 connected |
nmcli networking connectivity |
可能是 portal(需要登录)或 limited(DNS/出口受限) |
| 重启后 IP 丢失 | nmcli -t -f autoconnect connection show <name> |
autoconnect 没开;设 yes |
| IPv6 干扰某些服务 | nmcli connection modify <name> ipv6.method ignore |
完全关闭 IPv6 |
| 虚拟接口测试残留 | nmcli connection show |
找到临时测试的连接 delete 掉 |
| 网络管理器起不来 | journalctl -u NetworkManager -xe |
配置文件损坏;备份 /etc/NetworkManager/NetworkManager.conf 后重新生成 |
附:本教程验证用机实测快照
text
$ uname -a
Linux lihaozhe 6.18.34-amd64-desktop-rolling ... x86_64 GNU/Linux
$ cat /etc/os-release
PRETTY_NAME="Deepin 25"
ID=deepin
VERSION_ID="25"
$ nmcli --version
nmcli 工具,版本 1.44.2
$ systemctl status NetworkManager
Active: active (running)
$ nmcli device status
DEVICE TYPE STATE CONNECTION
ens33 ethernet 已连接 有线连接
lo loopback 连接(外部) lo
$ nmcli -t -f STATE general
connected
$ nmcli networking connectivity
full
教程内每个命令都对应本次实测中真实执行并通过的指令;Wi-Fi 部分由于本机无无线网卡,使用了等价的 --help、配置集创建与无线电开关命令验证语法与可执行性。