默认路由走错网卡是因为metric值决定优先级,数值越小越优先;需用ip route show检查多条default路由及对应metric,确保外网口metric小于内网口,再通过nmcli、ifcfg或netplan永久调整。

默认路由走错网卡,不是网络没通,而是流量被 metric 值“悄悄”导到了内网口——这是双网卡服务器最常踩的坑。
怎么看当前默认路由和 metric 值
先确认问题是否存在,别急着改配置:
- 运行
ip route show,重点看所有default via行 - 如果出现两条及以上
default路由,就存在竞争;metric 值小的那个才是实际生效的 - 常见错误现象:内网能 ping 通、外网
curl https://baidu.com超时、ssh连不上公网地址 - 注意:
route -n输出的 “Metric” 列是旧版字段,新系统以ip route的metric N为准
用 nmcli 永久修改 NetworkManager 管理的连接
适用于 RHEL/CentOS/Fedora 和带桌面的 Ubuntu(NetworkManager 默认启用):
- 查连接名:
nmcli connection show,找到对应网卡的 NAME,比如Wired connection 1或eth0 - 设 metric:
nmcli connection modify "Wired connection 1" ipv4.route-metric 200 - 重启连接:
nmcli connection down "Wired connection 1" && nmcli connection up "Wired connection 1" - 验证:
ip route show | grep default,确认目标网关的 metric 已更新 - ⚠️ 注意:不能只改一个连接——必须让外网口 metric 小于内网口,否则改了也白改
用 ifcfg 文件直接写死 metric(RHEL/CentOS 7+ 传统方式)
适用于纯 server 环境、NetworkManager 被禁用、或需绕过 NM 干预的场景:
- 编辑网卡配置文件:
/etc/sysconfig/network-scripts/ifcfg-eth0 - 添加或修改行:
IPV4_ROUTE_METRIC=100(数值越小越优先) - 对另一块网卡(如 eth1)设为
IPV4_ROUTE_METRIC=200 - 重启网络服务:
systemctl restart network(不是NetworkManager) - ⚠️ 风险点:若同时启用了 NetworkManager,它可能覆盖 ifcfg 中的 metric 设置——此时优先用
nmcli方式
Netplan 配置(Ubuntu 18.04+ 及衍生发行版)
YAML 格式容易缩进出错,metric 必须显式声明,DHCP 默认路由会被抑制:
- 编辑
/etc/netplan/*.yaml,在对应网卡下加dhcp4-overrides: {use-routes: false} - 手动定义默认路由:
routes: [{to: default, via: 10.206.216.254, metric: 100}] - 有线/无线共存时,务必给有线设更低 metric(例如 100),无线设更高(例如 600)
- 应用配置:
sudo netplan apply,失败时会提示具体哪行 YAML 错误 - ⚠️ 关键细节:不加
use-routes: false,DHCP 仍会自动加一条无 metric 的 default 路由,导致两条路由并存、优先级失控
metric 不是“设了就完事”,它依赖整个路由表的相对关系;同一台机器上多个默认路由共存时,哪怕只差 1,内核也严格按最小值选路——这个看似简单的整数,恰恰是多网卡环境里最不容忽略的开关。











