"network"和"NetworkManger"的关系和对比 笔记250706

325 阅读39分钟

"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 服务管理
共存规则
  1. 同一接口不可同时被两者管理
  2. 默认优先级:
    • CentOS 7+:NetworkManager 优先接管
    • 若检测到 NM_CONTROLLED=no,NM 自动放弃控制
  3. 混合管理场景:
    • eth0:由 NM 管理(WiFi/动态环境)
    • eth1:由 network 管理(服务器静态 IP)

📊 适用场景推荐

场景推荐方案原因
服务器 (静态环境)✅ network 服务简单可靠、无运行时开销
桌面/笔记本✅ NetworkManager自动切换 WiFi/有线、VPN 集成
容器主机✅ network 服务减少依赖、快速启动
云实例⚠️ 混合使用元数据服务用 NM,业务网卡用 network
嵌入式设备✅ network 服务资源占用低
移动设备 (4G/WiFi)✅ NetworkManager无缝切换网络

🔧 故障诊断对比

问题network 服务NetworkManager
查看连接状态ip addr shownmcli device status
检查配置cat ifcfg-eth0nmcli con show eth0
查看日志/var/log/messages (CentOS6)journalctl -u NetworkManager
DNS 问题cat /etc/resolv.confnmcli dev show | grep DNS
临时禁用接口ifdown eth0nmcli dev disconnect eth0

性能与资源占用

指标network 服务NetworkManager
内存占用~5 MB~50 MB
CPU 使用接近 0% (空闲)0.1%-3% (轮询)
启动速度快 (同步执行)慢 (异步守护进程)
依赖包数量1 (initscripts)15+ (包括 glib2/dbus)

💎 演进趋势

  1. CentOS 6

    • 默认 network 服务
    • NetworkManager 需手动启用
  2. CentOS 7

    • 默认双服务共存
    • 推荐服务器关闭 NM:
      systemctl disable NetworkManager
      
  3. 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)、IPADDRNETMASKGATEWAYONBOOT
  • 管理命令
    service network restart   # CentOS 6
    systemctl restart network # CentOS 7+
    
  • 依赖工具:传统命令如ifconfigroute(需安装net-tools)或iproute2(如ip addrip 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设置路由)

⚠️ 四、冲突与共存关系

  1. 互斥性

    • 两者同时启用可能导致配置冲突(如IP地址重复分配)。
    • 解决方案:在服务器环境中通常禁用NetworkManager:
      systemctl stop NetworkManager
      systemctl disable NetworkManager
      systemctl enable network  # 启用network服务
      
  2. 协作场景

    • NetworkManager可兼容ifcfg-*文件,但修改后需通过nmcli con reload同步。
    • 若需保留NetworkManager但手动修改配置,建议使用nmcli而非直接编辑文件。

🖥️ 五、适用场景推荐

  1. 选择network服务

    • 服务器、虚拟机等静态环境
    • 脚本化批量配置(如Ansible管理)。
    • 资源受限场景(NetworkManager占用更多内存)。
  2. 选择NetworkManager

    • 桌面用户(自动连接Wi-Fi、VPN)。
    • 移动设备(漫游切换、蜂窝网络)。
    • 复杂网络(多网关策略、绑定接口)。

💎 总结:核心差异与演进趋势

  • network服务:代表传统静态配置,简单稳定但扩展性弱,适合运维自动化场景。
  • NetworkManager:面向现代动态网络,功能丰富,已成为主流桌面发行版默认工具。
  • 演进趋势
    • CentOS 7+/RHEL 8+默认启用NetworkManager,但兼容network脚本。
    • 未来Linux生态中,NetworkManager将逐步替代传统方案,尤其随着云原生和移动化需求增长。

💡 操作建议

  • 服务器:禁用NetworkManager,使用network服务+iproute2命令(如ipss)。
  • 桌面/笔记本:依赖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. 高级网络支持
功能networkNetworkManager
无线网络❌ 不支持✅ 完整支持(需安装NetworkManager-wifi
VPN集成❌ 需额外脚本✅ 原生支持(OpenVPN/WireGuard等)
热插拔❌ 有限支持✅ 自动检测新设备并应用配置
IPv6高级功能❌ 基础支持✅ SLAAC隐私扩展、DHCPv6等

三、服务冲突与共存机制

1. 冲突表现
  • IP地址被意外覆盖
  • 接口频繁启停(up/down
  • DNS设置被重置(如/etc/resolv.conf被覆盖)
2. 解决方案
  1. 完全使用NetworkManager
    systemctl disable --now network  # 禁用network服务
    yum remove network-scripts       # 移除旧配置包
    nmcli device set eth0 managed yes # 确保设备由NM接管
    
  2. 完全使用network服务
    systemctl disable --now NetworkManager  # 禁用NM
    yum install network-scripts            # 安装传统配置支持
    
  3. 混合模式(不推荐)
    • 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支持

五、故障排查命令对比

操作networkNetworkManager
查看服务状态systemctl status networksystemctl status NetworkManager
检查接口配置cat /etc/sysconfig/network-scripts/ifcfg-eth0nmcli connection show eth0
实时日志监控journalctl -u network -fjournalctl -u NetworkManager -f
DNS配置验证cat /etc/resolv.conf`nmcli dev show eth0grep DNS`

总结

💎 核心关系network是面向静态环境的传统服务,而NetworkManager是动态网络管理的现代解决方案。在CentOS 7中二者并存易冲突,需明确主控服务;CentOS 8+则仅官方支持NetworkManager,标志着全面转向动态网络架构。

🔧 实践建议

  • 服务器运维:若无特殊需求(如VPN/热插拔),使用network简化管理;
  • 开发/云环境:优先采用NetworkManager,利用nmcli实现高效配置。

配置前务必通过nmcli device status确认设备管理权归属,避免服务重叠导致的不可预测行为。

















在 Linux 系统中,networkNetworkManager 是两种不同的网络管理服务,各自针对不同的场景设计。以下是两者的核心关系、差异对比及适用场景分析,结合 CentOS/RHEL 等主流发行版的演进实践:


⚙️ 一、核心关系

  1. 历史演进

    • 传统 network 服务
      在 CentOS 5-6 时代作为唯一网络管理工具,通过 /etc/sysconfig/network-scripts/ifcfg-* 文件静态配置网络,依赖 service network restart 生效。
    • 过渡期(CentOS 7)
      NetworkManager 成为默认服务,与 network 并存但易冲突(如路由覆盖、IP 冲突)。
    • 新时代(CentOS 8+)
      NetworkManager 成为唯一官方支持工具network 需通过 network-scripts 包手动安装,且不再默认启用。
  2. 协作与冲突

    • 两者同时启用时,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 等)
资源消耗低(轻量级)较高(支持动态功能)

⚠️ 三、典型冲突与解决方案

  1. 冲突表现

    • IP 地址或路由被意外覆盖
    • DNS 配置重置(/etc/resolv.conf 被修改)
    • 服务重启后接口状态异常。
  2. 根治方案

    • 方案 1(推荐):完全使用 NetworkManager
      systemctl disable --now network          # 禁用 network
      yum remove network-scripts              # 卸载旧配置包(CentOS 8+)
      nmcli device set eth0 managed yes        # 确保设备由 NM 接管
      
    • 方案 2:完全使用 network
      systemctl disable --now NetworkManager   # 禁用 NM
      yum install network-scripts             # 安装传统支持包(CentOS 8+)
      
    • 方案 3(混合)
      ifcfg-eth0 中添加 NM_CONTROLLED=no,并通过 nmcli device set eth0 managed no 声明 network 管理权。

🖥️ 四、适用场景建议

场景推荐工具说明
服务器/静态 IP 环境network配置稳定,无需频繁变更,资源占用低
桌面/笔记本(多网络切换)NetworkManager自动切换 Wi-Fi/有线,支持 VPN 和热点
云环境/容器平台NetworkManager动态适配云厂商网络配置(如 AWS/Azure)
嵌入式设备network轻量化,避免 NM 的动态管理开销

💎 总结

  • 演进趋势NetworkManager 是 Linux 网络管理的未来方向,尤其在动态环境(桌面、云、移动)中优势显著;network 作为传统工具,在静态服务器场景仍有价值,但逐步被取代。
  • 关键决策点
    • 需动态响应网络变化 → 选择 NetworkManager
    • 配置长期不变且需精细控制 → 选择 network
  • 操作原则禁止两者同时管理同一接口,否则必然冲突。迁移至 CentOS 8+ 时,建议直接拥抱 NetworkManager 生态(nmcli/nmtui)以兼容未来更新。

















在 Linux 系统中,networkNetworkManager 是两种网络管理工具,它们的设计目标、功能特性及适用场景存在显著差异。以下是两者的详细对比分析:


一、核心关系

  1. 共存与优先级

    • 在 CentOS 7+ 系统中,两者默认共存,但 NetworkManager 优先级更高。系统启动时,NetworkManager 会接管网络接口管理,若其未运行,则回退到传统 network 服务。
    • 若同时启用两者,需通过配置避免冲突(如禁用 NetworkManager 对特定接口的管理)。
  2. 历史演进

    • network 服务:CentOS 5-6 的传统工具,基于 SysVinit 脚本,通过 /etc/sysconfig/network-scripts/ifcfg-* 文件静态配置网络。
    • NetworkManager:CentOS 7 引入的动态管理工具,支持运行时配置和复杂网络场景,逐步成为主流。

二、功能对比

维度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. 冲突解决步骤
  1. 禁用 NetworkManager 对特定接口的管理
    编辑 /etc/sysconfig/network-scripts/ifcfg-eth0,添加:
    NM_CONTROLLED=no
    
  2. 彻底禁用 NetworkManager
    systemctl stop NetworkManager
    systemctl disable NetworkManager
    chkconfig network on
    service network start
    

六、高级功能对比

功能network 服务NetworkManager
DNS 管理直接写入 /etc/resolv.conf集成管理,支持动态更新和多 DNS 服务器
防火墙集成需配合 iptablesfirewalld原生支持 firewalld 规则同步
VPN 支持需第三方脚本(如 OpenVPN 客户端)原生支持多种 VPN 协议(OpenVPN、IPSec 等)
网络监控依赖 ifconfignetstat提供 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)。
    • 命令行工具:ifconfigrouteifup/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配置桌面/移动设备、动态网络切换
命令行工具ifconfigrouteifup/ifdownnmclinmtui
配置文件路径/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 系统中,networkNetworkManager 是两种常用的网络管理工具,它们的设计理念、使用场景和功能存在显著差异。以下是它们的 关系对比 详细分析:


一、关系

  1. 发展历程

    • network 服务:是传统的网络管理工具,广泛用于 CentOS 6 及更早版本的 Linux 系统。它通过静态配置文件(如 /etc/sysconfig/network-scripts/ifcfg-*)管理网络接口,适合服务器环境。
    • NetworkManager:是新一代的网络管理工具,自 CentOS 7 及更高版本默认启用。它支持动态网络配置(如 Wi-Fi、VPN、移动网络),适合桌面环境和需要频繁切换网络的场景。
  2. 共存与优先级

    • 在 CentOS 7+ 系统中,NetworkManagernetwork 服务可以 共存,但 NetworkManager 的优先级更高
    • 如果同时启用两者,NetworkManager 会接管大多数网络接口的管理,而 network 服务仅在特定情况下(如配置文件未指定由 NetworkManager 管理)生效。
  3. 功能替代性

    • NetworkManagernetwork 的现代化替代工具,提供更灵活的动态网络管理能力。
    • 在服务器环境中,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)。
兼容性与传统工具(如 ifconfigroute)兼容。与现代工具(如 ipnmcli)兼容,部分旧工具(如 ifup/ifdown)可能失效。
默认启用版本CentOS 6 及更早版本。CentOS 7 及更高版本。
未来发展逐步被 NetworkManager 取代。持续更新,成为主流网络管理工具。

三、核心差异示例

1. 配置 IPv6 地址
  • network 服务(CentOS 6)

    1. 编辑接口配置文件(如 /etc/sysconfig/network-scripts/ifcfg-eth0):
      IPV6INIT=yes
      IPV6ADDR=2001:db8::1/64
      IPV6_DEFAULTGW=2001:db8::1
      
    2. 重启网络服务:
      service network restart
      
  • NetworkManager(CentOS 7)

    1. 使用 nmcli 配置:
      nmcli connection modify ens33 ipv6.method manual ipv6.addresses 2001:db8::1/64 ipv6.gateway 2001:db8::1
      nmcli connection up ens33
      
    2. 或编辑配置文件(如 /etc/sysconfig/network-scripts/ifcfg-ens33):
      TYPE=Ethernet
      BOOTPROTO=static
      IPV6INIT=yes
      IPV6ADDR=2001:db8::1/64
      IPV6_DEFAULTGW=2001:db8::1
      ONBOOT=yes
      
    3. 重启网络服务:
      systemctl restart network
      
2. 管理 Wi-Fi 连接
  • network 服务:不支持 Wi-Fi 管理,需手动配置无线驱动和密钥。
  • NetworkManager:支持 Wi-Fi 自动连接、加密密钥管理、信号强度监控等。

四、如何选择?

  1. 选择 network 服务

    • 适用于 服务器环境(如数据中心、虚拟机)。
    • 需要 静态 IP 配置 且网络环境稳定。
    • 不需要 Wi-Fi、VPN 等动态网络功能。
  2. 选择 NetworkManager

    • 适用于 桌面环境(如笔记本电脑、开发机)。
    • 需要 动态网络管理(如频繁切换网络、Wi-Fi 连接)。
    • 支持图形界面或命令行工具(nmcli)快速配置。

五、注意事项

  1. 共存问题

    • 如果系统同时启用 NetworkManagernetwork,需确保配置文件中 NM_CONTROLLED=nonetwork 接口配置文件)以避免冲突。
    • 禁用 NetworkManager 后,需手动启用 network 服务:
      systemctl stop NetworkManager
      systemctl disable NetworkManager
      systemctl enable network
      systemctl start network
      
  2. 工具兼容性

    • NetworkManager 会接管 ifup/ifdown 命令,需通过 nmclinmtui 管理接口。
    • 旧版工具(如 ifconfig)在 CentOS 7+ 中逐渐被 ip 命令替代。

六、总结

  • network 服务:传统、静态、稳定,适合服务器环境。
  • NetworkManager:现代、动态、灵活,适合桌面和移动设备。
  • 趋势:随着 Linux 系统向动态化、自动化发展,NetworkManager 已成为主流工具,而 network 服务逐渐被淘汰。

根据实际需求选择合适的工具,可兼顾稳定性与灵活性。

















在Linux系统中,networkNetworkManager是两种不同的网络管理服务,它们的设计理念、适用场景和管理方式存在显著差异。以下是对两者的详细对比:

一、基本概念与背景

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 statussystemctl 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-*配置文件的场景。

五、注意事项

  1. 配置文件优先级:在CentOS 7中,若同时存在ifcfg-*NetworkManager的配置,NetworkManager的配置(system-connections/下的文件)优先级更高。
  2. 服务冲突解决:若网络配置异常,可先检查NetworkManagernetwork服务是否同时运行,确保仅启用其中一个。
  3. CentOS 8/Stream迁移:CentOS 8及后续版本完全依赖NetworkManagernetwork服务已被弃用,建议提前适应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 插件)。
  • 冲突风险
    若同时启用 networkNetworkManager 服务,可能导致接口被重复配置。建议:
    • 在服务器中关闭 NetworkManager:
      systemctl stop NetworkManager
      systemctl disable NetworkManager
      
    • 在桌面环境中关闭 network 服务(CentOS 7+):
      systemctl mask network
      
(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 良好配合,需要遵循明确的配置规则和分层管理策略。以下是经过优化的完整配置指南:


🔧 一、核心配置原则

  1. 明确接口归属
    • 每个接口只能由一个服务管理
    • 通过 NM_CONTROLLED 参数决定归属
  2. DNS 统一出口
    • 避免两个服务同时修改 /etc/resolv.conf
  3. 路由配置隔离
    • 静态路由使用对应服务的配置文件

📝 二、分步配置指南

步骤 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.serviceNM_CONTROLLED=no
管理接口 (eth1)NetworkManagerNM_CONTROLLED=yes
备份接口 (eth2)NetworkManagerNM_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

💎 最佳实践总结

  1. 明确划分接口

    • 关键业务接口 → network.service (NM_CONTROLLED=no)
    • 动态/备份接口 → NetworkManager (NM_CONTROLLED=yes)
  2. 统一 DNS 出口

    • 指定单一服务管理 DNS(推荐 network.service
    • 设置 dns=none 禁止 NetworkManager 修改 resolv.conf
  3. 服务启动顺序

    graph LR
    A[network.service] --> B[NetworkManager]
    
  4. 监控隔离

    • 分离日志标识
    • 定期检查 nmcli device status
  5. 生产环境建议

    # 最终优化命令
    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 协同工作,需要遵循明确的接口管理划分和精心设计的服务协作机制。以下是经过生产环境验证的完整配置方案:

🔧 核心配置原则

  1. 接口管理权分离:每个物理接口只能由一个服务管理
  2. DNS 统一出口:避免两个服务同时修改 /etc/resolv.conf
  3. 路由配置隔离:不同服务管理的接口使用各自的路由配置方式
  4. 服务启动顺序:确保 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

💎 最佳实践总结

  1. 接口管理权划分

    • 生产接口:network.service (NM_CONTROLLED=no)
    • 管理接口:NetworkManager (NM_CONTROLLED=yes)
  2. 服务启动顺序

    sequenceDiagram
        systemd->>network.service: 启动
        systemd->>NetworkManager: 等待 network.target
        network.service-->>systemd: active
        systemd->>NetworkManager: 启动
    
  3. 配置更新流程

    # 修改 ifcfg 文件后
    nmcli con reload  # 通知 NetworkManager
    systemctl restart network  # 重启 network 服务
    
    # 修改 NetworkManager 连接后
    nmcli con up <connection-name>
    
  4. 监控关键指标

    # 检查接口管理状态
    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
    

三、功能对比矩阵

特性NetworkManagernetwork服务networking服务interfaces文件
动态网络检测
图形界面支持
热插拔支持⚠️
云环境集成⚠️⚠️
传统服务器支持⚠️
无守护进程配置
配置持久化
多活跃连接支持

✅ 原生支持 ⚠️ 需额外配置 ❌ 不支持


四、版本演进与兼容性

RHEL/CentOS 系列
版本默认方案状态替代方案
≤ 6network-scripts已淘汰-
7NetworkManager维护期network-scripts
8+NetworkManager活跃nmstate (YAML)
9NetworkManager活跃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[虚拟接口]

协作规则

  1. NetworkManager 默认管理所有接口
  2. /etc/NetworkManager.conf 中设置:
    [main]
    plugins=keyfile
    unmanaged-devices=interface-name:eth1
    
  3. 被排除的接口可由传统方案管理

七、最佳实践指南

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. 故障诊断命令
组件关键诊断命令
NetworkManagernmcli 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网络栈

在这里插入图片描述

未来方向

  1. 声明式配置 (YAML/JSON)
  2. 网络策略即代码
  3. eBPF 驱动的高性能网络栈
  4. 容器原生网络管理

管理员应优先掌握 NetworkManager (nmcli) 和 Netplan,同时了解传统方案以维护遗留系统。新部署推荐使用声明式配置工具如 nmstate 或 Netplan。