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

NetworkManager 运维教程 / 第 1 章:NetworkManager 概述

第 1 章:NetworkManager 概述

1.1 什么是 NetworkManager

NetworkManager(以下简称 NM)是 Red Hat 于 2004 年发起的网络管理守护进程,旨在为 Linux 桌面和服务器环境提供动态、自动化的网络配置管理。如今,NM 已成为绝大多数主流 Linux 发行版的默认网络管理方案。

NM 的核心目标:

  • 自动检测可用网络连接
  • 动态切换最优网络(如从有线切换到 WiFi)
  • 统一接口管理有线、无线、VPN、蓝牙等多种连接类型
  • 用户友好,通过 GUI、TUI、CLI 多种方式交互
# 查看当前 NM 版本
NetworkManager --version
# 输出示例:1.44.2

# 查看运行状态
systemctl status NetworkManager

1.2 核心架构

NetworkManager 采用分层架构设计,各组件职责清晰:

┌─────────────────────────────────────────────────┐
│                  用户交互层                       │
│  nmcli │ nmtui │ nm-applet │ GNOME/KDE 网络面板  │
├─────────────────────────────────────────────────┤
│              D-Bus 接口层                        │
│         org.freedesktop.NetworkManager           │
├─────────────────────────────────────────────────┤
│            NetworkManager 守护进程                │
│  ┌──────────┬──────────┬──────────┬───────────┐  │
│  │ 连接管理  │ 设备管理  │ DNS 管理  │ VPN 管理  │  │
│  └──────────┴──────────┴──────────┴───────────┘  │
├─────────────────────────────────────────────────┤
│                  插件层                          │
│  ifcfg-rh │ keyfile │ ifupdown │ cloud-setup    │
├─────────────────────────────────────────────────┤
│              系统 / 内核层                       │
│  udev │ wpa_supplicant │ dhclient │ ip │ route  │
└─────────────────────────────────────────────────┘

核心组件说明

组件作用
NetworkManager 守护进程核心服务,负责设备发现、连接管理、DNS 配置
nmcli命令行客户端,适合脚本化和远程管理
nmtui基于 curses 的文本交互界面
nm-applet桌面系统托盘图标(GNOME/KDE)
D-Bus进程间通信接口,供 GUI 和脚本调用
插件系统存储后端(keyfile、ifcfg-rh、ifupdown)
dispatcher网络事件触发脚本系统

连接(Connection)与设备(Device)的关系

这是 NM 中最核心的抽象模型:

  • Device(设备):物理或虚拟网络接口,如 eth0wlan0br0
  • Connection(连接):一组网络配置参数的集合,可以绑定到设备上
  • 一个设备同一时刻只能激活一个连接
  • 一个连接可以被克隆、导出、在不同设备间复用
# 查看所有设备
nmcli device status

# 查看所有连接(包括未激活的)
nmcli connection show

# 查看当前活跃连接
nmcli connection show --active

1.3 与其他方案的对比

三大主流网络管理方案

特性NetworkManagersystemd-networkdifupdown
默认发行版Ubuntu Desktop, Fedora, RHEL, Debian (Desktop)Ubuntu Server (22.04+), CoreOSDebian (传统), Ubuntu (旧版)
管理方式GUI/TUI/CLI/D-Bus配置文件/etc/network/interfaces
动态网络✅ 优秀⚠️ 有限❌ 静态
WiFi 支持✅ 内建❌ 需 wpa_supplicant❌ 需外部工具
VPN 集成✅ 丰富插件❌ 不支持❌ 不支持
桌面友好✅ 极佳❌ 不适合❌ 不适合
服务器友好✅ 良好✅ 极佳✅ 简单场景
容器/云✅ cloud-setup✅ 原生支持❌ 不适合
学习曲线中等较陡简单
配置目录/etc/NetworkManager/system-connections//etc/systemd/network//etc/network/interfaces

NetworkManager vs systemd-networkd

systemd-networkd 的优势在于:

  • 更轻量,适合最小化服务器环境
  • 与 systemd 生态深度集成
  • 配置文件格式统一(.network.netdev.link
  • 启动速度更快

NetworkManager 的优势在于:

  • 动态网络管理能力(笔记本、移动场景)
  • WiFi、VPN、蓝牙等复杂连接类型的一站式管理
  • 丰富的用户交互工具
  • 更成熟的桌面集成

实际建议

  • 桌面/笔记本 → NetworkManager
  • 最小化服务器/容器宿主机 → systemd-networkd
  • 已有 ifupdown 的传统服务器 → 可继续使用,或迁移至 NM

NetworkManager vs ifupdown

ifupdown 是 Debian 系传统的网络配置方案,通过 /etc/network/interfaces 文件定义网络:

# ifupdown 典型配置
# /etc/network/interfaces
auto eth0
iface eth0 inet static
    address 192.168.1.100/24
    gateway 192.168.1.1

NM 等效配置

nmcli connection modify "Wired connection 1" \
    ipv4.method manual \
    ipv4.addresses 192.168.1.100/24 \
    ipv4.gateway 192.168.1.1
对比项ifupdownNetworkManager
热切换不支持支持
自动检测不支持支持
多连接配置不方便原生支持
WiFi 管理需 wpa_supplicant 手动配置内建支持
学习成本

1.4 适用场景分析

推荐使用 NetworkManager 的场景

场景原因
笔记本电脑自动切换有线/WiFi,电源管理集成
开发工作站频繁切换网络环境,VPN 集成
桌面 Linux图形化管理,与桌面环境深度集成
多网卡服务器需要灵活管理 bond、bridge、VLAN
混合云环境cloud-setup 插件自动配置云实例网络
从传统方案迁移可兼容导入 ifcfg 和 interfaces 配置

不推荐使用 NetworkManager 的场景

场景更好的替代方案原因
极简服务器systemd-networkd更轻量,启动更快
嵌入式设备systemd-networkd 或手动配置资源占用更低
容器内部无需网络管理器网络由运行时管理
高性能网络dpdk / SR-IOV 专用方案NM 不适合高频网络操作

生产环境中的定位

                    ┌─────────────┐
                    │  你的场景?   │
                    └──────┬──────┘
                           │
            ┌──────────────┼──────────────┐
            ▼              ▼              ▼
     ┌──────────┐  ┌──────────────┐  ┌──────────┐
     │  桌面端   │  │  服务器       │  │  容器     │
     │  笔记本   │  │              │  │  嵌入式   │
     └────┬─────┘  └──────┬───────┘  └────┬─────┘
          │               │               │
          ▼               ▼               ▼
    NetworkManager   需要动态网络?    systemd-networkd
          │          ┌───┴───┐        或无需管理器
          │         Yes     No
          │          │       │
          ▼          ▼       ▼
     首选方案    NM 也可以   systemd-networkd

1.5 NM 的生命周期

理解 NM 的工作流程有助于后续的故障排查:

系统启动
  │
  ▼
systemd 启动 NetworkManager.service
  │
  ▼
加载插件(keyfile / ifcfg-rh / ifupdown)
  │
  ▼
扫描 /etc/NetworkManager/system-connections/ 下的连接文件
  │
  ▼
通过 udev 发现网络设备
  │
  ▼
按优先级自动激活匹配的连接
  │
  ▼
运行 dispatcher 脚本(up 事件)
  │
  ▼
配置 DNS(内建 / systemd-resolved / dnsmasq)
  │
  ▼
服务就绪,响应 D-Bus 请求

1.6 关键文件与目录

路径说明
/etc/NetworkManager/NetworkManager.conf主配置文件
/etc/NetworkManager/system-connections/连接配置存储目录
/etc/NetworkManager/dispatcher.d/Dispatcher 脚本目录
/etc/NetworkManager/conf.d/配置片段目录(推荐)
/var/lib/NetworkManager/运行时状态数据
/var/lib/NetworkManager/secret_key内部密钥
/var/lib/NetworkManager/seen-bssids已连接过的 WiFi BSSID
/run/NetworkManager/运行时文件(PID、lease 等)
# 快速查看 NM 主要文件
ls -la /etc/NetworkManager/
ls -la /etc/NetworkManager/system-connections/
ls -la /etc/NetworkManager/dispatcher.d/

1.7 本章小结

要点说明
NM 是什么Linux 上最广泛使用的动态网络管理服务
核心模型Device(设备)+ Connection(连接)的抽象
核心优势动态管理、WiFi/VPN 集成、多工具支持
最佳场景桌面、笔记本、多网卡服务器、混合云
替代方案systemd-networkd(轻量服务器)、ifupdown(传统简单场景)

扩展阅读