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(设备):物理或虚拟网络接口,如
eth0、wlan0、br0 - Connection(连接):一组网络配置参数的集合,可以绑定到设备上
- 一个设备同一时刻只能激活一个连接
- 一个连接可以被克隆、导出、在不同设备间复用
# 查看所有设备
nmcli device status
# 查看所有连接(包括未激活的)
nmcli connection show
# 查看当前活跃连接
nmcli connection show --active
1.3 与其他方案的对比
三大主流网络管理方案
| 特性 | NetworkManager | systemd-networkd | ifupdown |
|---|---|---|---|
| 默认发行版 | Ubuntu Desktop, Fedora, RHEL, Debian (Desktop) | Ubuntu Server (22.04+), CoreOS | Debian (传统), 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
| 对比项 | ifupdown | NetworkManager |
|---|---|---|
| 热切换 | 不支持 | 支持 |
| 自动检测 | 不支持 | 支持 |
| 多连接配置 | 不方便 | 原生支持 |
| 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(传统简单场景) |