在Linux系统中,实现路由永久生效的核心在于将路由规则写入网络配置文件或利用网络管理工具进行固化,而非单纯依赖命令行临时添加,临时添加的路由在系统重启或网络服务重启后会丢失,根据不同的Linux发行版(如CentOS/RHEL系列或Ubuntu/Debian系列),采用对应的配置文件修改或网络管理工具(如nmcli、netplan)是确保路由持久化的唯一专业且稳定的解决方案。

理解Linux路由机制与持久化需求
Linux内核维护着一个路由表,用于决定数据包的下一个跳转地址,使用ip route add或route add命令添加的路条目仅存储在内存中,属于临时路由,一旦服务器重启、网卡重启或网络服务重载,这些内存中的规则就会被清空,为了满足业务连续性和服务器运维的自动化需求,必须将这些规则“固化”到磁盘的配置文件中,使系统在启动时自动读取并应用这些规则,不同的Linux发行版有着截然不同的网络配置管理方式,针对特定系统环境选择正确的配置方法是关键。
CentOS 6及CentOS 7系统的永久路由配置
在传统的CentOS 6和CentOS 7系统中,网络脚本主要通过/etc/sysconfig/network-scripts/目录下的文件进行管理,要实现永久路由,最标准的方法是在该目录下创建route-网卡名的文件。
需要确认网卡的配置文件名称,例如ifcfg-eth0,对应的路由配置文件应命名为route-eth0,在该文件中,可以按照特定的语法格式添加路由规则,语法格式主要有两种:一种是针对目标网段的,另一种是针对主机的,要添加一条到达192.168.100.0/24网段,网关为10.0.0.1的路由,配置内容如下:
192.168.100.0/24 via 10.0.0.1 dev eth0
如果需要添加默认路由,则可以写成:
default via 10.0.0.1 dev eth0
配置完成后,无需重启服务器,只需重启网络服务即可生效,在CentOS 7中,可以使用systemctl restart network命令,这种方法直接被系统网络服务读取,稳定性极高,是企业级应用中的首选方案。
CentOS 8、RHEL 9及Fedora系统的永久路由配置
从CentOS 8开始,RedHat系列发行版默认使用NetworkManager作为网络管理工具,传统的network-scripts脚本逐渐被弃用,使用nmcli命令行工具或修改NetworkManager的keyfile配置是更符合现代系统架构的做法。
使用nmcli添加永久路由非常高效,通过nmcli connection show找到网卡的连接名称(例如System eth0),使用以下命令将路由规则添加到连接配置中:
nmcli connection modify "System eth0" ipv4.routes "192.168.100.0/24 10.0.0.1"
如果要添加多条路由,可以继续追加,或者使用+ipv4.routes参数,修改完成后,必须执行nmcli connection up "System eth0"来使配置生效并持久化,这种方法直接修改了NetworkManager的连接配置文件,通常位于/etc/NetworkManager/system-connections/目录下,能够完美适配NetworkManager的动态管理机制,避免了手动编辑文件可能带来的语法错误或权限问题。
Ubuntu 18.04及更高版本的Netplan配置

Ubuntu从18.04版本开始,全面采用Netplan作为网络配置工具,其配置文件通常位于/etc/netplan/目录下,后缀为.yaml,YAML文件对缩进格式要求极其严格,因此在编辑时必须格外注意。
在Netplan中配置永久路由,需要编辑对应的YAML文件(如01-netcfg.yaml或00-installer-config.yaml),在对应的网卡配置项下,添加routes字段。
network:
version: 2
ethernets:
eth0:
addresses:
192.168.1.10/24
routes:
to: 192.168.100.0/24
via: 10.0.0.1
配置完成后,使用sudo netplan apply命令来应用配置,Netplan会自动生成并配置后端的systemd-networkd或NetworkManager,实现路由的永久生效,这种声明式的配置方式清晰易读,且支持复杂的网络拓扑结构,是现代Ubuntu系统的标准实践。
Ubuntu 16.04及更早版本与Debian的传统配置
对于尚未采用Netplan的Ubuntu旧版本或Debian系统,永久路由的配置通常在/etc/network/interfaces文件中进行,这是一种基于静态文本文件的配置方式。
在该文件中,找到对应的网卡配置段(如iface eth0 inet static),使用up和down指令来定义路由的添加与删除。
up route add -net 192.168.100.0/24 gw 10.0.0.1 dev eth0
down route del -net 192.168.100.0/24 gw 10.0.0.1 dev eth0
这种方式利用了网络接口启动时的钩子,当网卡启动时执行添加命令,关闭时执行删除命令,虽然逻辑简单,但相比Netplan或NetworkManager,它在处理复杂依赖关系时显得不够灵活,且容易因为命令拼写错误导致网卡启动失败。
通用解决方案:使用rc.local
对于不熟悉特定发行版配置细节,或者需要在多种系统间快速移植脚本的用户,/etc/rc.local文件提供了一个通用的后备方案,需要注意的是,在现代Systemd系统(如CentOS 7+、Ubuntu 16.04+)中,rc.local默认可能被禁用或不具备执行权限。

要使用此方法,首先需要确保rc.local文件存在且具有可执行权限(chmod +x /etc/rc.local),在文件中添加route add或ip route add命令,由于rc.local是在系统启动过程的最后阶段运行的,它能保证网络接口基本已初始化,虽然这种方法通用性强,但它缺乏依赖管理,如果网络服务启动较慢,可能会导致路由添加失败,在专业生产环境中,应优先选择前述针对特定发行版的原生配置方法。
验证与故障排查
配置完成后,验证路由是否正确且永久生效至关重要,使用ip route show或route -n查看当前内核路由表,确认目标路由是否存在,进行重启测试,重启系统后再次检查路由表,确保规则依然存在,如果路由丢失,应检查配置文件语法(特别是YAML的缩进)、文件权限以及NetworkManager或systemd-networkd的服务状态,查看系统日志(如journalctl -xe)往往能提供配置加载失败的具体原因。
相关问答
Q1:在Linux中添加了永久路由后,为什么使用ping命令仍然无法连通目标网络?
A1:路由添加成功仅代表数据包有了发送方向,无法连通通常由以下原因造成:一是目标网段的网关配置错误,导致数据包被丢弃;二是目标主机的防火墙(如iptables、firewalld或Windows防火墙)拦截了ICMP包;三是路由方向性问题,即目标网络没有返回到达本地服务器的路由(不对称路由),建议使用traceroute命令追踪数据包路径,并在中间节点及目标节点检查防火墙规则。
Q2:如何删除已经通过配置文件写入的永久路由?
A2:删除永久路由需要根据配置方式的不同而操作,如果是通过/etc/sysconfig/network-scripts/route-eth0配置的,需编辑该文件删除对应行并重启网络;如果是通过nmcli配置的,可以使用nmcli connection modify "xxx" ipv4.routes ""清空或使用-ipv4.routes删除特定条目;如果是Netplan,需编辑YAML文件删除routes下的对应项并执行netplan apply,切勿仅使用ip route del命令,否则系统重启后路由会自动恢复。
希望以上关于Linux添加永久路由的详细解析能帮助您解决实际运维中的问题,如果您在具体的系统版本操作中遇到报错,欢迎在评论区留言,我们将为您提供进一步的排查建议。


















