武哥带你谈谈-RHEL 网络配置十年变迁:从 ifcfg 到 Keyfile,/etc/sysconfig/network-scripts/ 是如何退出历史舞台的?
文章中如果有描述偏差的内容欢迎指正曾经熟悉的/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等工具所做的修改则不需要重新载入但需要将接口重启一下才能生效bashnmcli dev disconnect eth0 nmcli con up eth0网络脚本的执行逻辑在 RHEL 7 中ifup脚本的工作逻辑大致是查找对应 ifcfg 文件根据其中的 TYPE 键确定调用哪个具体类型的脚本如ifup-wireless或ifup-device然后再执行 IP 相关的设置DHCP 或静态配置。在系统启动时/etc/init.d/network会遍历所有 ifcfg 文件对于ONBOOTyes的设备会先检查 NetworkManager 是否已启动该设备。如果 NetworkManager 尚未启动initscripts 才执行传统行为来激活网络。总体来说RHEL 7 是网络脚本体系的最后一个“全盛时期”但 NetworkManager 已经开始崭露头角。RHEL 8弃用的号角吹响RHEL 8 是网络配置史上一个重要转折点。红帽官方明确声明传统的网络脚本legacy network scripts已在 RHEL 8 中弃用deprecated并将在未来的 RHEL 大版本中被彻底移除。默认安装中不再提供这些网络脚本ifup 和 ifdown 命令的新版本实际上是通过nmcli工具去调用 NetworkManager 服务来实现的。还能用传统方式吗可以但不建议。如果你确实需要传统网络脚本的行为仍然可以通过安装network-scripts软件包来获得bashyum install network-scripts安装后ifup 和 ifdown 命令会链接到这些旧的网络脚本但在调用时会显示弃用警告。不过红帽官方强烈建议将配置迁移到 NetworkManager因为网络脚本的“末日”即将到来。而事实也证明了这一点——RHEL 9 中网络脚本被彻底删除。RHEL 8 的配置文件位置在 RHEL 8 中NetworkManager 默认仍然以 ifcfg 格式将配置文件存储在/etc/sysconfig/network-scripts/目录下。但与此同时Keyfile 格式存储在/etc/NetworkManager/system-connections/目录作为一种“新人”开始出现。配置优先级当两种配置文件同时存在时NetworkManager 的配置优先级规则如下首先查找/etc/NetworkManager/system-connections/中的 Keyfile如果找不到再去/etc/sysconfig/network-scripts/中查找 ifcfg 文件如果两个目录中存在同名配置基于 UUID 匹配Keyfile 会优先生效升级到 RHEL 9 前的准备工作如果你计划从 RHEL 8 升级到 RHEL 9有几个注意事项由于 RHEL 9 不再支持network-scripts软件包升级前需要确保每个 ifcfg-* 文件都明确包含TYPEEthernet配置项。此外建议将自定义的网络脚本迁移到 NetworkManager 的 Dispatcher 脚本机制中。如果实在无法迁移可以编写一个 Dispatcher 脚本来模拟执行原来的自定义脚本。RHEL 9Keyfile 成为主角ifcfg 退居二线RHEL 9 在网络配置领域又迈出了一大步。network-scripts软件包在 RHEL 9 中被彻底移除。这意味着你无法再通过安装network-scripts来获取传统网络脚本。Keyfile 成为默认存储格式从 RHEL 9.0 开始NetworkManager 默认使用Keyfile 格式存储新创建的网络配置存放在/etc/NetworkManager/system-connections/目录中。bash[rootrhel9a ~]# NetworkManager --print-config # NetworkManager configuration: /etc/NetworkManager/NetworkManager.conf [main] # pluginskeyfile,ifcfg-rh ...从上面的输出可以看到keyfile和ifcfg-rh两种插件都在配置中。NetworkManager 会优先查找 Keyfile然后再去查找 ifcfg 文件。如果同一个连接在 Keyfile 和 ifcfg 文件中都存在以 UUID 匹配NetworkManager 会优先使用 Keyfile 中的配置。网络配置工具全面转向 Keyfile当使用nmcli、nmtui、gnome-control-center、cockpit、nmstate以及网络相关的 RHEL 系统角色等工具创建新的网络接口配置时这些配置会以 Keyfile 格式部署。Keyfile 与 ifcfg 格式对比为了方便理解 Keyfile 的格式这里给出一个对比示例传统的 ifcfg 格式(/etc/sysconfig/network-scripts/ifcfg-eth0)bashDEVICEeth0 BOOTPROTOdhcp ONBOOTyes TYPEEthernet新的 Keyfile 格式(/etc/NetworkManager/system-connections/eth0.nmconnection)ini[connection] ideth0 uuid82c6272d-1ff7-4d56-9c7c-0eb27c300029 typeethernet autoconnecttrue [ipv4] methodauto [ipv6] methodauto [ethernet] mac-address00:53:00:8f:fa:66Keyfile 采用标准的 INI 格式可读性更强支持的配置项也更加全面。与功能受限的 ifcfg 格式相比Keyfile 格式支持 NetworkManager 提供的所有连接配置项。安全权限需要特别注意的是出于安全考虑Keyfile 配置文件必须由 root 用户拥有且权限必须设置为600仅 root 可读写因为配置文件中可能包含私钥和密码短语等敏感信息。bashchown root:root /etc/NetworkManager/system-connections/example.nmconnection chmod 600 /etc/NetworkManager/system-connections/example.nmconnection配置文件修改后的重载当你创建或更新 Keyfile 配置文件时NetworkManager 不会自动从磁盘重新加载配置需要执行nmcli connection reload命令来告知 NetworkManager 配置文件发生了变化。bashnmcli connection reloadRHEL 10ifcfg 的最终谢幕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 自带的命令来完成bashnmcli 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中设置dhcpdhclient。请使用默认的内部 DHCP 库dhcpinternal。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同左支持 Keyfileifcfg默认以 NetworkManager 为主可用 yum 安装 network-scriptsRHEL 9/etc/NetworkManager/system-connections/Keyfile默认 ifcfg兼容仅 NetworkManagernetwork-scripts 包已删除RHEL 10/etc/NetworkManager/system-connections/Keyfile仅支持仅 NetworkManagerifcfg 支持已完全移除为什么要推进这一变化很多运维人员可能会问ifcfg 格式用了这么多年不是用得好好的吗为什么要换原因主要有以下几点功能局限ifcfg 格式诞生较早只支持部分网络配置功能很多高级功能无法通过 ifcfg 文件表达。而 Keyfile 格式支持 NetworkManager 提供的所有连接配置项。统一管理将所有网络配置集中到 NetworkManager 统一管理可以避免配置碎片化。现代化需求现代网络场景越来越复杂包括多网卡绑定、虚拟化网络、容器网络等需要更灵活、功能更强大的配置方式。简化维护不再需要同时维护两套网络管理系统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 eth02. 使用系统命令进行批量迁移如果你手头有大量的 ifcfg 配置需要迁移可以使用下面的命令一键完成bashnmcli connection migrate这条命令会将所有的 ifcfg 格式配置文件转换为 Keyfile 格式并存入/etc/NetworkManager/system-connections/目录。3. 使用 nmcli 离线模式在特殊场景下创建配置在某些 NetworkManager 服务不可用的场景下例如在 chroot 环境中或通过 Kickstart 的 %post 脚本修改即将安装的 RHEL 系统的网络配置可以使用nmcli的离线模式来创建 Keyfile 配置bashnmcli --offline connection add type ethernet con-name eth0 ifname eth0 ipv4.method auto这会将连接配置输出到标准输出可以进一步保存到/etc/NetworkManager/system-connections/中。4. 手动创建 Keyfile不推荐虽然 Keyfile 格式是可读、可编辑的但红帽官方强烈不建议手动编辑或创建 Keyfile 配置文件。语法错误会导致不可预期的网络问题。始终建议使用nmcli、nmtui或nmstate API等工具来管理 NetworkManager 连接。常见的迁移问题及解决方案Q1升级到 RHEL 9 时升级工具提示“network-scripts 包缺失”原因系统中存在未被 NetworkManager 托管的 ifcfg 配置文件。解决方案在升级前确保所有 ifcfg 文件都包含TYPEEthernet设置以及NM_CONTROLLEDno如果需要 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 8network-scripts 正式弃用但仍可通过安装包使用同时引入 Keyfile 格式RHEL 9network-scripts 包被彻底删除Keyfile 成为默认存储格式ifcfg 退居兼容模式RHEL 10ifcfg 格式支持完全移除NetworkManager 和 Keyfile 成为唯一选择这不仅是存储格式和目录位置的变化更代表了整个 Linux 网络配置思路的演进从以脚本为中心、人工编辑文件管理的模式向以服务为中心、声明式管理的现代化模式转变。对运维人员来说理解这个变化、学会使用nmcli等现代化工具是跟上时代、保证系统顺利升级的必修课。无论你是 RHEL 8 的长期用户还是打算从旧版本迁移到 RHEL 10都值得花一些时间熟悉 Keyfile 格式和 NetworkManager 的管理方式为下一次系统升级做好充分准备。如果你对 RHEL 网络配置还有其他疑问欢迎在评论区留言讨论参考资料Red Hat Official DocumentationRHEL 9 Release NotesRHEL 10 Considerations in Adopting RHEL 10RHEL Blog: RHEL 9 Networking Changes© 2025 - 本文首发于 CSDN如需转载请注明出处。