CentOS 7中IPV4_ROUTE_METRIC是控制单网卡默认路由优先级的核心配置项,需写入/etc/sysconfig/network-scripts/ifcfg-*文件(如IPV4_ROUTE_METRIC=0),数值越小优先级越高;修改后须ifdown/ifup或nmcli reload+up生效,且需避免NetworkManager覆盖或双GATEWAY冲突。

IPV4_ROUTE_METRIC 是 CentOS 7 里控制单网卡默认路由优先级的核心配置项,直接写进网卡配置文件即可生效。临时用 ip route 或 route 改的 metric 重启就丢,必须走永久配置。
怎么在 ifcfg-* 文件里设置路由优先级
每个网卡对应一个配置文件(如 /etc/sysconfig/network-scripts/ifcfg-ens192),修改它就能影响该网卡生成的默认路由 metric 值:
-
IPV4_ROUTE_METRIC必须是整数,数值越小,这条路由越优先(比如设成0就比100高) - 如果没写这行,默认值通常是
100,但不同发行版或 NetworkManager 版本可能有差异 - 不能写成
IPV4_ROUTE_METRIC="0"带引号——虽然部分版本兼容,但有些会解析失败;推荐不带引号:IPV4_ROUTE_METRIC=0 - 改完必须重启该网卡或整个网络服务:
nmcli connection reload+nmcli connection down ens192 && nmcli connection up ens192,或者用systemctl restart network(前提是没完全禁用 NetworkManager)
为什么 route -n 显示的 metric 没变
常见现象:改了 ifcfg-* 文件、也 reload/restart 了,但 ip route 或 route -n 输出里 metric 还是老样子。原因通常有三个:
- 网卡没真正重载——
ifdown/ifup比systemctl restart network更可靠,尤其当 NetworkManager 和传统 network service 并存时 - 配置被 NetworkManager 覆盖——检查
nmcli connection show ens192 | grep route-metric,如果输出里有ipv4.route-metric,说明 NM 已接管,此时要改 NM 的 connection 属性:nmcli connection modify ens192 ipv4.route-metric 0 - 多个默认网关冲突——比如两块网卡都配了
GATEWAY,系统会按顺序生成两条 default 路由,但只有一条能带 metric;这时得删掉其中一块网卡的GATEWAY行,只留一个主出口
route-iface 文件里能不能设 metric
不能。/etc/sysconfig/network-scripts/route-ens192 只支持静态路由语句(如 192.168.1.0/24 via 192.168.1.1 dev ens192),不识别 metric 参数。想给某条静态路由加优先级,得用完整语法:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
192.168.1.0/24 via 192.168.1.1 dev ens192 metric 10
但注意:这种写法只在 RHEL/CentOS 7.6+ 及较新 NetworkManager 版本中有效;旧版本会忽略 metric 字段,必须用 ip route replace 加 table + rule 方式绕过。
多网卡场景下 metric 设多少才合理
没有固定“安全值”,关键是相对差值要明确:
- 主网卡(比如外网出口)设
IPV4_ROUTE_METRIC=10 - 备用网卡(比如内网或管理网)设
IPV4_ROUTE_METRIC=100 - 千万别设成相同值(如都是
100),Linux 不保证顺序,可能随机选一条 default 路由 - 如果用了策略路由(
ip rule+ 多表),IPV4_ROUTE_METRIC只影响 main 表里的 default 条目,不影响其他表——这点容易被忽略
实际生效后,ip route show table main 里每条 default 路由末尾的 metric N 就是你设的值。只要它出现且数值符合预期,说明配置已落地。别信 route -n 的旧输出,它有时缓存不刷新。


















