在 Linux 系统运维中,实现路由规则的永久保存是确保网络连接稳定性的关键环节。核心上文归纳是:Linux 系统中使用 ip route 或 route 命令添加的路由规则默认仅临时存放在内核内存中,系统重启后会自动失效;要实现路由的永久保存,必须根据发行版的不同,将路由配置写入网络管理服务的配置文件中(如 Netplan、NetworkManager 或传统 rc.local),并确保配置文件语法正确且服务生效。

临时路由与永久路由的区别
在深入配置之前,必须理解 Linux 路由的工作机制,当管理员在命令行执行 ip route add 指令时,该规则直接被写入内核的路由表中,这种操作的优势是即时生效,便于调试,但缺点是易失性,一旦服务器重启或网络服务重启,内存中的数据会被清空,网络通信将因此中断,生产环境中的路由配置必须“持久化”,即把配置逻辑固化到磁盘文件中,由系统在启动过程中自动读取并加载。
基于 Netplan 的配置方案(Ubuntu 18.04+)
对于使用现代 Netplan 架构的 Ubuntu 版本,网络配置文件通常位于 /etc/netplan/ 目录下,后缀为 .yaml,这是目前最推荐的配置方式,因为它具有声明式和易于版本控制的特性。
配置步骤如下:
-
查找配置文件:使用
ls /etc/netplan/找到对应的 YAML 文件,01-netcfg.yaml。 -
编辑文件:使用 root 权限打开文件,在对应的网络接口下添加
routes字段,注意 YAML 对缩进极其敏感,必须使用空格而非 Tab 键。network: version: 2 ethernets: eth0: dhcp4: no addresses: [192.168.1.100/24] gateway4: 192.168.1.1 nameservers: addresses: [8.8.8.8, 8.8.4.4] routes: to: 10.0.0.0/16 via: 192.168.1.254 table: main在上述配置中,
to指定目标网段,via指定下一跳网关。 -
应用配置:编辑完成后,执行
sudo netplan apply,该命令会立即验证语法并应用路由,无需重启,若配置有误,命令会报错并回滚,保证了系统的安全性。
基于 NetworkManager (nmcli) 的配置方案(CentOS 8+/RHEL 8+/Fedora)
在 RedHat 系的新版本中,传统的 network-scripts 已被弃用,NetworkManager 成为标准,使用 nmcli 工具修改连接配置是专业且高效的做法,它避免了直接编辑复杂配置文件可能带来的语法错误。
操作指令如下:
-
查看当前连接名称:执行
nmcli connection show,找到需要修改的网卡对应的 NAME(System eth0)。
-
添加静态路由:使用
nmcli connection modify命令,语法格式为ipv4.routes "目标网段 下一跳"。sudo nmcli connection modify "System eth0" +ipv4.routes "192.168.2.0/24 192.168.1.254"
注意命令中的 号,表示追加路由,如果使用
ipv4.routes(不带加号),则会覆盖现有的路由列表。 -
设置手动模式:如果接口原本是 DHCP,可能需要确保路由不会冲突,通常建议将接口设为静态,或在 DHCP 模式下谨慎使用。
-
重载连接:配置写入后,需要重启连接使其生效。
sudo nmcli connection up "System eth0"
此方法将路由信息保存在
/etc/NetworkManager/system-connections/目录下的对应文件中,重启后依然有效。
传统配置文件方案(CentOS 7/老版本 Debian)
对于较旧的系统或特定的运维环境,可能仍需使用传统的静态路由文件。
在 CentOS/RHEL 7 中:
路由配置通常保存在 /etc/sysconfig/network-scripts/route-<接口名> 文件中,针对 eth0 的路由文件为 route-eth0。
格式如下:
168.2.0/24 via 192.168.1.254 dev eth0 10.0.0.0/8 via 192.168.1.1 dev eth0
编辑保存后,重启网络服务 systemctl restart network 即可。
在老版本 Ubuntu/Debian 中:
通过编辑 /etc/network/interfaces 文件,在接口定义块末尾添加 up ip route add ... 指令,虽然这种方法可行,但在现代系统中已不推荐,因为它依赖于脚本执行的顺序,不如 Netplan 规范。
通用方案:使用 /etc/rc.local
对于不熟悉特定发行版配置工具的管理员,或者在一些嵌入式、精简版的 Linux 系统中,rc.local 是一个“万能”的兜底方案,该脚本在系统启动过程的最后阶段执行。

实现步骤:
-
确保 rc.local 服务开启:在现代 Systemd 系统中,
rc-local.service默认可能被禁用或文件不存在,需要手动创建/etc/rc.local文件并赋予执行权限chmod +x /etc/rc.local。 -
写入路由命令:在文件中添加
ip route add命令。#!/bin/bash ip route add 192.168.2.0/24 via 192.168.1.254 exit 0
虽然此方法简单直接,但不推荐作为生产环境的首选方案,因为它缺乏依赖检查(可能在网卡未 UP 时就执行了),且难以进行集中化管理,它仅作为在其他配置方法均无效时的备选手段。
验证与故障排查
配置完成后,必须进行严格的验证,首先使用 ip route show 或 route -n 查看当前内核路由表,确认目标路由是否存在,使用 ping 命令测试目标网段的连通性,如果路由未生效,应检查以下几点:
- 配置文件语法:特别是 YAML 的缩进和 nmcli 的引号使用。
- 网关可达性:确保配置的下一跳网关地址是当前直连网络可达的。
- 系统日志:使用
journalctl -xe查看网络服务的报错信息,这通常是解决问题的关键线索。
相关问答
Q1:在 Linux 中配置静态路由时,如何指定路由的优先级(Metric 值)?
A: 路由的优先级由 Metric 值决定,数值越小优先级越高,在使用 ip route add 命令时,可以添加 metric 参数,ip route add 192.168.2.0/24 via 192.168.1.254 metric 100,在 Netplan 配置中,可以在 routes 字段下添加 metric: 100,在 NetworkManager (nmcli) 中,可以在路由字符串后添加 metric,如 "192.168.2.0/24 192.168.1.254 100",如果不指定,系统会根据内核算法自动分配一个默认值。
Q2:为什么我修改了配置文件并重启了网络服务,但使用 ip route 依然看不到新路由?
A: 这通常由三个原因导致,第一,配置文件语法错误导致服务未能成功加载,建议查看系统日志(如 journalctl -u NetworkManager 或 /var/log/messages);第二,配置修改了错误的网卡接口,确保路由配置绑定在正在 UP 状态的接口上;第三,DHCP 覆盖了静态配置,如果接口同时开启了 DHCP 且 DHCP 服务器下发了同类路由,它可能会覆盖手动配置的静态路由,此时需要设置 DHCP 不会覆盖路由或关闭该接口的 DHCP。
希望以上关于 Linux 保存路由的详细方案能解决您的网络配置问题,如果您在具体的发行版操作中遇到报错,欢迎在评论区留言,我们可以进一步探讨具体的日志分析。

















