《 nmcli网络管理学习》

一、学习目标

本指南专为网络管理零基础的新手设计,目标是让你掌握 Rocky Linux 9 中通过 nmcli命令行工具完成网络配置的核心技能,包括查看网络状态、管理连接、配置静态 IP/DNS、无线网络连接等,同时理解相关服务原理和配置文件作用。


二、基础概念与准备工作

1. 为什么需要学网络管理?

  • • 服务器/工作站需要联网才能提供服务(如 Web、数据库)或下载更新。

  • • 正确配置 IP 地址、网关、DNS 是联网的基础。

  • • Rocky Linux 9 默认使用 ​NetworkManager ​ 管理网络(替代了传统的 network 服务),而 nmcli是它的命令行工具,比图形界面更适合服务器环境(稳定、可脚本化)。

2. 重要注意事项

  • • ​禁止冲突操作 ​:在使用 nmcli配置网络前,不要手动用 ip addrifconfig等命令直接操作网卡接口,否则会导致配置冲突(例如 IP 被覆盖)。

  • • ​服务必须运行 ​:所有 nmcli命令生效的前提是 ​NetworkManager 服务处于运行状态​(后续会教如何检查和管理该服务)。


三、NetworkManager 服务管理(基础操作)

1. 服务状态检查与控制

NetworkManager 是管理网络的"大脑",通过以下命令控制其运行:

需求 命令示例 说明
查看服务运行状态 systemctl status NetworkManager 若显示 "active (running)" 表示正在运行;若未运行,需启动。
启动服务 systemctl start NetworkManager 首次安装后或服务意外停止时使用。
重启服务 systemctl restart NetworkManager 修改网络配置后,必须重启服务使配置生效。
停止服务 systemctl stop NetworkManager 谨慎使用!停止后所有网络连接会断开(仅调试时用)。
设置开机自动启动 systemctl enable NetworkManager 确保服务器重启后网络自动管理。
禁止开机自动启动 systemctl disable NetworkManager 一般不建议禁用(除非明确需要其他网络管理方式)。
检查是否开机自启 systemctl is-enabled NetworkManager 返回 "enabled" 表示开机启动。

💡 小技巧:执行 systemctl命令后,若提示权限不足(如普通用户),需在命令前加 sudo(例如 sudo systemctl restart NetworkManager)。


四、nmcli 命令详解(核心工具)

1. 命令基本结构

nmcli的命令格式遵循以下规则:

​**nmcli [选项] 对象 {命令 | help}**​

  • • ​对象(OBJECT)​​:指定操作的网络相关组件,常见有:

    • general(网络整体状态,可简写为 g

    • device(物理网卡/无线网卡等设备,可简写为 d

    • connection(网络连接配置,可简写为 c

  • • ​命令(COMMAND)​ ​:对对象的具体操作,如查看状态(status)、显示详情(show)、启用(up)、禁用(down)等。

  • • ​选项(OPTIONS)​​:控制输出格式或行为(后续会详细介绍)。

📌 示例:查看 NetworkManager 整体状态(简写为 nmcli g

复制代码
nmcli general status  # 完整写法
nmcli g               # 简写(等价)

2. 常用选项(控制输出格式)

通过选项可以调整命令的输出样式,常用选项如下:

选项 缩写 说明
简洁格式(无表头) -t--terse 仅输出关键数据,无列名和分隔线(适合脚本处理)。
指定显示字段 -f--fields 指定要显示的字段(多个字段用逗号分隔,例如 -f NAME,STATE)。
美观格式(带表头) -p--pretty 输出带表头和分隔线的易读格式(默认推荐,适合人工查看)。
详细调试信息 -v--verbose 显示详细过程(调试用,普通用户较少用)。
帮助信息 -h--help 查看命令帮助(例如 nmcli connection help查看连接相关命令帮助)。

📌 示例:以美观格式显示所有连接(简写为 nmcli c s -p

复制代码
nmcli connection show -p  # 完整写法
nmcli c s -p            # 简写(等价)

3. 相关系统服务指令(补充)

除了 nmcli,还需掌握 NetworkManager 服务的底层控制命令(通过 systemctl):

功能 命令示例
查看 NetworkManager 状态 systemctl status NetworkManager
启动服务 systemctl start NetworkManager
重启服务 systemctl restart NetworkManager
停止服务 systemctl stop NetworkManager
设置开机自启 systemctl enable NetworkManager
禁止开机自启 systemctl disable NetworkManager
检查是否开机自启 systemctl is-enabled NetworkManager

五、常用操作场景实战

1. 查看网络整体状态

(1)检查 NetworkManager 是否接管网络
复制代码
nmcli networking  # 或简写为 nmcli n
  • • ​作用​:确认 NetworkManager 是否正在管理网络(若未接管,可能需手动启用)。
(2)查看网络连接状态(五种状态)
复制代码
nmcli n connectivity  # 或 nmcli general connectivity
  • • ​返回结果说明​:

    • full:完全连接(正常上网)。

    • limited:已连接但无法访问互联网(例如局域网内但无外网路由)。

    • portal:已连接但需要网页认证(例如酒店/机场 WiFi)。

    • none:未连接到任何网络。

    • unknown:状态未知。

(3)开启/关闭网络总开关
复制代码
nmcli n on    # 开启网络管理(允许所有连接尝试联网)
nmcli n off   # 关闭网络管理(所有连接将被禁用)

2. 查看与管理网络设备(网卡)

(1)显示所有网络设备状态
复制代码
nmcli device status  # 或简写为 nmcli d
  • • ​输出示例​:

    复制代码
    DEVICE  TYPE      STATE      CONNECTION 
    ens33   ethernet  connected  ens33      
    wlan0   wifi      disconnected  --        
    lo      loopback  unmanaged  --
    • • ​关键列​:

      • DEVICE:网卡名称(如 ens33、eth0)。

      • TYPE:设备类型(ethernet 以太网、wifi 无线网卡、loopback 本地环回)。

      • STATE:当前状态(connected 已连接、disconnected 未连接、unmanaged 未被 NetworkManager 管理)。

      • CONNECTION:当前使用的连接配置名称(若未连接则为空)。

(2)查看某个设备的详细信息
复制代码
nmcli device show ens33  # 替换 ens33 为你的网卡名
  • • ​输出内容​:包含 MAC 地址、IP 地址、网关、DNS 等详细信息(调试用)。
(3)连接/断开设备
复制代码
# 启动设备(激活连接,需 root 权限)
sudo nmcli device connect ens33  # 或简写为 sudo nmcli d c ens33

# 断开设备(停止连接,需 root 权限)
sudo nmcli device disconnect ens33  # 或简写为 sudo nmcli d d ens33
(4)无线网络管理(如果服务器有无线网卡)
复制代码
# 列出附近 WiFi 信号
nmcli device wifi list

# 连接 WiFi(替换 SSID 和密码)
nmcli device wifi connect "你的WiFi名称" password "你的密码"

# 断开 WiFi
nmcli device wifi disconnect

3. 管理网络连接(核心重点!)

网络连接(Connection)是 NetworkManager 中的配置模板,定义了如何连接网络(如 IP 地址、网关、DNS 等)。一个网卡可以有多个连接配置(例如一个有线网卡配置静态 IP 和 DHCP 两个连接)。

(1)查看所有连接
复制代码
nmcli connection show  # 或简写为 nmcli c s
  • • ​输出内容​:包含所有已保存的连接名称(如 ens33、Wired connection 1)、UUID(唯一标识)、类型(ethernet/wifi)、设备名等。
(2)查看活动连接(当前正在使用的)
复制代码
nmcli connection show --active  # 或简写为 nmcli c s -a
(3)查看某个连接的详细信息
复制代码
nmcli connection show ens33  # 替换 ens33 为你的连接名或 UUID
# 简写:nmcli c s ens33
(4)启用/禁用连接
复制代码
# 启动连接(如 ens33,需 root 权限)
sudo nmcli connection up ens33  # 或简写为 sudo nmcli c up ens33

# 停止连接(如 ens33,需 root 权限)
sudo nmcli connection down ens33  # 或简写为 sudo nmcli c down ens33
(5)删除连接(谨慎操作!)
复制代码
sudo nmcli connection delete ens33  # 删除名为 ens33 的连接配置

4. 修改连接配置(静态 IP/DNS/网关)

通过 nmcli connection modify可以修改已存在的连接配置(永久生效)。

(1)命令格式
复制代码
nmcli connection modify 连接名 [ + | - ] 选项 选项值
# 简写:nmcli c m 连接名 [ + | - ] 选项 选项值
  • • ​关键说明​:

    • • ​必须按顺序配置 ​:若要设置静态 IP 的网关/DNS,需先确保 IPv4 配置方式为手动(ipv4.method manual)。

    • • ​选项前缀​:

      • • 无符号(如 ipv4.method):表示设置该选项的值(覆盖原有值)。

      • +(如 +ipv4.addresses):表示添加一个额外的值(例如多个 IP 地址)。

      • -(如 -ipv4.dns):表示删除指定的值(较少用)。

(2)常用配置示例
复制代码
# 修改 IPv4 地址和子网掩码(如 192.168.80.10/24)
nmcli c m ens33 ipv4.addresses 192.168.80.10/24

# 添加第二个 IP 地址(如 192.168.80.100/24)
nmcli c m ens33 +ipv4.addresses 192.168.80.100/24

# 设置为静态 IP(默认是自动 dhcp,需先改这个!)
nmcli c m ens33 ipv4.method manual

# 修改默认网关
nmcli c m ens33 ipv4.gateway 192.168.80.2

# 修改 DNS(多个用空格隔开)
nmcli c m ens33 ipv4.dns 192.168.80.2

# 添加额外 DNS(如 223.5.5.5)
nmcli c m ens33 +ipv4.dns 223.5.5.5

# 禁用 IPv6(可选值:disabled/auto/manual)
nmcli c m ens33 ipv6.method ignored

# 设置开机自动连接(默认通常是 yes)
nmcli c m ens33 connection.autoconnect yes
(3)重置选项为默认值

如果修改错了,可以通过空引号 ""将选项恢复默认:

复制代码
nmcli c m ens33 ipv4.method ""  # 恢复 IPv4 配置方式为默认(通常是 auto/dhcp)
(4)查看所有可配置选项
复制代码
man 5 nm-settings-nmcli  # 打开手册,重点查看 "connection setting" 和 "ipv4 setting" 部分
  • • 手册中会详细说明每个选项的含义(例如 ipv4.addresses格式、ipv4.gateway作用等)。

5. 新增连接配置(手动创建新配置)

当需要为网卡添加一个新的连接模板(例如同时保留 DHCP 和静态 IP 两种配置)时,使用 nmcli connection add

(1)命令格式
复制代码
nmcli connection add type 连接类型 选项 选项值
# 简写:nmcli c a type 连接类型 选项 选项值
  • • ​常用连接类型 ​:以太网→ethernet(或 802-3-ethernet)。
(2)创建以太网连接的完整示例
复制代码
nmcli c a type ethernet \
  con-name ens36 \          # 自定义连接名(如 ens36)
  ifname ens36 \            # 网卡设备名(必须和实际一致!)
  ipv4.addresses 192.168.1.100/24 \  # IP 和子网掩码
  ipv4.gateway 192.168.1.1 \         # 网关
  ipv4.dns "8.8.8.8 8.8.4.4" \       # DNS
  ipv4.method manual                 # 静态 IP
  • • ​关键选项说明​:

    • con-name(或 connection.id):连接的名称(用于后续通过 nmcli c up ens36启动)。

    • ifname(或 connection.interface-name):网卡设备名(如 ens36,必须和实际硬件一致)。

    • ipv4.method:配置方式(manual静态 IP,auto自动 DHCP)。

    • autoconnect:是否开机自动连接(yes/no,默认通常是 yes)。

(3)分步添加(更灵活)

如果不想一次性输入所有参数,可以分步操作:

复制代码
# 1. 先创建基础连接
nmcli c a type ethernet con-name ens36 ifname ens36

# 2. 配置 IP 地址
nmcli c mod ens36 ipv4.addresses 192.168.1.100/24

# 3. 配置 DNS
nmcli c mod ens36 ipv4.dns "8.8.8.8 8.8.4.4"

# 4. 设置为静态 IP
nmcli c mod ens36 ipv4.method manual

# 5. 激活连接
nmcli c up ens36
(4)避免冲突
  • • 连接名(如 ens36)和网卡设备名(如 ens36)不能和其他连接重复!

  • • 修改后可能需要重启 NetworkManager(systemctl restart NetworkManager)或系统使配置生效。


6. 重载配置文件

当通过文本编辑器修改了 NetworkManager 的配置文件后,需要重载配置使其生效。

(1)重载所有连接
复制代码
nmcli connection reload  # 或简写为 nmcli c reload
(2)重载指定连接
复制代码
nmcli connection load /etc/NetworkManager/system-connections/ens33.nmconnection
# 或简写:nmcli c l ifcfg-ens33
  • • ​配置文件路径 ​:Rocky 9 中 NetworkManager 的连接配置文件默认存放在 /etc/NetworkManager/system-connections/目录下,文件名格式为 连接名.nmconnection(例如 ens33.nmconnection)。

六、网络配置方法对比(四种方式)

方法 1:使用 nmcli 命令(推荐)

  • • ​优点​:命令行操作,可脚本化,适合服务器。

  • • ​步骤 ​:通过 nmcli connection modify修改连接参数(如 IP、DNS),然后 reload+ up生效。

方法 2:使用 nmtui 文本界面工具(适合不熟悉命令的用户)

  • • ​操作流程​:

      1. 运行 nmtui命令(进入文本图形界面)。
      1. 选择 "Edit a connection" → 选择要编辑的网络接口(如 ens33)。
      1. 设置 IP(静态/动态)、网关、DNS 等参数 → 点击 "OK" 保存。
      1. 返回主界面选择 "Activate a connection" 启用配置。

方法 3:直接修改配置文件(高级用户)

  • • ​配置文件路径 ​:Rocky 9 中 NetworkManager 的连接配置文件存放在 /etc/NetworkManager/system-connections/目录下,文件名格式为 连接名.nmconnection(例如 ens33.nmconnection)。

  • • ​关键配置字段​:

    • [ipv4]部分:设置 method=manual(静态)、addresses=IP/子网掩码gateway=网关dns=DNS服务器

    • [connection]部分:设置 id=连接名interface-name=网卡名autoconnect=yes(开机自启)。

方法 4:临时用 ip 命令(仅测试用,重启失效)

  • • ​设置静态 IP​:

    复制代码
    ip addr add 192.168.1.10/24 dev ens33
  • • ​设置默认网关​:

    复制代码
    ip route add default via 192.168.1.2 dev ens33
  • • ​配置 DNS ​(临时):编辑 /etc/resolv.conf(但重启后会被覆盖,不推荐长期使用)。

    复制代码
    nameserver 8.8.8.8
    nameserver 114.114.114.114

⚠️ 注意:方法 4 的配置在系统重启后会丢失,生产环境请优先用前三种方法!

七、核心命令速查表

需求 命令示例(简化版) 说明
查看 NetworkManager 状态 nmcli g 等同于 nmcli general status
查看设备状态 nmcli d 显示所有网卡状态
查看连接列表 nmcli c s 显示所有保存的连接
启动连接 nmcli c up ens33 启用名为 ens33 的连接
停止连接 nmcli c down ens33 禁用名为 ens33 的连接
修改 IP(静态) nmcli c m ens33 ipv4.method manual nmcli c m ens33 ipv4.addresses 192.168.1.10/24 nmcli c m ens33 ipv4.gateway 192.168.1.1 nmcli c m ens33 ipv4.dns 8.8.8.8 必须按顺序设置(先 method manual)
新增连接 nmcli c a type ethernet con-name ens36 ifname ens36 ipv4.method manual ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.dns 8.8.8.8 一次性创建静态 IP 连接
重载配置 nmcli c reload 使修改后的配置文件生效