永久设置默认路由必须使用 /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-<em>IFNAME</em>(静态路由)和/etc/sysconfig/network-scripts/ifcfg-<em>IFNAME</em>中的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-<em>IFNAME</em> 文件里还写着 GATEWAY=...。
CentOS 7 规则:只要任意一张网卡配置了 GATEWAY,NetworkManager 就会把它当作唯一默认网关,忽略其他网卡的 route-<em>IFNAME</em> 和 IPV4_ROUTE_METRIC。
- 删掉所有
ifcfg-*文件里的GATEWAY=行(包括注释掉的) - 确保只有
route-<em>IFNAME</em>文件负责定义default via - 确认
BOOTPROTO=static,否则IPV4_ROUTE_METRIC不生效
metric 生效的前提是:多条 default 路由同时存在于内核路由表中。而这个“同时存在”,依赖于 clean 的配置——没有 GATEWAY 干扰,没有 NetworkManager 的 auto-gateway 逻辑介入。











