linux中route add命令添加的路由是否生效取决于metric值,该值是内核对同目标同协议路由排序的唯一优先级标尺,数值越小越优先;必须显式指定metric以避免冲突,且仅0–9999为安全范围。

当你在Linux中执行route add命令时,如果发现两条默认路由同时存在却只有一条生效,或者新增的静态路由始终不被选中,问题大概率出在metric参数没设对——它不是跳数,而是内核做路由决策时唯一认的“优先级标尺”。
metric的本质:不是跳数,是本地路由排序标尺
Linux内核根本不解析ICMP跳数或OSPF cost,【metric是一个纯本地32位无符号整数,仅用于同目标、同协议来源的多条路由之间排序】。比如你同时有两条去0.0.0.0/0的路由,一条来自DHCP(proto dhcp),一条手动添加(proto static),内核先按protocol分组,再在static组里比metric谁更小——小者胜出,其余直接忽略。
metric为0是合法最小值,负数会报错;超过65535虽不报错,但部分老内核可能截断处理,建议控制在0–9999区间。
临时调整metric:用route命令增删改
方法一:添加新路由并指定metric
sudo route add -net 10.10.0.0 netmask 255.255.0.0 gw 192.168.1.254 metric 30
这一步操作起来很简单,直接把网段、掩码、网关和metric写全就行。注意-net必须配netmask,漏掉会导致目标识别错误。
方法二:替换已有路由的metric
先删后加最稳妥:sudo route del -net 10.10.0.0 netmask 255.255.0.0 gw 192.168.1.254 → sudo route add -net 10.10.0.0 netmask 255.255.0.0 gw 192.168.1.254 metric 15
【不能直接用route add覆盖同目标同网关的老路由——它会报“File exists”错误】,必须显式删除再重建。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
方法三:批量查看与验证
route -n | grep "^0.0.0.0" 查所有默认路由 → 对比末尾metric列 → 再用ip route get 8.8.8.8确认实际走哪条。别信route -n第一行,那是按插入顺序排的,不是生效顺序。
永久生效:写入网卡配置文件
第一步:打开对应网卡配置文件,如CentOS/RHEL系通常是/etc/sysconfig/network-scripts/ifcfg-eth0
第二步:在文件末尾追加一行:IPV4_ROUTE_METRIC=20
第三步:重启网络服务:systemctl restart network
注意:该参数仅对通过该网卡自动获取或配置的默认路由生效,手动用route或ip route添加的临时路由不受影响。若系统使用NetworkManager,需改用nmcli修改connection的ipv4.route-metric属性。
对比ip route方式设置metric
ip route add 10.10.0.0/16 via 192.168.1.254 metric 30
这条命令效果等价于route add,但语法更简洁,且支持IPv6(加-nexthop选项)。不过ip route不支持netmask参数,必须用CIDR格式写子网,比如255.255.0.0要写成/16。
想查当前真正生效的默认路由?只用这一条:ip route show default——它返回的才是内核此刻真正在用的那条,末尾metric值就是最终拍板的依据。










