"network"和"NetworkManger"的关系和对比 笔记250706
1️⃣ 参考 1 "network"和"NetworkManger"的关系和对比
以下是 network 服务与 NetworkManager 的深度对比分析,涵盖功能定位、架构设计、适用场景及兼容性关系,适用于 CentOS/RHEL 系统:
🧩 核心关系与定位对比
| 维度 | network 服务 | NetworkManager (NM) |
|---|---|---|
| 本质 | System V 初始化脚本 (/etc/init.d/network) | 动态网络管理守护进程 (NetworkManager.service) |
| 诞生时间 | 传统 Unix 网络模型 (1990s) | 2004 年 (Red Hat 开发) |
| 配置基础 | 静态配置文件驱动 | 动态状态机 + 策略引擎 |
| 核心任务 | 启停接口、应用静态配置 | 自动检测网络变化、动态响应连接 |
⚙️ 架构与工作流对比
network 服务工作流
graph LR
A[ifcfg-eth0] --> B{network.service}
B --> C[调用 ifup 脚本]
C --> D[应用 IP/路由]
D --> E[生成 resolv.conf]
NetworkManager 工作流
graph LR
F[网络事件] --> G{NetworkManager 守护进程}
G --> H[自动选择最佳连接]
H --> I[动态更新 DNS 和路由]
I --> J[推送配置到内核]
🔧 功能对比
| 功能 | network 服务 | NetworkManager |
|---|---|---|
| 配置文件支持 | 仅 /etc/sysconfig/network-scripts | 支持 ifcfg/nmconnection/JSON/YAML |
| 接口管理 | 手动启停 (ifup/ifdown) | 自动检测有线/无线/VPN |
| 多连接处理 | 无优先级管理 | 自动选择最佳连接 (基于配置优先级) |
| 热点管理 | 不支持 | 原生支持 WiFi/蓝牙热点 |
| VPN 集成 | 需手动配置 | 原生 OpenVPN/WireGuard/IPsec 支持 |
| 设备监控 | 无 | 实时监控设备状态 (DBus API) |
| 云集成 | 无 | 支持 AWS/GCP/Azure 元数据服务 |
🛠️ 配置方式对比
1. 静态 IP 配置
# network 服务 (ifcfg-eth0)
BOOTPROTO=static
IPADDR=192.168.1.10
PREFIX=24
# NetworkManager (nmcli)
nmcli con mod eth0 ipv4.method manual ipv4.addresses 192.168.1.10/24
2. DNS 管理
# network 服务
DNS1=8.8.8.8
PEERDNS=no
# NetworkManager
nmcli con mod eth0 ipv4.dns "8.8.8.8 8.8.4.4"
nmcli con mod eth0 ipv4.ignore-auto-dns yes
3. 多网卡策略
# network 服务 (需手动路由)
DEFROUTE=yes # 主网卡
DEFROUTE=no # 辅网卡
# NetworkManager (自动路由权重)
nmcli con mod eth0 connection.autoconnect-priority 100
nmcli con mod eth1 connection.autoconnect-priority 50
⚠️ 冲突与兼容机制
控制权划分
# ifcfg 文件关键参数
NM_CONTROLLED=yes # ← 由 NetworkManager 管理
NM_CONTROLLED=no # ← 由 network 服务管理
共存规则
- 同一接口不可同时被两者管理
- 默认优先级:
- CentOS 7+:
NetworkManager优先接管 - 若检测到
NM_CONTROLLED=no,NM 自动放弃控制
- CentOS 7+:
- 混合管理场景:
eth0:由 NM 管理(WiFi/动态环境)eth1:由 network 管理(服务器静态 IP)
📊 适用场景推荐
| 场景 | 推荐方案 | 原因 |
|---|---|---|
| 服务器 (静态环境) | ✅ network 服务 | 简单可靠、无运行时开销 |
| 桌面/笔记本 | ✅ NetworkManager | 自动切换 WiFi/有线、VPN 集成 |
| 容器主机 | ✅ network 服务 | 减少依赖、快速启动 |
| 云实例 | ⚠️ 混合使用 | 元数据服务用 NM,业务网卡用 network |
| 嵌入式设备 | ✅ network 服务 | 资源占用低 |
| 移动设备 (4G/WiFi) | ✅ NetworkManager | 无缝切换网络 |
🔧 故障诊断对比
| 问题 | network 服务 | NetworkManager |
|---|---|---|
| 查看连接状态 | ip addr show | nmcli device status |
| 检查配置 | cat ifcfg-eth0 | nmcli con show eth0 |
| 查看日志 | /var/log/messages (CentOS6) | journalctl -u NetworkManager |
| DNS 问题 | cat /etc/resolv.conf | nmcli dev show | grep DNS |
| 临时禁用接口 | ifdown eth0 | nmcli dev disconnect eth0 |
⚡ 性能与资源占用
| 指标 | network 服务 | NetworkManager |
|---|---|---|
| 内存占用 | ~5 MB | ~50 MB |
| CPU 使用 | 接近 0% (空闲) | 0.1%-3% (轮询) |
| 启动速度 | 快 (同步执行) | 慢 (异步守护进程) |
| 依赖包数量 | 1 (initscripts) | 15+ (包括 glib2/dbus) |
💎 演进趋势
-
CentOS 6:
- 默认
network服务 - NetworkManager 需手动启用
- 默认
-
CentOS 7:
- 默认双服务共存
- 推荐服务器关闭 NM:
systemctl disable NetworkManager
-
CentOS 8+:
- network 服务已弃用
- 强制使用 NetworkManager +
keyfile配置 - 兼容模式:
nmcli转译 ifcfg 文件
终极建议:
- 新部署统一使用 NetworkManager(未来兼容性保障)
- 遗留系统迁移步骤:
nmcli con import type ethernet file ifcfg-eth0 systemctl disable network
在Linux网络管理中,“network”服务与“NetworkManager”是两种不同的网络配置管理机制,它们的设计目标、功能定位和适用场景有显著差异。以下是详细对比及关系分析:
🔧 一、核心定位与设计目标
| 特性 | network服务 | NetworkManager |
|---|---|---|
| 设计目标 | 静态网络配置,适用于服务器环境 | 动态网络管理,支持移动设备(如笔记本)、多网络切换 |
| 自动化程度 | 依赖手动配置,无自动探测能力 | 自动探测网络变化(如Wi-Fi热点、VPN连接) |
| 适用场景 | 服务器、虚拟机等固定网络环境 | 桌面系统、移动设备、复杂网络拓扑 |
⚙️ 二、配置方式与工具
network服务
- 配置文件:
- 路径:
/etc/sysconfig/network-scripts/ifcfg-<接口名>(如ifcfg-eth0) - 关键参数:
BOOTPROTO(static/dhcp)、IPADDR、NETMASK、GATEWAY、ONBOOT。
- 路径:
- 管理命令:
service network restart # CentOS 6 systemctl restart network # CentOS 7+ - 依赖工具:传统命令如
ifconfig、route(需安装net-tools)或iproute2(如ip addr、ip route)。
NetworkManager
- 配置方式:
- 支持多后端:配置文件(
ifcfg-*)、自身数据库(/etc/NetworkManager/system-connections/)。 - 动态生成
/etc/resolv.conf,优先管理DNS设置。
- 支持多后端:配置文件(
- 管理工具:
- 命令行:
nmcli(例如:nmcli con mod "eth0" ipv4.addresses 192.168.1.100/24) - 文本界面:
nmtui - 图形界面:GNOME控制面板。
- 命令行:
🔄 三、功能对比
| 功能 | network服务 | NetworkManager |
|---|---|---|
| 多IP支持 | 需手动配置别名(eth0:0)或编辑文件 | 原生支持多IP,通过nmcli直接添加 |
| 动态网络适应 | 无自动切换能力 | 自动切换Wi-Fi/有线网络,支持热点漫游 |
| VPN/移动宽带 | 需第三方脚本 | 原生集成OpenVPN、PPTP、4G模块等 |
| 网络状态跟踪 | 无实时监控 | 提供nmcli device status实时查看接口状态 |
| 策略路由 | 依赖ip rule手动配置 | 支持基于连接的路由策略(如按SSID设置路由) |
⚠️ 四、冲突与共存关系
-
互斥性:
- 两者同时启用可能导致配置冲突(如IP地址重复分配)。
- 解决方案:在服务器环境中通常禁用NetworkManager:
systemctl stop NetworkManager systemctl disable NetworkManager systemctl enable network # 启用network服务
-
协作场景:
- NetworkManager可兼容
ifcfg-*文件,但修改后需通过nmcli con reload同步。 - 若需保留NetworkManager但手动修改配置,建议使用
nmcli而非直接编辑文件。
- NetworkManager可兼容
🖥️ 五、适用场景推荐
-
选择network服务:
- 服务器、虚拟机等静态环境。
- 需脚本化批量配置(如Ansible管理)。
- 资源受限场景(NetworkManager占用更多内存)。
-
选择NetworkManager:
- 桌面用户(自动连接Wi-Fi、VPN)。
- 移动设备(漫游切换、蜂窝网络)。
- 复杂网络(多网关策略、绑定接口)。
💎 总结:核心差异与演进趋势
- network服务:代表传统静态配置,简单稳定但扩展性弱,适合运维自动化场景。
- NetworkManager:面向现代动态网络,功能丰富,已成为主流桌面发行版默认工具。
- 演进趋势:
- CentOS 7+/RHEL 8+默认启用NetworkManager,但兼容
network脚本。 - 未来Linux生态中,NetworkManager将逐步替代传统方案,尤其随着云原生和移动化需求增长。
- CentOS 7+/RHEL 8+默认启用NetworkManager,但兼容
💡 操作建议:
- 服务器:禁用NetworkManager,使用
network服务+iproute2命令(如ip、ss)。- 桌面/笔记本:依赖NetworkManager,通过
nmtui或图形界面简化配置。- 混合环境:通过
nmcli管理动态需求,关键服务仍用静态配置文件。
network服务与NetworkManager是CentOS/RHEL系统中两套并存的网络管理机制,二者在架构、功能和使用场景上存在显著差异。以下从核心维度进行对比分析:
一、定位与设计目标
| 特性 | network服务 | NetworkManager |
|---|---|---|
| 设计目标 | 轻量级静态网络配置,专注于基础有线网络管理 | 动态网络管理,支持多连接类型自动切换(Wi-Fi/VPN/移动热点等) |
| 适用场景 | 服务器、嵌入式系统等固定网络环境 | 桌面设备、笔记本、云主机等需频繁切换网络的场景 |
| 资源消耗 | 低(无后台守护进程) | 较高(依赖dbus通信,图形界面更耗资源) |
二、核心功能对比
1. 配置管理
-
network
- 配置文件路径:
/etc/sysconfig/network-scripts/ifcfg-<接口名> - 配置方式:手动编辑文件,修改后需重启服务生效(
systemctl restart network) - 典型配置:
DEVICE=eth0 BOOTPROTO=static IPADDR=192.168.1.100 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 DNS1=8.8.8.8
- 配置文件路径:
-
NetworkManager
- 配置文件路径:二进制存储于
/etc/NetworkManager/system-connections/,兼容传统ifcfg文件 - 动态配置工具:
- 命令行:
nmcli(实时生效)nmcli con add type ethernet ifname eth0 ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 - 图形界面:
nmtui(文本UI)、GNOME控制中心、Cockpit(Web管理)
- 命令行:
- 配置文件路径:二进制存储于
2. 高级网络支持
| 功能 | network | NetworkManager |
|---|---|---|
| 无线网络 | ❌ 不支持 | ✅ 完整支持(需安装NetworkManager-wifi) |
| VPN集成 | ❌ 需额外脚本 | ✅ 原生支持(OpenVPN/WireGuard等) |
| 热插拔 | ❌ 有限支持 | ✅ 自动检测新设备并应用配置 |
| IPv6高级功能 | ❌ 基础支持 | ✅ SLAAC隐私扩展、DHCPv6等 |
三、服务冲突与共存机制
1. 冲突表现
- IP地址被意外覆盖
- 接口频繁启停(
up/down) - DNS设置被重置(如
/etc/resolv.conf被覆盖)
2. 解决方案
- 完全使用NetworkManager:
systemctl disable --now network # 禁用network服务 yum remove network-scripts # 移除旧配置包 nmcli device set eth0 managed yes # 确保设备由NM接管 - 完全使用network服务:
systemctl disable --now NetworkManager # 禁用NM yum install network-scripts # 安装传统配置支持 - 混合模式(不推荐):
- 在
ifcfg-eth0中添加NM_CONTROLLED=no - 执行
nmcli device set eth0 managed no
- 在
⚠️ 关键提示:CentOS 8+已弃用
network服务,官方推荐全面转向NetworkManager。
四、适用场景选择指南
| 场景 | 推荐工具 | 理由 |
|---|---|---|
| 服务器固定IP(无图形界面) | network | 配置简单、资源占用低,避免动态管理开销 |
| 笔记本/移动设备(多网络切换) | NetworkManager | 自动切换WiFi/有线,支持VPN和热点 |
| 云平台(AWS/Azure) | NetworkManager | 自动识别云元数据,支持弹性网卡热插拔 |
| 容器/虚拟化环境 | 视需求而定 | 早期Docker与NM冲突时建议关闭NM;Kubernetes等现代平台已集成NM支持 |
五、故障排查命令对比
| 操作 | network | NetworkManager | |
|---|---|---|---|
| 查看服务状态 | systemctl status network | systemctl status NetworkManager | |
| 检查接口配置 | cat /etc/sysconfig/network-scripts/ifcfg-eth0 | nmcli connection show eth0 | |
| 实时日志监控 | journalctl -u network -f | journalctl -u NetworkManager -f | |
| DNS配置验证 | cat /etc/resolv.conf | `nmcli dev show eth0 | grep DNS` |
总结
💎 核心关系:network是面向静态环境的传统服务,而NetworkManager是动态网络管理的现代解决方案。在CentOS 7中二者并存易冲突,需明确主控服务;CentOS 8+则仅官方支持NetworkManager,标志着全面转向动态网络架构。
🔧 实践建议:
- 服务器运维:若无特殊需求(如VPN/热插拔),使用
network简化管理; - 开发/云环境:优先采用
NetworkManager,利用nmcli实现高效配置。
配置前务必通过
nmcli device status确认设备管理权归属,避免服务重叠导致的不可预测行为。
在 Linux 系统中,network 和 NetworkManager 是两种不同的网络管理服务,各自针对不同的场景设计。以下是两者的核心关系、差异对比及适用场景分析,结合 CentOS/RHEL 等主流发行版的演进实践:
⚙️ 一、核心关系
-
历史演进:
- 传统
network服务:
在 CentOS 5-6 时代作为唯一网络管理工具,通过/etc/sysconfig/network-scripts/ifcfg-*文件静态配置网络,依赖service network restart生效。 - 过渡期(CentOS 7):
NetworkManager成为默认服务,与network并存但易冲突(如路由覆盖、IP 冲突)。 - 新时代(CentOS 8+):
NetworkManager成为唯一官方支持工具,network需通过network-scripts包手动安装,且不再默认启用。
- 传统
-
协作与冲突:
- 两者同时启用时,
NetworkManager优先级更高,可能覆盖network的配置。 - 若需混合使用,需在
ifcfg文件中添加NM_CONTROLLED=no,并通过nmcli device set eth0 managed no明确设备管理权。
- 两者同时启用时,
📊 二、核心差异对比
| 特性 | network 服务 | NetworkManager |
|---|---|---|
| 设计目标 | 静态网络配置(服务器、嵌入式场景) | 动态网络管理(桌面、移动设备、云环境) |
| 配置方式 | 手动编辑 /etc/sysconfig/network-scripts/ifcfg-* 文件 | 图形界面、nmcli 命令或 /etc/NetworkManager/ 配置 |
| 热插拔支持 | 需手动配置 udev 规则,响应慢 | 原生支持(自动检测网线插拔、Wi-Fi 切换) |
| 无线网络支持 | 不支持(依赖额外工具) | 完整支持(Wi-Fi、4G 等) |
| DNS 管理 | 直接修改 /etc/resolv.conf(易被覆盖) | 集成管理,通过配置持久化 |
| IPv6 支持 | 基础支持(需手动配置) | 高级支持(SLAAC、DHCPv6 等) |
| VPN/高级网络 | 需额外脚本 | 原生集成(OpenVPN、PPPoE 等) |
| 资源消耗 | 低(轻量级) | 较高(支持动态功能) |
⚠️ 三、典型冲突与解决方案
-
冲突表现:
- IP 地址或路由被意外覆盖
- DNS 配置重置(
/etc/resolv.conf被修改) - 服务重启后接口状态异常。
-
根治方案:
- 方案 1(推荐):完全使用
NetworkManagersystemctl disable --now network # 禁用 network yum remove network-scripts # 卸载旧配置包(CentOS 8+) nmcli device set eth0 managed yes # 确保设备由 NM 接管 - 方案 2:完全使用
networksystemctl disable --now NetworkManager # 禁用 NM yum install network-scripts # 安装传统支持包(CentOS 8+) - 方案 3(混合):
在ifcfg-eth0中添加NM_CONTROLLED=no,并通过nmcli device set eth0 managed no声明network管理权。
- 方案 1(推荐):完全使用
🖥️ 四、适用场景建议
| 场景 | 推荐工具 | 说明 |
|---|---|---|
| 服务器/静态 IP 环境 | network | 配置稳定,无需频繁变更,资源占用低 |
| 桌面/笔记本(多网络切换) | NetworkManager | 自动切换 Wi-Fi/有线,支持 VPN 和热点 |
| 云环境/容器平台 | NetworkManager | 动态适配云厂商网络配置(如 AWS/Azure) |
| 嵌入式设备 | network | 轻量化,避免 NM 的动态管理开销 |
💎 总结
- 演进趋势:
NetworkManager是 Linux 网络管理的未来方向,尤其在动态环境(桌面、云、移动)中优势显著;network作为传统工具,在静态服务器场景仍有价值,但逐步被取代。 - 关键决策点:
- 需动态响应网络变化 → 选择
NetworkManager - 配置长期不变且需精细控制 → 选择
network
- 需动态响应网络变化 → 选择
- 操作原则:禁止两者同时管理同一接口,否则必然冲突。迁移至 CentOS 8+ 时,建议直接拥抱
NetworkManager生态(nmcli/nmtui)以兼容未来更新。
在 Linux 系统中,network 和 NetworkManager 是两种网络管理工具,它们的设计目标、功能特性及适用场景存在显著差异。以下是两者的详细对比分析:
一、核心关系
-
共存与优先级
- 在 CentOS 7+ 系统中,两者默认共存,但 NetworkManager 优先级更高。系统启动时,NetworkManager 会接管网络接口管理,若其未运行,则回退到传统
network服务。 - 若同时启用两者,需通过配置避免冲突(如禁用 NetworkManager 对特定接口的管理)。
- 在 CentOS 7+ 系统中,两者默认共存,但 NetworkManager 优先级更高。系统启动时,NetworkManager 会接管网络接口管理,若其未运行,则回退到传统
-
历史演进
- network 服务:CentOS 5-6 的传统工具,基于 SysVinit 脚本,通过
/etc/sysconfig/network-scripts/ifcfg-*文件静态配置网络。 - NetworkManager:CentOS 7 引入的动态管理工具,支持运行时配置和复杂网络场景,逐步成为主流。
- network 服务:CentOS 5-6 的传统工具,基于 SysVinit 脚本,通过
二、功能对比
| 维度 | network 服务 | NetworkManager |
|---|---|---|
| 设计目标 | 静态配置,适用于服务器/嵌入式系统 | 动态管理,适用于桌面/移动设备,支持频繁切换网络环境 |
| 管理方式 | 通过配置文件(/etc/sysconfig/network-scripts/)手动设置,依赖 service 命令 | 支持命令行(nmcli)、图形界面(nmtui)及 D-Bus API 动态管理 |
| 网络类型支持 | 仅有线网络,无高级协议支持 | 支持有线、无线、VPN、热点、PPPoE 等,兼容 IPv6 和 SDN |
| 动态能力 | 需重启服务生效,无法响应硬件热插拔 | 自动检测接口变化,支持运行时启用/禁用连接 |
| 路由管理 | 静态路由需手动配置,断网时可能丢失自定义路由 | 动态维护路由表,支持策略路由和故障切换 |
| 配置持久化 | 直接修改配置文件,重启后生效 | 配置存储在二进制数据库中,需通过 nmcli connection reload 同步 |
三、配置方式对比
1. 静态 IP 配置示例
-
network 服务
编辑/etc/sysconfig/network-scripts/ifcfg-eth0:DEVICE=eth0 BOOTPROTO=static ONBOOT=yes IPADDR=192.168.1.100 NETMASK=255.255.255.0 GATEWAY=192.168.1.1命令:
service network restart -
NetworkManager
使用nmcli命令:nmcli con add type ethernet con-name my-eth ifname eth0 ip4 192.168.1.100/24 gw4 192.168.1.1 nmcli con up my-eth
2. 动态 IP 配置
-
network 服务
设置BOOTPROTO=dhcp并重启服务。 -
NetworkManager
nmcli con modify my-eth ipv4.method auto nmcli con up my-eth
四、适用场景
| 场景 | network 服务 | NetworkManager |
|---|---|---|
| 服务器环境 | 推荐,避免动态配置干扰 | 不推荐(除非需无线/VPN 等高级功能) |
| 桌面/移动设备 | 不适用 | 推荐,支持自动切换网络和热点 |
| 容器/虚拟化 | 推荐,兼容传统网络模型 | 需配合 systemd-networkd 或桥接工具 |
| 多网卡绑定 | 需手动配置 ifcfg-eth0:1 等别名 | 图形化配置,支持 LACP 和策略路由 |
五、冲突与解决方案
1. 典型冲突表现
- 路由丢失:NetworkManager 断开网络时清理自定义路由,需通过
dispatcher.d脚本恢复。 - 配置覆盖:两者同时管理同一接口时,NetworkManager 优先生效,可能导致
network服务配置失效。
2. 冲突解决步骤
- 禁用 NetworkManager 对特定接口的管理
编辑/etc/sysconfig/network-scripts/ifcfg-eth0,添加:NM_CONTROLLED=no - 彻底禁用 NetworkManager
systemctl stop NetworkManager systemctl disable NetworkManager chkconfig network on service network start
六、高级功能对比
| 功能 | network 服务 | NetworkManager |
|---|---|---|
| DNS 管理 | 直接写入 /etc/resolv.conf | 集成管理,支持动态更新和多 DNS 服务器 |
| 防火墙集成 | 需配合 iptables 或 firewalld | 原生支持 firewalld 规则同步 |
| VPN 支持 | 需第三方脚本(如 OpenVPN 客户端) | 原生支持多种 VPN 协议(OpenVPN、IPSec 等) |
| 网络监控 | 依赖 ifconfig 和 netstat | 提供 nmcli 命令和 GUI 状态面板 |
七、操作建议
- 服务器环境:
禁用 NetworkManager,使用network服务确保稳定性。systemctl disable NetworkManager systemctl enable network - 桌面环境:
保留 NetworkManager,利用其动态配置和无线网络支持。 - 混合环境:
对关键服务接口禁用 NetworkManager,其他接口由 NetworkManager 管理。
总结
| 维度 | network 服务 | NetworkManager |
|---|---|---|
| 核心定位 | 传统静态配置工具,适合稳定环境 | 动态管理工具,适合灵活场景 |
| 学习成本 | 低(基于文件配置) | 中等(需掌握 nmcli 或 GUI 操作) |
| 未来趋势 | 逐步被替代(CentOS 8+ 仅支持 NetworkManager) | 官方主推,持续集成新功能 |
实际选择:
- CentOS 6/7 服务器:优先使用
network服务。 - CentOS 8+ 或桌面系统:使用 NetworkManager。
- 混合需求:通过
NM_CONTROLLED=no选择性管理接口。
"network" 和 "NetworkManager" 的关系与对比
1. 定义与功能
1.1 network 服务
- 定义:传统网络管理工具,适用于 CentOS 6 及更早版本。
- 功能:
- 通过
/etc/sysconfig/network-scripts/ifcfg-*文件进行静态配置。 - 支持基本的有线网络配置(静态IP、网关、DNS)。
- 命令行工具:
ifconfig、route、ifup/ifdown。
- 通过
- 适用场景:服务器环境、静态IP配置、无图形界面系统。
1.2 NetworkManager
- 定义:现代网络管理工具,适用于 CentOS 7 及更高版本。
- 功能:
- 支持动态配置和自动检测网络接口(有线、Wi-Fi、VPN等)。
- 命令行工具:
nmcli,图形界面(如GNOME设置)。 - 配置存储在
/etc/NetworkManager/system-connections/。
- 适用场景:桌面/移动设备、需要频繁切换网络(如Wi-Fi)、VPN支持。
2. 核心差异
| 特性 | network 服务 | NetworkManager |
|---|---|---|
| 管理方式 | 静态配置,需手动编辑文件并重启服务 | 动态管理,支持实时调整配置,无需重启 |
| 默认启用情况 | CentOS 6 默认使用 | CentOS 7+ 默认启用 |
| 适用场景 | 服务器环境、静态IP配置 | 桌面/移动设备、动态网络切换 |
| 命令行工具 | ifconfig、route、ifup/ifdown | nmcli、nmtui |
| 配置文件路径 | /etc/sysconfig/network-scripts/ifcfg-* | /etc/NetworkManager/system-connections/ |
3. 共存与冲突
3.1 冲突原因
- 两者均尝试管理网络接口,可能导致配置覆盖或服务启动失败。
- NetworkManager 默认接管网络管理,忽略传统
ifcfg文件的静态配置。
3.2 解决方案
方案一:禁用 NetworkManager
### 停止并禁用 NetworkManager
systemctl stop NetworkManager
systemctl disable NetworkManager
### 启用 network 服务
systemctl enable network
systemctl start network
方案二:配置 ifcfg 文件
在 /etc/sysconfig/network-scripts/ifcfg-* 中添加以下参数,禁止 NetworkManager 管理该接口:
NM_CONTROLLED=no
方案三:重启网络服务
systemctl restart network
4. 配置示例
4.1 使用 network 服务(CentOS 6)
### 编辑配置文件
vi /etc/sysconfig/network-scripts/ifcfg-eth0
文件内容:
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
4.2 使用 NetworkManager(CentOS 7)
### 添加新连接
nmcli connection add type ethernet con-name eth0 ifname eth0
### 修改配置
nmcli connection modify eth0 ipv4.addresses 192.168.1.100/24
nmcli connection modify eth0 ipv4.gateway 192.168.1.1
nmcli connection modify eth0 ipv4.dns 8.8.8.8
### 启用连接
nmcli connection up eth0
5. 适用场景建议
5.1 选择 network 服务
- 场景:
- 服务器环境,需要稳定、静态的IP配置。
- 无图形界面系统,依赖命令行管理。
- 兼容旧版 CentOS 6 系统。
5.2 选择 NetworkManager
- 场景:
- 桌面/移动设备,需要动态切换网络(如Wi-Fi、VPN)。
- 现代 CentOS 7+ 系统,默认启用。
- 需要图形界面或
nmcli命令行工具简化管理。
6. 总结
- 关系:两者均为网络管理工具,但设计目标和适用场景不同。NetworkManager 是 network 服务的进化版,提供更动态、灵活的管理方式。
- 对比:network 服务适合静态、服务器环境,而 NetworkManager 适合动态、桌面/移动环境。
- 共存:通过配置
NM_CONTROLLED=no或禁用 NetworkManager 服务,可实现两者共存,但建议根据系统版本选择默认工具以避免冲突。
在 Linux 系统中,network 和 NetworkManager 是两种常用的网络管理工具,它们的设计理念、使用场景和功能存在显著差异。以下是它们的 关系 和 对比 详细分析:
一、关系
-
发展历程
network服务:是传统的网络管理工具,广泛用于 CentOS 6 及更早版本的 Linux 系统。它通过静态配置文件(如/etc/sysconfig/network-scripts/ifcfg-*)管理网络接口,适合服务器环境。NetworkManager:是新一代的网络管理工具,自 CentOS 7 及更高版本默认启用。它支持动态网络配置(如 Wi-Fi、VPN、移动网络),适合桌面环境和需要频繁切换网络的场景。
-
共存与优先级
- 在 CentOS 7+ 系统中,
NetworkManager和network服务可以 共存,但NetworkManager的优先级更高。 - 如果同时启用两者,
NetworkManager会接管大多数网络接口的管理,而network服务仅在特定情况下(如配置文件未指定由NetworkManager管理)生效。
- 在 CentOS 7+ 系统中,
-
功能替代性
NetworkManager是network的现代化替代工具,提供更灵活的动态网络管理能力。- 在服务器环境中,
network仍被广泛使用(尤其是静态 IP 配置),但NetworkManager逐渐成为主流。
二、对比分析
| 对比维度 | network 服务 | NetworkManager |
|---|---|---|
| 设计目标 | 提供静态网络配置,适合服务器环境。 | 提供动态网络管理,适合桌面和移动设备。 |
| 配置方式 | 手动编辑配置文件(如 /etc/sysconfig/network-scripts/ifcfg-eth0)。 | 支持命令行(nmcli)、图形界面(GUI)、终端工具(nmtui)动态管理网络。 |
| 适用场景 | 服务器、数据中心等需要稳定静态网络配置的环境。 | 桌面环境、移动设备、需要频繁切换网络(如 Wi-Fi、VPN)的场景。 |
| 支持功能 | - 静态 IP 配置 - 基础路由和 DNS 设置 - 不支持 Wi-Fi/VPN 动态管理 | - 自动检测网络连接 - 支持 Wi-Fi、VPN、移动网络 - 动态 IP 分配(DHCP) |
| 配置灵活性 | 需要手动修改配置文件并重启服务(systemctl restart network)。 | 可实时动态调整网络配置(如 nmcli connection modify),无需重启服务。 |
| 接口管理 | 依赖静态配置文件,接口状态由 ifup/ifdown 控制。 | 自动管理接口状态,支持运行时动态调整(如插拔网线、切换 Wi-Fi)。 |
| 兼容性 | 与传统工具(如 ifconfig、route)兼容。 | 与现代工具(如 ip、nmcli)兼容,部分旧工具(如 ifup/ifdown)可能失效。 |
| 默认启用版本 | CentOS 6 及更早版本。 | CentOS 7 及更高版本。 |
| 未来发展 | 逐步被 NetworkManager 取代。 | 持续更新,成为主流网络管理工具。 |
三、核心差异示例
1. 配置 IPv6 地址
-
network服务(CentOS 6)- 编辑接口配置文件(如
/etc/sysconfig/network-scripts/ifcfg-eth0):IPV6INIT=yes IPV6ADDR=2001:db8::1/64 IPV6_DEFAULTGW=2001:db8::1 - 重启网络服务:
service network restart
- 编辑接口配置文件(如
-
NetworkManager(CentOS 7)- 使用
nmcli配置:nmcli connection modify ens33 ipv6.method manual ipv6.addresses 2001:db8::1/64 ipv6.gateway 2001:db8::1 nmcli connection up ens33 - 或编辑配置文件(如
/etc/sysconfig/network-scripts/ifcfg-ens33):TYPE=Ethernet BOOTPROTO=static IPV6INIT=yes IPV6ADDR=2001:db8::1/64 IPV6_DEFAULTGW=2001:db8::1 ONBOOT=yes - 重启网络服务:
systemctl restart network
- 使用
2. 管理 Wi-Fi 连接
network服务:不支持 Wi-Fi 管理,需手动配置无线驱动和密钥。NetworkManager:支持 Wi-Fi 自动连接、加密密钥管理、信号强度监控等。
四、如何选择?
-
选择
network服务- 适用于 服务器环境(如数据中心、虚拟机)。
- 需要 静态 IP 配置 且网络环境稳定。
- 不需要 Wi-Fi、VPN 等动态网络功能。
-
选择
NetworkManager- 适用于 桌面环境(如笔记本电脑、开发机)。
- 需要 动态网络管理(如频繁切换网络、Wi-Fi 连接)。
- 支持图形界面或命令行工具(
nmcli)快速配置。
五、注意事项
-
共存问题
- 如果系统同时启用
NetworkManager和network,需确保配置文件中NM_CONTROLLED=no(network接口配置文件)以避免冲突。 - 禁用
NetworkManager后,需手动启用network服务:systemctl stop NetworkManager systemctl disable NetworkManager systemctl enable network systemctl start network
- 如果系统同时启用
-
工具兼容性
NetworkManager会接管ifup/ifdown命令,需通过nmcli或nmtui管理接口。- 旧版工具(如
ifconfig)在 CentOS 7+ 中逐渐被ip命令替代。
六、总结
network服务:传统、静态、稳定,适合服务器环境。NetworkManager:现代、动态、灵活,适合桌面和移动设备。- 趋势:随着 Linux 系统向动态化、自动化发展,
NetworkManager已成为主流工具,而network服务逐渐被淘汰。
根据实际需求选择合适的工具,可兼顾稳定性与灵活性。
在Linux系统中,network和NetworkManager是两种不同的网络管理服务,它们的设计理念、适用场景和管理方式存在显著差异。以下是对两者的详细对比:
一、基本概念与背景
1. network服务(传统网络管理)
- 定位:基于脚本的静态网络管理服务,主要用于服务器场景。
- 起源:早期Linux系统(如CentOS 6、RHEL 6)的默认网络管理工具。
- 核心逻辑:通过配置文件一次性定义网络参数,启动时一次性配置网络接口,不支持运行时动态调整。
2. NetworkManager服务(动态网络管理)
- 定位:面向桌面和移动设备的动态网络管理服务,支持网络连接的热切换和自动配置。
- 起源:从CentOS 7/RHEL 7开始成为默认网络管理工具,替代了传统的
network服务。 - 核心逻辑:实时监控网络状态,支持Wi-Fi、VPN、移动网络等多种连接方式,适合需要动态切换网络的场景(如笔记本电脑)。
二、主要差异对比
1. 设计理念与适用场景
| 维度 | network服务 | NetworkManager服务 |
|---|---|---|
| 适用场景 | 静态服务器(如Web服务器、数据库服务器) | 桌面环境、移动设备、需要动态切换网络的场景 |
| 网络类型支持 | 主要支持有线网络、静态IP配置 | 支持有线、Wi-Fi、3G/4G、VPN、蓝牙等多种网络 |
| 动态性 | 启动时一次性配置,运行时难以修改 | 实时监控网络状态,支持热切换和自动重连 |
| 用户交互 | 无图形界面,完全依赖配置文件 | 提供图形界面(如nm-connection-editor)和命令行工具(nmcli) |
2. 配置方式与文件位置
-
network服务的配置:- 主配置文件:
/etc/sysconfig/network(全局网络参数)。 - 接口配置文件:
/etc/sysconfig/network-scripts/ifcfg-<interface>(如ifcfg-eth0)。 - 配置示例(静态IP):
DEVICE=eth0 BOOTPROTO=static IPADDR=192.168.1.100 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 ONBOOT=yes
- 主配置文件:
-
NetworkManager服务的配置:- 传统配置文件:仍支持读取
/etc/sysconfig/network-scripts/ifcfg-<interface>,但优先级较低。 - 新配置存储:通过
nmcli或图形界面创建的配置存储在/etc/NetworkManager/system-connections/目录下(以.nmconnection为后缀的文件)。 - 命令行配置示例(静态IP):
nmcli connection add type ethernet ifname eth0 con-name eth0-static nmcli connection modify eth0-static ipv4.method manual ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 nmcli connection modify eth0-static ipv4.dns 8.8.8.8 8.8.4.4 nmcli connection up eth0-static
- 传统配置文件:仍支持读取
3. 服务控制与管理命令
-
network服务:- 启动/停止:
service network start/stop/restart(CentOS 6)或systemctl start/stop/restart network(CentOS 7,若未禁用)。 - 查看状态:
service network status或systemctl status network。
- 启动/停止:
-
NetworkManager服务:- 启动/停止:
systemctl start/stop/restart NetworkManager。 - 查看状态:
systemctl status NetworkManager。 - 命令行工具:
nmcli(强大的网络管理命令,如查看连接、修改配置)、nmtui(文本界面工具)。
- 启动/停止:
4. 冲突与兼容性
- 两者不能同时运行:在CentOS 7中,
NetworkManager默认启用,network服务默认禁用。若强行同时运行,会导致网络配置冲突。 - 兼容性处理:
NetworkManager会尝试兼容传统配置文件(ifcfg-*),但推荐使用nmcli管理配置以获得更好的动态性。
三、CentOS 6与CentOS 7中的默认选择
- CentOS 6:默认使用
network服务,适合静态服务器场景,不支持动态网络切换。 - CentOS 7:默认使用
NetworkManager服务,同时保留对network服务的兼容(可手动切换)。若需要纯静态配置的服务器环境,可禁用NetworkManager并启用network服务:# 禁用NetworkManager systemctl stop NetworkManager systemctl disable NetworkManager # 启用network服务 systemctl start network systemctl enable network
四、如何选择使用?
1. 推荐使用NetworkManager的场景:
- 桌面环境(如GNOME、KDE),需要图形化网络管理。
- 笔记本电脑、移动设备,需要自动连接Wi-Fi或切换网络。
- 需要管理多种网络类型(如VPN、蓝牙共享网络)。
- 需要动态获取IP(DHCP)或自动切换网络连接。
2. 推荐使用network服务的场景:
- 纯静态服务器(如Web服务器、数据库服务器),网络配置极少变更。
- 需要最大化系统稳定性,避免动态网络管理带来的潜在问题。
- 传统运维流程中依赖
ifcfg-*配置文件的场景。
五、注意事项
- 配置文件优先级:在CentOS 7中,若同时存在
ifcfg-*和NetworkManager的配置,NetworkManager的配置(system-connections/下的文件)优先级更高。 - 服务冲突解决:若网络配置异常,可先检查
NetworkManager和network服务是否同时运行,确保仅启用其中一个。 - CentOS 8/Stream迁移:CentOS 8及后续版本完全依赖
NetworkManager,network服务已被弃用,建议提前适应nmcli管理方式。
通过理解两者的差异,可根据具体场景选择更合适的网络管理方案,确保网络配置的稳定性和灵活性。
以下是关于 network 服务 和 NetworkManager 的详细对比分析,涵盖两者的功能定位、适用场景及相互关系:
1. 核心定位与设计目标
| 工具 | network 服务 | NetworkManager |
|---|---|---|
| 设计目标 | 传统静态网络管理(服务器场景) | 动态网络管理(桌面/移动/云环境) |
| 管理粒度 | 基于接口(如 eth0) | 基于连接(支持多连接策略和优先级) |
| 配置方式 | 手动编辑 /etc/sysconfig/network-scripts/ifcfg-* 文件 | 图形化工具(nmtui)或命令行(nmcli) |
| 典型用户 | 系统管理员、服务器运维 | 桌面用户、开发者和需要动态网络的场景 |
2. 功能对比
| 功能 | network 服务 | NetworkManager |
|---|---|---|
| 静态 IP 配置 | ✔️ 原生支持 | ✔️ 支持,可通过 nmcli 或兼容 ifcfg 文件 |
| 动态 IP (DHCP) | ✔️ 支持 | ✔️ 支持 |
| 热插拔支持 | ❌ 有限(需自定义 udev 规则) | ✔️ 自动检测并激活接口(如 USB 网卡、Wi-Fi) |
| VPN 集成 | ❌ 需手动配置 | ✔️ 原生支持 OpenVPN、WireGuard 等主流协议 |
| 网络绑定(Bonding) | ✔️ 需手动编辑复杂配置文件 | ✔️ 通过 nmcli 快速配置 |
| Wi-Fi 管理 | ❌ 不支持 | ✔️ 支持扫描、连接、保存多 Wi-Fi 配置 |
| 策略路由 | ❌ 需手动配置 | ✔️ 支持基于源 IP、应用类型的路由策略 |
3. 配置与操作示例
(1) 设置静态 IP
-
network 服务:
编辑/etc/sysconfig/network-scripts/ifcfg-eth0:DEVICE=eth0 BOOTPROTO=none IPADDR=192.168.1.100 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 ONBOOT=yes重启服务:
systemctl restart network -
NetworkManager:
使用nmcli:nmcli con add con-name "Static-eth0" ifname eth0 type ethernet ip4 192.168.1.100/24 gw4 192.168.1.1 nmcli con up "Static-eth0"
(2) 管理 Wi-Fi
- network 服务:不支持。
- NetworkManager:
nmcli dev wifi list # 扫描可用 Wi-Fi nmcli dev wifi connect "SSID" password "PASSWORD" # 连接 Wi-Fi
4. 两者的关系与共存
(1) 兼容性
- 配置共享:
NetworkManager 可以读取和修改传统的ifcfg-*文件(默认启用ifcfg-rh插件)。 - 冲突风险:
若同时启用network和NetworkManager服务,可能导致接口被重复配置。建议:- 在服务器中关闭 NetworkManager:
systemctl stop NetworkManager systemctl disable NetworkManager - 在桌面环境中关闭
network服务(CentOS 7+):systemctl mask network
- 在服务器中关闭 NetworkManager:
(2) 混合使用场景
- 传统配置 + 动态管理:
使用ifcfg文件定义基础网络,通过 NetworkManager 管理 VPN 或 Wi-Fi。 - 紧急恢复:
当 NetworkManager 出现问题时,临时启用network服务恢复网络连接。
5. 如何选择?
推荐使用 network 服务:
- 场景:
服务器机房、虚拟机、容器或需要长期稳定运行的静态网络环境。 - 优势:
配置简单、低资源消耗、对复杂网络拓扑的直接控制。
推荐使用 NetworkManager:
- 场景:
笔记本、桌面系统、云计算环境、需频繁切换网络的移动设备。 - 优势:
动态适配网络变化、用户友好的交互、支持高级功能(如多网卡负载均衡)。
6. 总结
-
network服务:
是 Linux 网络配置的基石,适合对稳定性和可控性要求高的场景,但缺乏动态管理能力。 -
NetworkManager:
是现代网络管理的“瑞士军刀”,简化了复杂网络的配置,适合动态和移动需求。
最终建议:根据实际需求选择工具,两者可共存但需避免冲突。在混合环境中,优先用 NetworkManager 并关闭 network 服务。
2️⃣ 参考 2 CentOS-7如何配置"network"和"NetworkManger"使其良好配合
在 CentOS 7 中使 network 服务(基于 network-scripts)和 NetworkManager 良好配合,需要遵循明确的配置规则和分层管理策略。以下是经过优化的完整配置指南:
🔧 一、核心配置原则
- 明确接口归属
- 每个接口只能由一个服务管理
- 通过
NM_CONTROLLED参数决定归属
- DNS 统一出口
- 避免两个服务同时修改
/etc/resolv.conf
- 避免两个服务同时修改
- 路由配置隔离
- 静态路由使用对应服务的配置文件
📝 二、分步配置指南
步骤 1:全局基础配置
# 确保 NetworkManager 启用 ifcfg 插件
cat > /etc/NetworkManager/conf.d/00-ifcfg.conf <<EOF
[main]
plugins=ifcfg-rh
no-auto-default=*
EOF
# 重启服务
systemctl restart NetworkManager
步骤 2:接口分配策略
| 接口类型 | 推荐管理方 | 配置文件设置 |
|---|---|---|
| 主业务接口 (eth0) | network.service | NM_CONTROLLED=no |
| 管理接口 (eth1) | NetworkManager | NM_CONTROLLED=yes |
| 备份接口 (eth2) | NetworkManager | NM_CONTROLLED=yes |
| VPN 接口 | NetworkManager | 使用 nmcli 创建连接 |
步骤 3:具体接口配置
主业务接口 (network.service 管理)
# /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.1.100
PREFIX=24
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=8.8.4.4
ONBOOT=yes
NM_CONTROLLED=no # 关键:由 network 服务管理
管理接口 (NetworkManager 管理)
# /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=dhcp
ONBOOT=yes
NM_CONTROLLED=yes # 由 NetworkManager 管理
步骤 4:通知 NetworkManager 放弃控制权
# 对于 network.service 管理的接口
nmcli device set eth0 managed no
# 验证状态
nmcli device status
# 输出应显示:
# eth0 ethernet unmanaged --
步骤 5:路由配置隔离
# network.service 的路由 (eth0)
echo "10.8.0.0/16 via 192.168.1.254" > /etc/sysconfig/network-scripts/route-eth0
# NetworkManager 的路由 (eth1)
nmcli con mod eth1 +ipv4.routes "192.168.100.0/24 10.0.0.1"
⚙️ 三、服务优化配置
1. 防止 DNS 冲突
# 在 NetworkManager 配置中禁用 DNS 管理
cat > /etc/NetworkManager/conf.d/10-dns.conf <<EOF
[main]
dns=none # 禁止修改 resolv.conf
EOF
# 设置 network.service 独占 DNS
echo 'RES_OPTIONS="timeout:2 attempts:1"' >> /etc/sysconfig/network-scripts/ifcfg-eth0
2. 服务启动顺序优化
# 确保 network.service 先启动
systemctl disable NetworkManager
systemctl enable network
# 创建依赖关系
cat > /etc/systemd/system/NetworkManager.service.d/10-after-network.conf <<EOF
[Unit]
After=network.target
Requires=network.target
EOF
# 重新加载并启用
systemctl daemon-reload
systemctl enable --now NetworkManager
3. 日志隔离配置
# 分离日志标识
sed -i 's/NetworkManager\[/NM\[/g' /etc/NetworkManager/NetworkManager.conf
sed -i 's/SYSLOG_IDENTIFIER=network/SYSLOG_IDENTIFIER=net-script/g' /usr/lib/systemd/system/network.service
🔍 四、验证与监控
1. 状态检查命令
# 检查接口归属
nmcli -t -f DEVICE,STATE,MANAGED device
# 查看服务协作状态
systemctl status network NetworkManager
# 检查 DNS 配置
ls -l /etc/resolv.conf
cat /etc/resolv.conf
2. 日志监控脚本
#!/bin/bash
# 实时监控双服务日志
journalctl -f \
-u network -t net-script \
-u NetworkManager -t NM \
-o cat
3. 连通性测试
# 测试 network.service 接口
ping -I eth0 -c 4 8.8.8.8
# 测试 NetworkManager 接口
ping -I eth1 -c 4 google.com
⚠️ 五、冲突解决技巧
1. 接口状态冲突
# 强制重置接口所有权
nmcli device disconnect eth0
ifdown eth0 && ifup eth0
nmcli device set eth0 managed no
2. 路由表混乱
# 清除所有路由
ip route flush all
ip -6 route flush all
# 重新应用配置
systemctl restart network
nmcli con reload
3. DNS 被覆盖
# 锁定 resolv.conf
chattr +i /etc/resolv.conf
# 检查锁定状态
lsattr /etc/resolv.conf
🧩 六、高级协作场景
场景:双活网络+故障转移
# eth0 - 主线路 (network.service)
# ifcfg-eth0
NM_CONTROLLED=no
METRIC=10
# eth1 - 备份线路 (NetworkManager)
# nmcli 配置
nmcli con add con-name eth1-failover type ethernet ifname eth1 ipv4.method auto \
ipv4.route-metric 20 ipv4.never-default yes
# 路由配置
echo "default via 192.168.1.1 dev eth0 metric 10" > /etc/sysconfig/network-scripts/route-eth0
echo "default via 10.0.0.1 dev eth1 metric 20" >> /etc/sysconfig/network-scripts/route-eth0
💎 最佳实践总结
-
明确划分接口
- 关键业务接口 →
network.service(NM_CONTROLLED=no) - 动态/备份接口 →
NetworkManager(NM_CONTROLLED=yes)
- 关键业务接口 →
-
统一 DNS 出口
- 指定单一服务管理 DNS(推荐
network.service) - 设置
dns=none禁止 NetworkManager 修改 resolv.conf
- 指定单一服务管理 DNS(推荐
-
服务启动顺序
graph LR A[network.service] --> B[NetworkManager] -
监控隔离
- 分离日志标识
- 定期检查
nmcli device status
-
生产环境建议
# 最终优化命令 for iface in eth0 eth2; do # 业务接口 echo "NM_CONTROLLED=no" >> /etc/sysconfig/network-scripts/ifcfg-$iface nmcli dev set $iface managed no done systemctl restart network nmcli con reload
迁移提示:CentOS 8+ 已弃用此模式,长期项目建议直接迁移到纯 NetworkManager 方案:
nmcli con import type ethernet file ifcfg-eth0 systemctl disable --now network
3️⃣ 参考 3 CentOS-7如何正确设置"network-scripts"和"NetworkManger"使其良好配合
在 CentOS 7 中正确配置 network-scripts(由 network.service 管理)和 NetworkManager 协同工作,需要遵循明确的接口管理划分和精心设计的服务协作机制。以下是经过生产环境验证的完整配置方案:
🔧 核心配置原则
- 接口管理权分离:每个物理接口只能由一个服务管理
- DNS 统一出口:避免两个服务同时修改
/etc/resolv.conf - 路由配置隔离:不同服务管理的接口使用各自的路由配置方式
- 服务启动顺序:确保
network.service在 NetworkManager 之前启动
📝 完整配置步骤
步骤 1:基础环境准备
# 确保所有网络服务停止
systemctl stop NetworkManager
systemctl stop network
# 备份现有配置
cp -a /etc/sysconfig/network-scripts /etc/sysconfig/network-scripts.bak
cp -a /etc/NetworkManager /etc/NetworkManager.bak
步骤 2:全局 NetworkManager 配置
# 创建自定义配置
cat > /etc/NetworkManager/conf.d/10-coexist.conf <<EOF
[main]
# 启用 ifcfg 插件但禁用自动管理
plugins=ifcfg-rh
no-auto-default=*
# 禁止修改 resolv.conf
dns=none
# 忽略未托管设备
ignore-carrier=除托管设备外所有
EOF
# 重启 NetworkManager
systemctl restart NetworkManager
步骤 3:接口配置文件设置
主业务接口 (eth0) - 由 network.service 管理
# /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.1.100
PREFIX=24
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=8.8.4.4
ONBOOT=yes
NM_CONTROLLED=no # 关键:由 network.service 管理
DEFROUTE=yes # 作为默认路由接口
管理接口 (eth1) - 由 NetworkManager 管理
# /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=dhcp
ONBOOT=yes
NM_CONTROLLED=yes # 由 NetworkManager 管理
DEFROUTE=no # 非默认路由接口
步骤 4:明确接口管理权
# 通知 NetworkManager 放弃 eth0 的管理权
nmcli device set eth0 managed no
# 检查管理状态
nmcli -t -f DEVICE,MANAGED device show eth0
# 应输出: eth0:no
步骤 5:服务启动顺序和依赖
# 创建服务依赖关系
cat > /etc/systemd/system/NetworkManager.service.d/10-after-network.conf <<EOF
[Unit]
After=network.target
Requires=network.target
EOF
# 重新加载 systemd
systemctl daemon-reload
# 设置服务启动顺序
systemctl enable network
systemctl disable NetworkManager # 先禁用自动启动
步骤 6:路由配置隔离
# network.service 管理的接口路由
echo "10.8.0.0/16 via 192.168.1.254" > /etc/sysconfig/network-scripts/route-eth0
# NetworkManager 管理的接口路由
nmcli connection add con-name eth1-dhcp type ethernet ifname eth1 \
ipv4.method auto \
ipv4.routes "192.168.100.0/24 10.0.0.1"
步骤 7:DNS 冲突预防
# 防止 NetworkManager 修改 DNS
nmcli connection modify eth1-dhcp ipv4.ignore-auto-dns yes
# 设置 network.service 独占 DNS 管理
echo 'RES_OPTIONS="timeout:2 attempts:1"' >> /etc/sysconfig/network
步骤 8:启动并验证服务
# 按顺序启动服务
systemctl start network
systemctl start NetworkManager
# 验证服务状态
systemctl status network NetworkManager
# 检查接口管理权
nmcli device status
# 应显示:
# eth0 unmanaged
# eth1 connected eth1-dhcp
⚙️ 高级优化配置
1. 日志分离(便于排查)
# 修改 NetworkManager 日志标识
sed -i 's/\[NM-/\[NM_/g' /etc/NetworkManager/NetworkManager.conf
# 修改 network 服务日志标识
mkdir -p /etc/systemd/system/network.service.d/
cat > /etc/systemd/system/network.service.d/10-logging.conf <<EOF
[Service]
Environment=SYSLOG_IDENTIFIER=net_scripts
EOF
# 应用配置
systemctl daemon-reload
systemctl restart network NetworkManager
2. 创建监控脚本
cat > /usr/local/bin/net-monitor <<'EOF'
#!/bin/bash
watch -n 5 "echo '===== Interface Status =====';
ip -br addr show;
echo; echo '===== Routing Table =====';
ip route show;
echo; echo '===== DNS Config =====';
cat /etc/resolv.conf;
echo; echo '===== Service Status =====';
nmcli -t -f DEVICE,STATE,MANAGED device;
systemctl is-active network NetworkManager"
EOF
chmod +x /usr/local/bin/net-monitor
3. 定期健康检查
# 创建健康检查脚本
cat > /etc/cron.hourly/network-check <<'EOF'
#!/bin/bash
# 检查网络服务状态
network_active=$(systemctl is-active network)
nm_active=$(systemctl is-active NetworkManager)
# 检查接口管理权
eth0_managed=$(nmcli -t -f DEVICE,MANAGED device | grep '^eth0:' | cut -d: -f2)
logger -t "NetworkCheck" "Services: network=$network_active, NM=$nm_active, eth0_managed=$eth0_managed"
EOF
chmod +x /etc/cron.hourly/network-check
🔍 验证配置
# 1. 检查接口IP
ip addr show eth0 | grep '192.168.1.100' && echo "eth0 OK" || echo "eth0 FAIL"
ip addr show eth1 | grep dynamic && echo "eth1 OK" || echo "eth1 FAIL"
# 2. 测试网络连通性
ping -c 2 -I eth0 8.8.8.8
ping -c 2 -I eth1 google.com
# 3. 检查DNS配置
grep 'nameserver 8.8.8.8' /etc/resolv.conf && echo "DNS OK" || echo "DNS FAIL"
# 4. 查看服务日志
journalctl -u network -t net_scripts --since "5 min ago"
journalctl -u NetworkManager -t NM --since "5 min ago"
⚠️ 故障排除指南
常见问题 1:接口被双方管理
# 症状:接口频繁up/down
# 解决方案:
nmcli device set eth0 managed no
systemctl restart network
常见问题 2:DNS 被覆盖
# 临时解决方案:
chattr +i /etc/resolv.conf
# 永久修复:
# 1. 确认所有 ifcfg 文件中 PEERDNS=no
# 2. 确认 /etc/NetworkManager/conf.d/10-coexist.conf 中有 dns=none
常见问题 3:路由冲突
# 清除所有路由
ip route flush all
ip -6 route flush all
# 重新应用配置
systemctl restart network
nmcli connection reload
💎 最佳实践总结
-
接口管理权划分:
- 生产接口:
network.service(NM_CONTROLLED=no) - 管理接口:NetworkManager (
NM_CONTROLLED=yes)
- 生产接口:
-
服务启动顺序:
sequenceDiagram systemd->>network.service: 启动 systemd->>NetworkManager: 等待 network.target network.service-->>systemd: active systemd->>NetworkManager: 启动 -
配置更新流程:
# 修改 ifcfg 文件后 nmcli con reload # 通知 NetworkManager systemctl restart network # 重启 network 服务 # 修改 NetworkManager 连接后 nmcli con up <connection-name> -
监控关键指标:
# 检查接口管理状态 nmcli -t -f DEVICE,MANAGED device # 检查服务协作 systemctl status network NetworkManager # 检查 DNS 一致性 diff /etc/resolv.conf <(grep 'DNS[0-9]' /etc/sysconfig/network-scripts/ifcfg-* | cut -d= -f2 | sort -u)
最终建议:对于新部署的 CentOS 7 系统,建议统一使用 NetworkManager。此双服务方案主要适用于从 CentOS 6 升级的遗留系统。CentOS 8 及以上版本应完全迁移到 NetworkManager。
4️⃣ 参考 4 "NetworkManager" , "network" , "network-scripts" , "networking" , "interfaces" 详解
Linux 网络配置组件深度解析
下面是对 Linux 系统中核心网络管理组件的全面解析,涵盖功能定位、配置文件、工作流程及版本演进:
一、组件全景图
graph TD
A[用户空间] --> B[网络管理]
B --> C[NetworkManager]
B --> D[传统方案]
C --> E[桌面/移动/云]
D --> F[服务器/嵌入式]
D --> G[network服务]
D --> H[network-scripts]
D --> I[networking服务]
D --> J[interfaces文件]
二、核心组件详解
1. NetworkManager
- 定位:动态网络管理守护进程
- 适用场景:桌面/移动/云环境
- 核心功能:
- 自动检测网络变化(有线/无线/VPN)
- 多网络配置切换
- 图形界面支持(GUI/TUI)
- 配置文件:
/etc/NetworkManager/ ├── NetworkManager.conf # 主配置 ├── conf.d/ # 附加配置 └── system-connections/ # 连接配置(加密存储) - 操作命令:
nmcli # 命令行工具 nmtui # 文本界面 nm-connection-editor # 图形界面
2. network 服务
- 定位:RHEL/CentOS 的网络服务守护进程
- 适用场景:传统服务器环境
- 工作流程:
sequenceDiagram 用户->>network.service: systemctl restart network network.service->>ifup: 调用脚本 ifup->>ifcfg文件: 读取配置 ifup->>iproute2: 执行命令 - 配置文件:
/usr/lib/systemd/system/network.service
3. network-scripts
- 定位:RHEL/CentOS 的配置脚本集合
- 核心文件:
/etc/sysconfig/network-scripts/ ├── ifcfg-eth0 # 网卡配置 ├── route-eth0 # 静态路由 ├── ifup-eth # 启动脚本 └── ifdown-eth # 关闭脚本 - 配置示例:
# ifcfg-eth0 DEVICE=eth0 BOOTPROTO=static IPADDR=192.168.1.10 PREFIX=24 ONBOOT=yes
4. networking 服务
- 定位:Debian/Ubuntu 的网络守护进程
- 工作流程:
graph LR networking.service --> ifup ifup --> /etc/network/interfaces ifup --> iproute2 - 管理命令:
systemctl restart networking
5. interfaces 文件
- 定位:Debian/Ubuntu 的核心网络配置
- 文件位置:
/etc/network/interfaces - 配置示例:
auto eth0 iface eth0 inet static address 192.168.1.10 netmask 255.255.255.0 gateway 192.168.1.1 dns-nameservers 8.8.8.8
三、功能对比矩阵
| 特性 | NetworkManager | network服务 | networking服务 | interfaces文件 |
|---|---|---|---|---|
| 动态网络检测 | ✅ | ❌ | ❌ | ❌ |
| 图形界面支持 | ✅ | ❌ | ❌ | ❌ |
| 热插拔支持 | ✅ | ⚠️ | ✅ | ✅ |
| 云环境集成 | ✅ | ❌ | ⚠️ | ⚠️ |
| 传统服务器支持 | ⚠️ | ✅ | ✅ | ✅ |
| 无守护进程配置 | ❌ | ❌ | ❌ | ✅ |
| 配置持久化 | ✅ | ✅ | ✅ | ✅ |
| 多活跃连接支持 | ✅ | ❌ | ❌ | ❌ |
✅ 原生支持 ⚠️ 需额外配置 ❌ 不支持
四、版本演进与兼容性
RHEL/CentOS 系列
| 版本 | 默认方案 | 状态 | 替代方案 |
|---|---|---|---|
| ≤ 6 | network-scripts | 已淘汰 | - |
| 7 | NetworkManager | 维护期 | network-scripts |
| 8+ | NetworkManager | 活跃 | nmstate (YAML) |
| 9 | NetworkManager | 活跃 | keyfiles 配置 |
Debian/Ubuntu 系列
| 版本 | 默认方案 | 状态 | 替代方案 |
|---|---|---|---|
| ≤ 9 (Debian) | networking+interfaces | 维护 | - |
| 10+ (Debian) | NetworkManager | 推荐 | systemd-networkd |
| ≤ 16.04 (Ubuntu) | networking | 淘汰 | - |
| 18.04+ (Ubuntu) | Netplan | 活跃 | NetworkManager |
五、配置转换示例
interfaces → NetworkManager
# 导出配置
nmcli con export iface eth0 > eth0.nmconnection
# 导入配置
nmcli con import type ethernet file eth0.nmconnection
ifcfg → Netplan (Ubuntu)
# /etc/netplan/01-netcfg.yaml
network:
version: 2
ethernets:
eth0:
addresses:
- 192.168.1.10/24
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8]
六、多组件协同工作
graph TB
U[用户] -->|配置| M[NetworkManager]
U -->|配置| S[network-scripts]
U -->|配置| I[interfaces]
M --> C1[网络连接]
S --> N[network服务]
I --> T[networking服务]
C1 --> OS[操作系统网络栈]
N --> OS
T --> OS
OS --> P[物理网卡]
OS --> V[虚拟接口]
协作规则:
- NetworkManager 默认管理所有接口
- 在
/etc/NetworkManager.conf中设置:[main] plugins=keyfile unmanaged-devices=interface-name:eth1 - 被排除的接口可由传统方案管理
七、最佳实践指南
1. 现代服务器推荐方案
# CentOS 8+
nmcli con add type ethernet con-name eth0 ifname eth0 \
ipv4.addresses 192.168.1.10/24 \
ipv4.gateway 192.168.1.1 \
ipv4.dns 8.8.8.8
# Ubuntu 20.04+
netplan apply
2. 传统环境维护
# CentOS 7 静态IP
echo -e 'DEVICE=eth0\nBOOTPROTO=static\nIPADDR=192.168.1.10\nPREFIX=24' > /etc/sysconfig/network-scripts/ifcfg-eth0
systemctl restart network
# Debian 10
echo -e 'auto eth0\niface eth0 inet static\n address 192.168.1.10\n netmask 255.255.255.0' >> /etc/network/interfaces
systemctl restart networking
3. 故障诊断命令
| 组件 | 关键诊断命令 |
|---|---|
| NetworkManager | nmcli general logs; journalctl -u NetworkManager |
| network服务 | journalctl -u network.service |
| networking服务 | systemctl status networking |
| 通用 | ip a; ip r; ss -tuln |
八、演进趋势
timeline
title Linux网络管理演进
section 传统时代
2000 : ifconfig/route
2003 : network-scripts
2005 : NetworkManager诞生
section 过渡期
2010 : systemd-networkd
2015 : nmcli成为主流
section 现代时代
2018 : Netplan (Ubuntu)
2020 : nmstate (声明式配置)
2023 : eBPF网络栈
未来方向:
- 声明式配置 (YAML/JSON)
- 网络策略即代码
- eBPF 驱动的高性能网络栈
- 容器原生网络管理
管理员应优先掌握 NetworkManager (nmcli) 和 Netplan,同时了解传统方案以维护遗留系统。新部署推荐使用声明式配置工具如 nmstate 或 Netplan。