5154

Good Luck To You!

为什么新版CentOS系统里找不到ifcfg-网络配置文件?

对于许多长期使用CentOS系统的管理员来说,进入/etc/sysconfig/network-scripts/目录,编辑ifcfg-eth0或类似的配置文件,是配置网络连接如同呼吸般自然的操作,当您在较新的CentOS版本(如CentOS 8、9或Stream)中执行同样的操作时,会惊讶地发现,那个熟悉的目录里空空如也,或者只有一两个示例文件,这并非安装错误,而是CentOS网络管理方式的一次根本性变革,本文将深入探讨这一变化的原因,并详细介绍现代CentOS系统中网络配置的新方法。

为什么新版CentOS系统里找不到ifcfg-网络配置文件?

告别旧时代:为什么CentOS不再默认使用ifcfg-文件?

要理解现在,必须先回顾过去,传统的network-scripts服务通过读取/etc/sysconfig/network-scripts/目录下的shell脚本格式的文件(如ifcfg-*)来配置网络,这种方法在过去几十年里服务得很好,但也暴露出一些固有的局限性:

  1. 静态与僵化:配置是静态的,每次更改(如IP地址、网关、DNS),都需要手动编辑文件并重启网络服务,这在需要频繁调整或动态响应网络变化的现代环境中显得笨重。
  2. 功能有限:对于复杂的网络场景,如VLAN、网桥、绑定、Wi-Fi等,network-scripts的配置和管理变得异常复杂,缺乏统一的抽象层。
  3. 缺乏统一API:它没有一个统一的、可供其他应用程序调用的编程接口(API),这使得开发图形化工具或与上层应用集成变得困难。

为了解决这些问题,Red Hat(CentOS的上游)决定将网络管理的重心全面转向NetworkManagerNetworkManager是一个功能强大且动态的网络管理守护进程,它旨在让网络工作“自动搞定”,它能够检测网络硬件的变化,自动连接已知的网络,并提供了一套统一的D-Bus API,使得无论是命令行工具、图形界面还是其他系统服务,都能以一致的方式管理网络。

从CentOS 7开始,NetworkManager成为默认的网络管理工具,但network-scripts作为可选包依然存在,而到了CentOS 8及以后的版本,network-scripts包已不再被默认安装,标志着ifcfg-配置文件时代的正式落幕。

拥抱新工具:现代CentOS网络配置实战

既然ifcfg-文件已成往事,我们该如何在新系统上配置网络呢?NetworkManager提供了几种主流且高效的方法,其中最核心的是nmcli(命令行)和nmtui(文本用户界面)。

命令行王者:nmcli

nmcliNetworkManager的命令行界面,功能极其强大,适合脚本化自动化和习惯命令行操作的管理员,它的语法直观且一致。

假设我们要为名为ens33的网卡配置一个静态IP地址:168.1.100,子网掩码255.255.0,网关168.1.1,DNS为8.8.88.4.4

步骤如下:

  • 查看现有连接和设备状态

    nmcli connection show
    nmcli device status

    这会帮助你识别网卡的设备名(如ens33)和可能已存在的连接名(如Wired connection 1)。

  • 创建一个新的连接配置 我们创建一个名为static-eth0的新连接,并将其绑定到ens33设备上。

    sudo nmcli connection add type ethernet ifname ens33 con-name static-eth0
  • 修改连接的IPv4设置 将其设置为手动模式,并配置IP地址、网关和DNS。

    为什么新版CentOS系统里找不到ifcfg-网络配置文件?

    sudo nmcli connection modify static-eth0 ipv4.method manual ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.dns "8.8.8.8 8.8.4.4"

    注意:/24255.255.0的CIDR表示法,nmcli推荐使用这种格式。

  • 激活连接 应用新配置并使其生效。

    sudo nmcli connection up static-eth0
  • 验证配置

    ip addr show ens33
    ip route show

    至此,一个静态IP就配置完成了,整个过程无需手动编辑任何文件,所有更改都由nmcli通过NetworkManager API完成。

用户友好的选项:nmtui

对于不熟悉命令行的用户,nmtui(NetworkManager Text User Interface)提供了一个基于文本的图形化菜单界面,操作非常直观。

  • 启动nmtui 直接在终端中输入命令:

    sudo nmtui
  • 操作流程

    1. 使用方向键选择“Edit a connection”,然后按回车。
    2. 在列表中选择你要编辑的网卡(如ens33),选择“Edit”。
    3. 在配置页面,将IPv4 CONFIGURATION字段从Automatic改为Manual
    4. Addresses后面选择<Show>,然后填入你的IP地址和子网掩码(如168.1.100/24)。
    5. Gateway处填入网关地址。
    6. DNS servers处填入DNS服务器地址,多个地址用空格隔开。
    7. 配置完成后,选择底部的<OK>保存并退出。
    8. 返回主菜单,选择“Activate a connection”。
    9. 找到你刚刚配置的连接,选择“Deactivate”再“Activate”,使其重新加载配置。

新的配置文件在哪里?

虽然我们不再手动创建ifcfg-文件,但NetworkManager依然会将配置持久化到磁盘上,这些文件现在存储在/etc/NetworkManager/system-connections/目录下。

我们用nmcli创建的static-eth0连接,会生成一个名为static-eth0.nmconnection的文件,其内容大致如下:

[connection]
id=static-eth0
uuid=...
type=ethernet
interface-name=ens33
[ethernet]
[ipv4]
method=manual
address1=192.168.1.100/24,192.168.1.1
dns=8.8.8.8;8.8.4.4;
[ipv6]
method=auto

可以看到,这是一种更简洁的键值对格式,而非shell脚本。强烈建议不要直接手动编辑这些文件,因为NetworkManager可能不会立即识别更改,且手动编辑容易导致语法错误,正确的做法是始终使用nmclinmtui进行修改。

我还能用回ifcfg-吗?传统方法的回归之路

尽管不推荐,但在某些特殊情况下(如遗留系统迁移),你可能确实需要使用ifcfg-文件,这是可以实现的,但需要一些额外的步骤:

为什么新版CentOS系统里找不到ifcfg-网络配置文件?

  1. 安装network-scripts

    sudo dnf install network-scripts
  2. 禁用NetworkManager服务 这是至关重要的一步,因为两个服务同时运行会导致冲突。

    sudo systemctl disable --now NetworkManager
  3. 启用并启动传统的network服务

    sudo systemctl enable --now network

完成这些步骤后,你就可以在/etc/sysconfig/network-scripts/目录中创建或编辑ifcfg-*文件,并使用systemctl restart network来应用更改了,但请记住,这样做意味着你放弃了NetworkManager带来的所有便利和高级功能。

新旧对比:一目了然

特性 传统方法 现代方法
配置文件位置 /etc/sysconfig/network-scripts/ifcfg-* /etc/NetworkManager/system-connections/*.nmconnection
主要工具 vi/nano 编辑器, systemctl restart network nmcli, nmtui
配置方式 手动编写Shell脚本风格的文件 通过工具API进行声明式配置
动态能力 弱,需重启服务 强,支持热插拔、自动连接
复杂网络支持 复杂,配置繁琐 原生支持,管理简单
推荐度 不推荐(除非有特殊需求) 强烈推荐

相关问答 (FAQs)

问题1:我修改了 /etc/NetworkManager/system-connections/ 下的文件,为什么网络没有立即生效?

解答: NetworkManager默认不会持续监控这些配置文件的手动更改,为了使手动编辑的文件生效,你需要通知NetworkManager重新加载配置,最安全的方法是使用nmcli命令:

sudo nmcli connection reload

重新激活受影响的连接:

sudo nmcli connection down <连接名>
sudo nmcli connection up <连接名>

直接重启整个NetworkManager服务(sudo systemctl restart NetworkManager)虽然也能生效,但会短暂中断所有网络连接,不推荐在生产环境中频繁使用。

问题2:NetworkManager 和 network-scripts 可以同时运行吗?

解答: 绝对不可以。 NetworkManagernetwork是两个独立的网络管理服务,它们都试图控制系统的网络接口,如果同时启用,它们会互相争夺控制权,导致网络配置混乱、频繁掉线、IP地址被意外覆盖等不可预测的行为,在任何一个系统中,你必须选择其中一种作为网络管理方案,并确保另一个服务已被彻底禁用,这是系统稳定运行的基本原则。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2025年11月    »
12
3456789
10111213141516
17181920212223
24252627282930
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
    网站收藏
    友情链接

    Powered By Z-BlogPHP 1.7.3

    Copyright Your WebSite.Some Rights Reserved.