route命令添加的路由重启即失效,永久配置应写入/etc/sysconfig/static-routes文件,格式为“any net 目标网段 gw 网关”,并执行service network restart生效。

route 命令添加的路由重启就消失,别直接写进 /etc/rc.local
临时加一条路由用 route add -net 192.168.10.0/24 gw 192.168.1.1 没问题,但写进 /etc/rc.local 很容易出问题:NFS 挂载失败、网卡还没 up 就执行 route、systemd 启动顺序不兼容。CentOS/RHEL 系统里,/etc/rc.local 的执行时机不可靠,尤其在使用 NetworkManager 或 cloud-init 的场景下,基本等于“赌运气”。
Red Hat/CentOS 系统该往 /etc/sysconfig/static-routes 写
这是最稳妥的永久路由方案,被 /etc/rc.d/init.d/network 显式调用,只要 service network restart 就生效,且兼容所有重启方式。
-
/etc/sysconfig/static-routes文件不存在就手动创建,权限保持默认(644)即可 - 每行格式必须是:
any net 192.168.20.0/24 gw 192.168.1.254——注意开头必须是any,不能写eth0或省略 - 如果目标是单台主机,写成:
any host 192.168.30.5 gw 192.168.1.254 - 支持
netmask写法,比如:any net 10.0.0.0 netmask 255.0.0.0 gw 10.1.1.1,和 CIDR 效果一致
用 ip route 配置后,如何保存为永久路由?
ip route add 192.168.40.0/24 via 192.168.1.254 是现代推荐命令,但它本身不提供“永久”能力。想让它持久化,你得把等效规则转成 static-routes 格式再写入文件 —— 不是直接存 ip route 命令。
- 不要在脚本里反复执行
ip route add,那只是临时行为 -
ip route的输出(如192.168.40.0/24 via 192.168.1.254 dev eth0 proto static metric 100)只供查看,不能直接抄进配置文件 - 真正要存的是语义等价的
static-routes行:any net 192.168.40.0/24 gw 192.168.1.254 - 改完文件后必须执行:
service network restart(不是systemctl restart network,旧版 SysV 脚本不认后者)
Debian/Ubuntu 系统走 /etc/network/interfaces,别混用 Red Hat 方式
如果你在 Ubuntu 上照搬 static-routes,它根本不会读 —— 这个文件只被 RHEL/CentOS/Fedora 的 network service 解析。Debian 系列要用接口配置块里的 up 指令:
auto eth0
iface eth0 inet static
address 192.168.1.10
netmask 255.255.255.0
up ip route add 192.168.50.0/24 via 192.168.1.254
down ip route del 192.168.50.0/24 via 192.168.1.254
注意:这种写法依赖 ifupdown,systemd-networkd 或 Netplan 下不适用;用 Netplan 的话,得在 routes: 下写 YAML 结构,语法完全不同。
真正容易被忽略的是:不同发行版对“永久”的实现机制完全隔离,没有跨平台通用配置方式。写错位置或用错语法,route -n 看着有,一重启就空了。











