在管理 CentOS 服务器时,网络配置是基础且至关重要的一环,静态路由的配置是一项常见任务,用于指定数据包应遵循的非默认路径,许多管理员会遇到一个典型问题:通过 ip route add
或 route add
命令添加的路由规则在服务器重启后会丢失,为了确保网络策略的稳定性和持久性,掌握如何设置永久生效的路由是必备技能,本文将深入探讨在不同版本的 CentOS 中,如何系统化、可靠地配置永久路由。
临时路由与永久路由的区别
我们需要理解临时路由和永久路由的根本差异,使用命令行工具直接添加的路由属于临时路由,它们仅存在于当前运行时的内核路由表中,一旦系统重启或网络服务被重置,这些配置便会烟消云散。
添加一条临时路由的命令如下:
# 添加一条指向 192.168.100.0/24 网段,网关为 10.0.0.1 的路由 sudo ip route add 192.168.100.0/24 via 10.0.0.1 dev eth0
执行后,可以通过 ip route show
或 route -n
查看该路由已生效,但这种配置方式仅适用于临时测试或紧急调试,绝不能用于生产环境的长期规划。
永久路由则是将配置写入系统级别的配置文件中,使其在每次系统启动或网络服务加载时被自动读取和应用,这才是保障服务器网络稳定性的正确做法,CentOS 的不同版本采用了不同的网络管理机制,因此配置永久路由的方法也有所区别。
CentOS 7/8/Stream:使用 NetworkManager 实现永久路由
从 CentOS 7 开始,NetworkManager 成为了默认的网络管理工具,它提供了一套强大且灵活的命令行(nmcli
)和文本用户界面(nmtui
)来管理网络连接,包括静态路由,这是目前最推荐、最现代化的方法。
使用 nmcli
命令行工具(推荐)
nmcli
(NetworkManager Command-Line Interface)是与 NetworkManager 交互的首选方式,它允许脚本化管理,非常适合自动化运维。
假设我们要为名为 eth0
的网络接口添加一条永久路由:目标网络为 168.100.0/24
,下一跳网关为 0.0.1
。
步骤 1:查看当前连接名称
确认网络接口的连接名称,它可能与设备名(如 eth0)相同,也可能不同。
nmcli connection show
输出会列出所有连接,找到对应 eth0
设备的连接名称,Wired connection 1
或 eth0
,为方便起见,我们假设连接名称就是 eth0
。
步骤 2:修改连接配置,添加路由
使用 nmcli connection modify
命令来添加路由。+ipv4.routes
表示追加一条 IPv4 路由规则。
sudo nmcli connection modify "eth0" +ipv4.routes "192.168.100.0/24 10.0.0.1"
如果需要添加多条路由,可以重复执行此命令,或者一次性添加,用引号将多条规则括起来,每条规则用分号隔开。
# 添加多条路由的示例 sudo nmcli connection modify "eth0" +ipv4.routes "192.168.100.0/24 10.0.0.1,10.10.20.0/24 10.0.0.2"
步骤 3:重新激活连接使配置生效
配置修改后,需要重新加载或重启网络连接来应用新设置。
sudo nmcli connection down "eth0" && sudo nmcli connection up "eth0"
步骤 4:验证路由
再次检查路由表,确认新添加的路由已经存在,并且在重启系统后依然有效。
ip route show
使用 nmtui
文本用户界面
对于偏好图形化界面的用户,nmtui
提供了一个直观的配置方式。
- 在终端中输入
nmtui
并回车。 - 使用方向键选择 “Edit a connection”,然后按回车。
- 选择你要配置的网络连接(如
eth0
),选择 “Edit”。 - 在 “IPv4 Configuration” 区域,确保模式为 “Manual”(手动)。
- 使用方向键移动到下方的 “Routes” 字段,选择 “Edit”。
- 在弹出的窗口中,填写目标地址、子网掩码(或前缀长度)、网关和跃点数(通常留空),然后选择 “OK” 保存,可以添加多条路由。
- 返回上一级,选择 “Back”,然后选择 “Quit” 退出。
- 重启网络服务或重新激活连接以应用更改。
传统配置文件方式(不推荐)
虽然 NetworkManager 是主流,但通过修改 /etc/sysconfig/network-scripts/
目录下的配置文件依然可行,这种方式需要手动处理,且容易与 NetworkManager 的自动管理产生冲突。
在对应的接口配置文件(如 ifcfg-eth0
)中,可以直接添加路由,更规范的做法是创建一个 route-<接口名>
的文件。
创建 /etc/sysconfig/network-scripts/route-eth0
文件,内容如下:
# 格式:ADDRESS0=目标网络, NETMASK0=子网掩码, GATEWAY0=网关
ADDRESS0=192.168.100.0
NETMASK0=255.255.255.0
GATEWAY0=10.0.0.1
# 如果有多条路由,依次使用 ADDRESS1, NETMASK1, GATEWAY1...
保存文件后,重启网络服务(systemctl restart network
)即可,但请注意,这种方式在 CentOS 7/8 中已逐渐被 nmcli
取代。
CentOS 6:使用传统网络脚本
在 CentOS 6 及更早版本中,网络管理主要由传统的 network
脚本负责,配置永久路由的方法非常直接,即在 /etc/sysconfig/network-scripts/
目录下创建 route-<接口名>
文件。
假设网卡为 eth0
,则创建文件 /etc/sysconfig/network-scripts/route-eth0
。
的格式非常简洁:
# 格式:目标网络/子网掩码长度 via 网关 dev 接口名
192.168.100.0/24 via 10.0.0.1 dev eth0
如果需要添加多条路由,只需在文件中逐行添加即可:
168.100.0/24 via 10.0.0.1 dev eth0
10.10.20.0/24 via 10.0.0.2 dev eth0
保存文件后,重启网络服务即可使配置永久生效。
service network restart
无论采用哪种方法,最终的验证步骤都是相同的,使用 ip route show
或 route -n
查看内核路由表,确认配置已正确加载,最可靠的验证方式是执行一次完整的系统重启,检查路由是否依然存在。
为了更清晰地对比不同版本和方法,下表小编总结了核心配置方式:
CentOS 版本 | 推荐方法 | 配置文件/工具 | 优点 | 缺点 |
---|---|---|---|---|
7/8/Stream | nmcli 命令行 | NetworkManager | 自动化、脚本友好、与系统深度集成 | 需要学习新的命令语法 |
7/8/Stream | nmtui 文本界面 | NetworkManager | 直观、易于上手 | 不适合自动化脚本 |
7/8/Stream | route-<iface> 文件 | /etc/sysconfig/network-scripts/ | 兼容旧习惯 | 可能与 NetworkManager 冲突 |
6 | route-<iface> 文件 | /etc/sysconfig/network-scripts/ | 系统原生、简单直接 | 缺乏现代网络管理工具的灵活性 |
在 CentOS 中设置永久路由的关键在于识别系统版本并采用与之匹配的正确方法,对于当前主流的 CentOS 7/8/Stream,拥抱并熟练使用 nmcli
是最高效、最可靠的选择,而对于维护老旧系统的管理员,掌握传统的 route-<接口名>
文件配置法则至关重要,正确的配置不仅能保证网络的持续稳定,更能为复杂的网络拓扑奠定坚实的基础。
相关问答 (FAQs)
问:我已经按照教程使用 nmcli
添加了永久路由,但使用 ping
命令测试目标网络仍然不通,可能是什么原因?
答: 这是一个常见的故障排查场景,请按以下顺序检查:
- 路由表确认:首先再次运行
ip route show
,确保你添加的路由规则确实存在于路由表中,且网关地址正确无误。 - 网关可达性:直接
ping
你的网关地址(ping 10.0.0.1
),如果网关本身不通,那么任何经过它的路由都无法工作,需要检查网关设备的配置或中间链路。 - 防火墙与 SELinux:检查本机防火墙(
firewalld
或iptables
)以及目标网络路径上所有设备的防火墙规则,确保没有阻止 ICMP 或相关流量,检查 SELinux 状态,有时严格的安全策略也可能影响网络通信。 - 连接状态:确认
nmcli
修改后,网络连接已经成功重新激活,可以使用nmcli connection show "eth0"
查看连接详情和状态。
问:我可以在 CentOS 7/8 系统上同时使用 nmcli
和手动编辑 /etc/sysconfig/network-scripts/route-eth0
文件来管理路由吗?
答: 强烈不建议这样做,虽然 NetworkManager 在某些情况下能够识别 route-<接口名>
文件,但这两种管理方式是并行的,极易引发配置冲突,你用 nmcli
添加了一条路由,然后手动编辑文件删除了它,NetworkManager 的内部状态和文件内容就会不一致,导致不可预测的行为,最佳实践是选择一种管理方式并坚持使用,对于 CentOS 7/8,始终优先使用 nmcli
或 nmtui
,让 NetworkManager 成为唯一的网络配置来源,这样可以避免绝大多数由配置冲突引发的问题。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复