有线网卡优先需设更低metric值:用ip route show检查默认路由,通过nmcli、ifcfg或netplan将有线metric设为50、无线设为150,再以ip route get验证流量路径,并补静态路由定向内网段。

让有线网卡稳稳扛起外网流量,无线只做备用——这在Linux多网卡环境下不是玄学,而是靠metric值和几条关键命令就能搞定的事。
先看路由表,确认问题在哪
别急着改配置,先运行这三行命令摸清现状:
- ip route show default:只看当前生效的那条默认路由(如果输出为空,说明没默认网关;如果输出多行,说明已冲突)
-
ip route show:扫一遍全部路由,重点找所有含
default via的行,记下它们的metric值和对应网卡(如dev eth0或dev wlan0) - ip route get 8.8.8.8:模拟访问外网,直接告诉你系统此刻实际走哪张卡、哪个网关
典型异常表现:内网能通(ping 192.168.10.1 成功),但 curl https://baidu.com 超时或极慢——大概率是外网流量被错导到了内网网关。
调 metric:给有线“减负”,给无线“加码”
metric 是决定默认路由优先级的核心数字,越小越优先。目标很明确:有线网卡的默认路由 metric 必须比无线的小至少 20~50,留出安全余量。
- 若用 NetworkManager(桌面版 Ubuntu/RHEL/Fedora 常见):
nmcli connection modify "Wired connection 1" ipv4.route-metric 50nmcli connection modify "MyWiFi" ipv4.route-metric 150
改完必须执行:nmcli connection reload && nmcli connection down "Wired connection 1" && nmcli connection up "Wired connection 1" - 若用传统 ifcfg(RHEL/CentOS Server):
编辑/etc/sysconfig/network-scripts/ifcfg-eth0,加入IPV4_ROUTE_METRIC=50
编辑/etc/sysconfig/network-scripts/ifcfg-wlan0,加入IPV4_ROUTE_METRIC=150
然后重启网络服务:systemctl restart network - 若用 Netplan(Ubuntu 18.04+):
在网卡配置块中加:dhcp4-overrides: {use-routes: false}
手动写死默认路由:routes: [{to: default, via: 192.168.1.1, metric: 50}]
运行sudo netplan apply生效
验证是否真生效
改完别信配置文件,要亲眼看到路由表变干净、流量走对路:
- 再跑一次
ip route show default,确保只有一条,且 metric 是你设的 50(有线),不是 150 或其他值 - 执行
ip route get 8.8.8.8,输出里dev后面必须是你期望的网卡名(如eth0) - 实测外网连通性:
curl -I https://baidu.com --connect-timeout 5,应快速返回 HTTP 头;再试内网地址(如curl http://10.10.0.100/api/health)确保不被影响
如果仍走错,回头检查是否两个连接都开启了 DHCP 默认路由(ipv4.ignore-auto-routes yes 得设上),否则 DHCP 自动加的路由会覆盖你手动设的 metric。
进阶:需要指定某段内网走特定网卡?加静态路由
仅调 metric 只能管“默认流量”。如果你还要求所有访问 10.10.0.0/16 的请求强制走 eth1,就得补一条静态路由:
- 临时加:
ip route add 10.10.0.0/16 via 10.10.1.1 dev eth1 - 永久加(NetworkManager):
nmcli connection modify "Wired connection 2" +ipv4.routes "10.10.0.0/16 10.10.1.1",再 reload & up - 关键点:这条路由没有 metric,它会自动继承该连接的
ipv4.route-metric值,所以仍受前面统一调控
不复杂但容易忽略:metric 控制的是“选哪条默认路由”,而静态路由控制的是“去哪段地址走哪张卡”——两者配合,才能真正理清多网卡的流量脉络。











