NetworkManager服务详解
一、核心组件
1.NetworkManager 守护进程:
- 主服务进程,运行在后台,负责监控网络设备、管理连接、处理 D-Bus 请求。
systemctl status NetworkManager
2.nmcli (NetworkManager Command Line Interface):
# 查看所有连接
nmcli connection show# 查看设备状态
nmcli device status# 激活一个 Wi-Fi 连接
nmcli connection up id "MyWiFi"# 创建一个新的以太网连接
nmcli connection add type ethernet con-name "MyWired" ifname eth0 ip4 192.168.1.100/24 gw4 192.168.1.1
3.nmtui (NetworkManager Text User Interface):
基于文本的交互式界面,通过 curses 库实现,比 nmcli 更直观,适合不熟悉命令行的用户。
4.nm-applet 或其他 GUI 前端:
- 图形化应用,通常集成在桌面环境的系统托盘中,提供 Wi-Fi 列表、连接状态、快捷设置等功能。
5.D-Bus 接口:
- NetworkManager 通过 D-Bus 提供丰富的 API,允许其他应用程序查询网络状态、请求连接等。
二、配置文件
- 位置:
/etc/NetworkManager/system-connections/
- 格式:通常是
.nmconnection
文件,采用keyfile
格式(类似 INI 文件)。 - 示例 (
MyWiFi.nmconnection
):
[connection]
id=MyWiFi
uuid=123e4567-e89b-12d3-a456-426614174000
type=802-11-wireless[802-11-wireless]
ssid=MyWiFiSSID
mode=infrastructure
security=802-11-wireless-security[802-11-wireless-security]
key-mgmt=wpa-psk
psk=mysecretpassword[ipv4]
method=auto
- 权限:系统连接文件通常需要 root 权限,用户私有连接存储在
~/.config/NetworkManager/system-connections/
。
三、与传统网络对比
特性 | NetworkManager | 传统方法 (/etc/network/interfaces , ifupdown ) |
---|---|---|
目标 | 动态、用户友好的桌面网络管理 | 静态、稳定的服务器网络配置 |
自动化 | 高(自动连接、切换) | 低(通常手动或启动时配置) |
GUI 支持 | 优秀 | 通常无 |
移动性 | 适合笔记本、移动设备 | 适合固定服务器 |
复杂性 | 较高(功能多) | 较低(概念简单) |
典型使用场景 | 桌面发行版 (Ubuntu, Fedora) | 服务器发行版 (Debian Server, CentOS) |
注意:两者可以共存,但通常建议选择一种作为主要管理工具,避免冲突。在服务器上,常禁用 NetworkManager 并使用 systemd-networkd
或传统脚本。
四、常用操作命令
# 查看整体状态
nmcli general status# 列出所有设备
nmcli device# 列出所有连接
nmcli connection# 启用/禁用网络(全局)
nmcli networking on/off# 启用/禁用 Wi-Fi
nmcli radio wifi on/off# 扫描 Wi-Fi 网络
nmcli device wifi list# 连接到一个 Wi-Fi 网络(会提示输入密码)
nmcli device wifi connect "SSID_NAME"# 修改连接的 IP 为静态
nmcli connection modify "MyConnection" ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.dns "8.8.8.8,8.8.4.4" ipv4.method manual# 修改连接的 IP 为 DHCP
nmcli connection modify "MyConnection" ipv4.method auto# 删除一个连接
nmcli connection delete "ConnectionName"# 重新加载配置文件
nmcli connection reload