要永久设置默认路由,必须同时使用 /etc/sysconfig/network-scripts/route-IFNAME 和 ifcfg-IFNAME 里的 IPV4_ROUTE_METRIC,并且把所有 GATEWAY= 配置全部禁用。等 network 服务重启之后,再用 ip route 去验证多路径的 metric 优先级是否生效。

route 命令不能持久化,别直接用它设默认路由
临时加上一条 route add default gw 192.168.10.1 dev ens33,表面上确实能立刻生效,可一旦重启,或者执行 systemctl restart network,这条路由就会直接消失。问题出在这里:从 CentOS 7 开始,NetworkManager 和 ifup/ifdown 脚本不再读取 route 命令对内核路由表做出的临时变更,真正认的,只有配置文件里明确写下的声明。
常见错误现象:执行 route -n 看到新路由,ip route 却没出现;或者重启后 default 路由自动回退到某张网卡(通常是第一个 up 的网卡)。
- 不要在
/etc/rc.local里写route add—— NetworkManager 会覆盖它 - 不要依赖
nmcli connection modify ... ipv4.routes设置默认网关,它不支持default关键字,会静默失败 - 真正生效的入口只有两个:
/etc/sysconfig/network-scripts/route-IFNAME(静态路由)和/etc/sysconfig/network-scripts/ifcfg-IFNAME中的IPV4_ROUTE_METRIC
永久设置某网卡的默认路由和 metric
假设你要让 ens192 承担默认出口,且优先级高于其他网卡,必须分两步做:
第一步:在 /etc/sysconfig/network-scripts/route-ens192 中写入默认路由行(注意格式严格):
default via 192.168.1.1 dev ens192
第二步:在 /etc/sysconfig/network-scripts/ifcfg-ens192 中添加或修改:
IPV4_ROUTE_METRIC=10
如果另一张网卡 ens224 也要配默认路由(比如作为 fallback),就在它的 route-ens224 文件里写:
default via 172.20.17.1 dev ens224
并在 ifcfg-ens224 中设:
IPV4_ROUTE_METRIC=100
数值越小越优先,系统会按 metric 自动选 default 出口。
- route-IFNAME 文件里每行只能是一条路由,不能带注释,空格必须是英文空格
via和dev是关键字,前后各一个空格,顺序不能颠倒- metric 值建议避开 0(系统保留给 loopback)、256+(部分旧脚本截断)
验证时看 ip route,别信 route -n
route -n 显示的是传统 BSD 风格路由表,CentOS 7+ 实际走的是 netlink 接口,ip route 才反映真实内核路由状态。
执行 ip route 后应看到类似输出:
default via 192.168.1.1 dev ens192 metric 10 default via 172.20.17.1 dev ens224 metric 100 192.168.1.0/24 dev ens192 proto kernel scope link src 192.168.1.100
注意两点:
- 同一目标(如
default)出现多条时,kernel 选 metric 最小的那条 - 如果只看到一条
default,说明另一条被IPV4_ROUTE_METRIC抑制了,或 route-IFNAME 文件未被加载 - 改完配置后必须执行
nmcli connection reload && systemctl restart network,ifdown/ifup不触发 route-IFNAME 重载
多默认路由冲突时 metric 不起作用?检查 GATEWAY 是否重复定义
如果设置了 IPV4_ROUTE_METRIC 但 ip route 里仍只有一条 default,大概率是某张网卡的 ifcfg-IFNAME 文件里还写着 GATEWAY=...。
CentOS 7 规则:只要任意一张网卡配置了 GATEWAY,NetworkManager 就会把它当作唯一默认网关,忽略其他网卡的 route-IFNAME 和 IPV4_ROUTE_METRIC。
- 删掉所有
ifcfg-*文件里的GATEWAY=行(包括注释掉的) - 确保只有
route-IFNAME文件负责定义default via - 确认
BOOTPROTO=static,否则IPV4_ROUTE_METRIC不生效
metric 生效的前提是:多条 default 路由同时存在于内核路由表中。而这个“同时存在”,依赖于 clean 的配置——没有 GATEWAY 干扰,没有 NetworkManager 的 auto-gateway 逻辑介入。