对于许多长期使用CentOS系统的管理员来说,进入/etc/sysconfig/network-scripts/
目录,编辑ifcfg-eth0
或类似的配置文件,是配置网络连接如同呼吸般自然的操作,当您在较新的CentOS版本(如CentOS 8、9或Stream)中执行同样的操作时,会惊讶地发现,那个熟悉的目录里空空如也,或者只有一两个示例文件,这并非安装错误,而是CentOS网络管理方式的一次根本性变革,本文将深入探讨这一变化的原因,并详细介绍现代CentOS系统中网络配置的新方法。
告别旧时代:为什么CentOS不再默认使用ifcfg-文件?
要理解现在,必须先回顾过去,传统的network-scripts
服务通过读取/etc/sysconfig/network-scripts/
目录下的shell脚本格式的文件(如ifcfg-*
)来配置网络,这种方法在过去几十年里服务得很好,但也暴露出一些固有的局限性:
- 静态与僵化:配置是静态的,每次更改(如IP地址、网关、DNS),都需要手动编辑文件并重启网络服务,这在需要频繁调整或动态响应网络变化的现代环境中显得笨重。
- 功能有限:对于复杂的网络场景,如VLAN、网桥、绑定、Wi-Fi等,
network-scripts
的配置和管理变得异常复杂,缺乏统一的抽象层。 - 缺乏统一API:它没有一个统一的、可供其他应用程序调用的编程接口(API),这使得开发图形化工具或与上层应用集成变得困难。
为了解决这些问题,Red Hat(CentOS的上游)决定将网络管理的重心全面转向NetworkManager
。NetworkManager
是一个功能强大且动态的网络管理守护进程,它旨在让网络工作“自动搞定”,它能够检测网络硬件的变化,自动连接已知的网络,并提供了一套统一的D-Bus API,使得无论是命令行工具、图形界面还是其他系统服务,都能以一致的方式管理网络。
从CentOS 7开始,NetworkManager
成为默认的网络管理工具,但network-scripts
作为可选包依然存在,而到了CentOS 8及以后的版本,network-scripts
包已不再被默认安装,标志着ifcfg-
配置文件时代的正式落幕。
拥抱新工具:现代CentOS网络配置实战
既然ifcfg-
文件已成往事,我们该如何在新系统上配置网络呢?NetworkManager
提供了几种主流且高效的方法,其中最核心的是nmcli
(命令行)和nmtui
(文本用户界面)。
命令行王者:nmcli
nmcli
是NetworkManager
的命令行界面,功能极其强大,适合脚本化自动化和习惯命令行操作的管理员,它的语法直观且一致。
假设我们要为名为ens33
的网卡配置一个静态IP地址:168.1.100
,子网掩码255.255.0
,网关168.1.1
,DNS为8.8.8
和8.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。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"
注意:
/24
是255.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
操作流程
- 使用方向键选择“Edit a connection”,然后按回车。
- 在列表中选择你要编辑的网卡(如
ens33
),选择“Edit”。 - 在配置页面,将
IPv4 CONFIGURATION
字段从Automatic
改为Manual
。 - 在
Addresses
后面选择<Show>
,然后填入你的IP地址和子网掩码(如168.1.100/24
)。 - 在
Gateway
处填入网关地址。 - 在
DNS servers
处填入DNS服务器地址,多个地址用空格隔开。 - 配置完成后,选择底部的
<OK>
保存并退出。 - 返回主菜单,选择“Activate a connection”。
- 找到你刚刚配置的连接,选择“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
可能不会立即识别更改,且手动编辑容易导致语法错误,正确的做法是始终使用nmcli
或nmtui
进行修改。
我还能用回ifcfg-吗?传统方法的回归之路
尽管不推荐,但在某些特殊情况下(如遗留系统迁移),你可能确实需要使用ifcfg-
文件,这是可以实现的,但需要一些额外的步骤:
安装
network-scripts
包sudo dnf install network-scripts
禁用
NetworkManager
服务
这是至关重要的一步,因为两个服务同时运行会导致冲突。sudo systemctl disable --now NetworkManager
启用并启动传统的
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 可以同时运行吗?
解答: 绝对不可以。 NetworkManager
和network
是两个独立的网络管理服务,它们都试图控制系统的网络接口,如果同时启用,它们会互相争夺控制权,导致网络配置混乱、频繁掉线、IP地址被意外覆盖等不可预测的行为,在任何一个系统中,你必须选择其中一种作为网络管理方案,并确保另一个服务已被彻底禁用,这是系统稳定运行的基本原则。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复