在rhel/centos 7+中,需在网卡配置文件(如/etc/sysconfig/network-scripts/ifcfg-ens192)中添加ipv4_route_metric=数值,数值越小优先级越高,且各网卡值必须唯一;该设置永久生效,避免默认metric冲突导致路由不可控。

修改网卡配置文件中的 IPV4_ROUTE_METRIC
CentOS 7+(包括 RHEL、Rocky、AlmaLinux)使用 NetworkManager 或传统 network 服务管理路由,优先级由 metric 值控制——数值越小,优先级越高。永久生效的唯一可靠方式是写入网卡配置文件。
操作路径固定:/etc/sysconfig/network-scripts/ifcfg-<em>INTERFACE_NAME</em>(如 ifcfg-ens192)。必须添加或修改这一行:
IPV4_ROUTE_METRIC=50
- 若该网卡需作为主出口(例如走外网),建议设为
0或10; - 若为辅助网卡(如内网管理口),设为
100、200等更高值; - 不能留空或设为负数,否则会被忽略或触发 fallback 行为;
- 多个网卡的
IPV4_ROUTE_METRIC值必须互不相同,否则系统可能任意选择默认路由。
为什么不能只用 ip route replace 或 route add
这些命令改的是内核当前路由表,重启即失效,且在 NetworkManager 或 systemctl restart network 后会被覆盖。更关键的是:当多张网卡都配置了 GATEWAY,但没设 IPV4_ROUTE_METRIC,系统会为它们分配默认 metric(通常是 100),导致路由冲突——ip route show 可能显示两条 default via ... metric 100,此时内核按“先到先得”选路,行为不可控。
常见错误现象:
-
ping外网通,但 SSH 连入时响应慢或超时; - 从某网卡进来的连接,回包却从另一网卡发出(asymmetric routing);
-
ip route get 8.8.8.8返回的出口设备与预期不符。
验证是否生效:看 ip route 输出里的 metric
重启网络后运行:
ip route show
输出中每条 default 路由末尾必须带明确的 metric N,例如:
default via 172.20.17.1 dev ens224 metric 100<br>192.168.1.0/24 via 192.168.1.1 dev ens192 metric 0
注意:
- 没有
metric字样的默认路由,说明IPV4_ROUTE_METRIC未被读取(检查拼写、空格、是否漏掉引号); - 如果看到
metric 1024这类大数值,往往是 NetworkManager fallback 分配的,代表配置未生效; - 用
ip route get <target_ip></target_ip>测试具体目标走哪条路径,比只看default更准。
双网卡同网段时 metric 不起作用?得靠策略路由
如果两块网卡在同一子网(比如都接 192.168.1.0/24),仅靠 metric 无法区分出口——因为内核路由决策优先匹配最长前缀,子网完全一致时才看 metric。这时必须用策略路由(policy routing):
- 编辑
/etc/iproute2/rt_tables,新增自定义表名与 ID(如200 net_a); - 用
ip rule add from <src_ip> table net_a</src_ip>绑定源地址; - 用
ip route add default via <gw> dev <iface> table net_a</iface></gw>设置该表路由; - 所有配置需写入脚本并加入
/etc/rc.d/rc.local或 systemd service 才能持久化(RHEL/CentOS 7+ 中rc.local默认不执行,需手动启用)。
这种场景下,IPV4_ROUTE_METRIC 完全无效,硬套只会浪费调试时间。











