武哥带你谈谈-RHEL 网络配置十年变迁:从 ifcfg 到 Keyfile,/etc/sysconfig/network-scripts/ 是如何退出历史舞台的?
2026/5/15 13:29:39 网站建设 项目流程

(文章中如果有描述偏差的内容,欢迎指正)

曾经熟悉的/etc/sysconfig/network-scripts/目录,如今正在被 RHEL 彻底抛弃。本文带你完整回顾 RHEL 7 到 RHEL 10 的网络配置演变之路。

前言

作为一名 Linux 运维人员,相信你对/etc/sysconfig/network-scripts/ifcfg-*这类配置文件一定不陌生。在 RHEL/CentOS 6 及更早的时代,这套网络脚本体系几乎是所有管理员修改网络配置的标准姿势。

但变化正在悄然发生。从 RHEL 8 开始,传统的网络脚本逐步被弃用;RHEL 9 彻底移除了network-scripts软件包;而到了 RHEL 10,对 ifcfg 格式的网络配置文件的支持也被彻底删除。与此同时,NetworkManager 成为唯一网络配置管理工具,Keyfile 格式取代了传统的 ifcfg 文件。

本文将从 RHEL 7 一路走到 RHEL 10,完整梳理网络配置的变迁,帮助你跟上 RHEL 的发展节奏,顺利过渡到新版本。

RHEL 7:双轨并行的过渡时期

在 RHEL 7 中,网络管理处于一个过渡阶段。系统同时支持传统的network.service和 NetworkManager 服务。常见的网络配置文件仍然存储在/etc/sysconfig/network-scripts/目录下,以ifcfg-<接口名>的形式存在。

RHEL 7 的配置特点

RHEL 7 中,绝大多数网络配置信息都保存在/etc/sysconfig/network-scripts/ifcfg-*文件中。全局设置则可以写在/etc/sysconfig/network文件中。

但需要留意一个细节:在 RHEL 7 中,如果你手动编辑了 ifcfg 文件,NetworkManager 不会自动感知到这个变化,你必须主动告知 NetworkManager 去重新载入配置文件。载入方式如下:

bash

# 重新载入所有连接配置 nmcli connection reload # 或者只重新载入某个特定文件 nmcli con load /etc/sysconfig/network-scripts/ifcfg-eth0

nmcli等工具所做的修改则不需要重新载入,但需要将接口重启一下才能生效:

bash

nmcli dev disconnect eth0 nmcli con up eth0

网络脚本的执行逻辑

在 RHEL 7 中,ifup脚本的工作逻辑大致是:查找对应 ifcfg 文件,根据其中的 TYPE 键确定调用哪个具体类型的脚本(如ifup-wirelessifup-device),然后再执行 IP 相关的设置(DHCP 或静态配置)。

在系统启动时,/etc/init.d/network会遍历所有 ifcfg 文件,对于ONBOOT=yes的设备,会先检查 NetworkManager 是否已启动该设备。如果 NetworkManager 尚未启动,initscripts 才执行传统行为来激活网络。

总体来说,RHEL 7 是网络脚本体系的最后一个“全盛时期”,但 NetworkManager 已经开始崭露头角。

RHEL 8:弃用的号角吹响

RHEL 8 是网络配置史上一个重要转折点。

红帽官方明确声明:传统的网络脚本(legacy network scripts)已在 RHEL 8 中弃用(deprecated),并将在未来的 RHEL 大版本中被彻底移除。默认安装中不再提供这些网络脚本,ifup 和 ifdown 命令的新版本实际上是通过nmcli工具去调用 NetworkManager 服务来实现的。

还能用传统方式吗?

可以,但不建议。如果你确实需要传统网络脚本的行为,仍然可以通过安装network-scripts软件包来获得:

bash

yum install network-scripts

安装后,ifup 和 ifdown 命令会链接到这些旧的网络脚本,但在调用时会显示弃用警告。

不过红帽官方强烈建议将配置迁移到 NetworkManager,因为网络脚本的“末日”即将到来。而事实也证明了这一点——RHEL 9 中网络脚本被彻底删除

RHEL 8 的配置文件位置

在 RHEL 8 中,NetworkManager 默认仍然以 ifcfg 格式将配置文件存储在/etc/sysconfig/network-scripts/目录下。但与此同时,Keyfile 格式(存储在/etc/NetworkManager/system-connections/目录)作为一种“新人”开始出现。

配置优先级

当两种配置文件同时存在时,NetworkManager 的配置优先级规则如下:

  1. 首先查找/etc/NetworkManager/system-connections/中的 Keyfile

  2. 如果找不到,再去/etc/sysconfig/network-scripts/中查找 ifcfg 文件

  3. 如果两个目录中存在同名配置(基于 UUID 匹配),Keyfile 会优先生效

升级到 RHEL 9 前的准备工作

如果你计划从 RHEL 8 升级到 RHEL 9,有几个注意事项:

由于 RHEL 9 不再支持network-scripts软件包,升级前需要确保每个 ifcfg-* 文件都明确包含TYPE=Ethernet配置项。此外,建议将自定义的网络脚本迁移到 NetworkManager 的 Dispatcher 脚本机制中。如果实在无法迁移,可以编写一个 Dispatcher 脚本来模拟执行原来的自定义脚本。

RHEL 9:Keyfile 成为主角,ifcfg 退居二线

RHEL 9 在网络配置领域又迈出了一大步。network-scripts软件包在 RHEL 9 中被彻底移除。这意味着,你无法再通过安装network-scripts来获取传统网络脚本。

Keyfile 成为默认存储格式

从 RHEL 9.0 开始,NetworkManager 默认使用Keyfile 格式存储新创建的网络配置,存放在/etc/NetworkManager/system-connections/目录中。

bash

[root@rhel9a ~]# NetworkManager --print-config # NetworkManager configuration: /etc/NetworkManager/NetworkManager.conf [main] # plugins=keyfile,ifcfg-rh ...

从上面的输出可以看到,keyfileifcfg-rh两种插件都在配置中。NetworkManager 会优先查找 Keyfile,然后再去查找 ifcfg 文件。如果同一个连接在 Keyfile 和 ifcfg 文件中都存在(以 UUID 匹配),NetworkManager 会优先使用 Keyfile 中的配置。

网络配置工具全面转向 Keyfile

当使用nmclinmtuignome-control-centercockpitnmstate以及网络相关的 RHEL 系统角色等工具创建新的网络接口配置时,这些配置会以 Keyfile 格式部署。

Keyfile 与 ifcfg 格式对比

为了方便理解 Keyfile 的格式,这里给出一个对比示例:

传统的 ifcfg 格式(/etc/sysconfig/network-scripts/ifcfg-eth0):

bash

DEVICE=eth0 BOOTPROTO=dhcp ONBOOT=yes TYPE=Ethernet

新的 Keyfile 格式(/etc/NetworkManager/system-connections/eth0.nmconnection):

ini

[connection] id=eth0 uuid=82c6272d-1ff7-4d56-9c7c-0eb27c300029 type=ethernet autoconnect=true [ipv4] method=auto [ipv6] method=auto [ethernet] mac-address=00:53:00:8f:fa:66

Keyfile 采用标准的 INI 格式,可读性更强,支持的配置项也更加全面。与功能受限的 ifcfg 格式相比,Keyfile 格式支持 NetworkManager 提供的所有连接配置项

安全权限

需要特别注意的是,出于安全考虑,Keyfile 配置文件必须由 root 用户拥有,且权限必须设置为600(仅 root 可读写),因为配置文件中可能包含私钥和密码短语等敏感信息。

bash

chown root:root /etc/NetworkManager/system-connections/example.nmconnection chmod 600 /etc/NetworkManager/system-connections/example.nmconnection

配置文件修改后的重载

当你创建或更新 Keyfile 配置文件时,NetworkManager 不会自动从磁盘重新加载配置,需要执行nmcli connection reload命令来告知 NetworkManager 配置文件发生了变化。

bash

nmcli connection reload

RHEL 10:ifcfg 的最终谢幕

RHEL 10 正式宣告了对 ifcfg 格式长达近二十年的支持就此结束。

ifcfg 格式彻底移除

在 RHEL 10 中,对 ifcfg 格式的网络配置文件的支持被完全删除。NetworkManager 会直接忽略 ifcfg 文件,并且 RHEL 10 上也无法再将 ifcfg 格式转换回 Keyfile 格式。

红帽官方在 RHEL 10 的采纳指南中明确指出:

在 RHEL 10 发行版本中,删除了对 ifcfg 格式的网络配置文件的支持。

升级到 RHEL 10 的注意事项

如果你计划从 RHEL 9 升级到 RHEL 10,升级工具 Leapp 会检测到 ifcfg 格式的配置文件并阻止升级流程,直到问题被解决。因此,升级前务必将所有 ifcfg 格式的配置文件迁移到 Keyfile 格式

迁移方式也很简单,可以使用 NetworkManager 自带的命令来完成:

bash

nmcli connection migrate

这条命令会将所有 ifcfg 格式的配置文件迁移到 Keyfile 格式,并存储在/etc/NetworkManager/system-connections/目录中。

其他被移除/弃用的网络功能

RHEL 10 在网络方面的变化远不止 ifcfg 移除这一项。以下功能同样被移除或弃用:

  • teamd 服务及 libteam 库被删除:红帽不再同时维护 bonding 和 teaming 两种具有相似功能的机制,而是专注于基于内核的 bonding 机制。如果你在 RHEL 9 中使用了网络 team 配置,在升级到 RHEL 10 之前需要将配置迁移到网络 bonding。

  • dhclient 工具被删除:由于 dhclient 自 2022 年初已停止开发,RHEL 10 中将其彻底删除,不再支持在/etc/NetworkManager.conf中设置dhcp=dhclient。请使用默认的内部 DHCP 库dhcp=internal

  • NetworkManager-initscripts-updown 子软件包被删除:因为 RHEL 9 中已删除相关的network-scripts软件包,所以在 RHEL 10 中此子软件包也变得不可用。

各版本配置方式速查表

为了帮助你快速理解和对比,下面是 RHEL 7 到 RHEL 10 的配置方式变化一览表:

RHEL 版本配置文件默认位置配置格式网络服务
RHEL 7/etc/sysconfig/network-scripts/ifcfgnetwork.service + NetworkManager(双轨并行)
RHEL 8同左(支持 Keyfile)ifcfg(默认)以 NetworkManager 为主,可用 yum 安装 network-scripts
RHEL 9/etc/NetworkManager/system-connections/Keyfile(默认) + ifcfg(兼容)仅 NetworkManager(network-scripts 包已删除)
RHEL 10/etc/NetworkManager/system-connections/Keyfile(仅支持)仅 NetworkManager(ifcfg 支持已完全移除)

为什么要推进这一变化?

很多运维人员可能会问:ifcfg 格式用了这么多年,不是用得好好的吗?为什么要换?

原因主要有以下几点:

  1. 功能局限:ifcfg 格式诞生较早,只支持部分网络配置功能,很多高级功能无法通过 ifcfg 文件表达。而 Keyfile 格式支持 NetworkManager 提供的所有连接配置项

  2. 统一管理:将所有网络配置集中到 NetworkManager 统一管理,可以避免配置碎片化。

  3. 现代化需求:现代网络场景越来越复杂,包括多网卡绑定、虚拟化网络、容器网络等,需要更灵活、功能更强大的配置方式。

  4. 简化维护:不再需要同时维护两套网络管理系统(network.service 和 NetworkManager),降低了开发和维护成本。

如何从 ifcfg 平滑迁移到 Keyfile?

如果你正在使用 RHEL 8 或 RHEL 9,并且仍然依赖 ifcfg 格式,这里提供几条迁移建议:

1. 使用 nmcli 工具创建和管理配置

这是官方推荐的“最佳实践”做法,即不要直接修改任何配置文件,而是使用nmcli等命令行工具进行配置,让 NetworkManager 自动选择最佳格式存储:

bash

# 创建一个新的以太网连接 nmcli connection add type ethernet ifname eth0 con-name eth0 # 配置静态 IP 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 modify eth0 ipv4.method manual # 激活连接 nmcli connection up eth0

2. 使用系统命令进行批量迁移

如果你手头有大量的 ifcfg 配置需要迁移,可以使用下面的命令一键完成:

bash

nmcli connection migrate

这条命令会将所有的 ifcfg 格式配置文件转换为 Keyfile 格式,并存入/etc/NetworkManager/system-connections/目录。

3. 使用 nmcli 离线模式在特殊场景下创建配置

在某些 NetworkManager 服务不可用的场景下(例如在 chroot 环境中,或通过 Kickstart 的 %post 脚本修改即将安装的 RHEL 系统的网络配置),可以使用nmcli的离线模式来创建 Keyfile 配置:

bash

nmcli --offline connection add type ethernet con-name eth0 ifname eth0 ipv4.method auto

这会将连接配置输出到标准输出,可以进一步保存到/etc/NetworkManager/system-connections/中。

4. 手动创建 Keyfile(不推荐)

虽然 Keyfile 格式是可读、可编辑的,但红帽官方强烈不建议手动编辑或创建 Keyfile 配置文件。语法错误会导致不可预期的网络问题。始终建议使用nmclinmtuinmstate API等工具来管理 NetworkManager 连接。

常见的迁移问题及解决方案

Q1:升级到 RHEL 9 时,升级工具提示“network-scripts 包缺失”

原因:系统中存在未被 NetworkManager 托管的 ifcfg 配置文件。

解决方案:在升级前,确保所有 ifcfg 文件都包含TYPE=Ethernet设置,以及NM_CONTROLLED=no(如果需要 NetworkManager 忽略它),并验证 NetworkManager 配置是否正常,然后再进行升级。

Q2:升级到 RHEL 10 时,Leapp 升级失败

原因:系统中仍然存在 ifcfg 格式的旧配置文件。

解决方案:在升级前,先执行nmcli connection migrate将所有配置文件转换为 Keyfile 格式。

Q3:自定义网络脚本无法执行

原因:RHEL 9 及以上版本中network-scripts包已被删除,自定义脚本(如/sbin/ifup-local)不再被调用。

解决方案:将这些脚本迁移到 NetworkManager Dispatcher 脚本中。示例:创建一个/etc/NetworkManager/dispatcher.d/20-if-local文件来模拟调用原有的自定义脚本。或者将原来的自定义脚本移动到/opt/network-scripts/目录中,并通过上述 Dispatcher 脚本来调用它们。

总结

RHEL 网络配置的演化历程是一条清晰的“去旧迎新”之路:

  • RHEL 7:双轨并行,network-scripts 仍然可用并作为主要配置方式之一

  • RHEL 8:network-scripts 正式弃用,但仍可通过安装包使用,同时引入 Keyfile 格式

  • RHEL 9:network-scripts 包被彻底删除,Keyfile 成为默认存储格式,ifcfg 退居兼容模式

  • RHEL 10:ifcfg 格式支持完全移除,NetworkManager 和 Keyfile 成为唯一选择

这不仅是存储格式和目录位置的变化,更代表了整个 Linux 网络配置思路的演进:从以脚本为中心、人工编辑文件管理的模式,向以服务为中心、声明式管理的现代化模式转变。

对运维人员来说,理解这个变化、学会使用nmcli等现代化工具,是跟上时代、保证系统顺利升级的必修课。无论你是 RHEL 8 的长期用户,还是打算从旧版本迁移到 RHEL 10,都值得花一些时间熟悉 Keyfile 格式和 NetworkManager 的管理方式,为下一次系统升级做好充分准备。


如果你对 RHEL 网络配置还有其他疑问,欢迎在评论区留言讨论!

参考资料

  • Red Hat Official Documentation

  • RHEL 9 Release Notes

  • RHEL 10 Considerations in Adopting RHEL 10

  • RHEL Blog: RHEL 9 Networking Changes


© 2025 - 本文首发于 CSDN,如需转载,请注明出处。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询