Linux如何配置系统的默认网关优先级

作者:袖梨 2026-06-18
Linux默认网关优先级由metric值决定,数值越小越优先;系统仅使用一条default路由,metric相同时行为不可控;确认生效路由应使用ip route show default或ip route get 8.8.8.8,而非仅看ip route | grep default的全部条目。

Linux 默认网关优先级由 metric 值决定,数值越小越优先;系统只用一条 default 路由,metric 相同会导致行为不可控——这不是“谁先配谁生效”,而是内核按数值硬选。

怎么确认当前生效的默认网关和 metric 值

别只看 ip route 输出的第一行,那可能只是其中一条;真正发包走哪条,得看内核实际选中的那条:

  • ip route show default —— 只显示当前被选中的那条 default 路由(最可靠)
  • ip route get 8.8.8.8 —— 模拟真实流量,输出里带 devvia,就是实际出口
  • ip route | grep default —— 查所有含 default 的条目,重点看每行末尾的 metric

常见陷阱:proto dhcp 的路由常由 NetworkManager 自动添加,metric 可能被覆盖;手动加的 ip route add default 若没指定 metric,默认是 0,容易意外抢主路由。

临时改 metric:调试或应急切换用

立即生效、重启失效,适合验证网关连通性或做故障接管测试:

  • 删掉当前默认路由:ip route del default(不带 via 也能删)
  • 加新路由并指定 metricip route add default via 192.168.5.1 dev wlan0 metric 50
  • 只改已有路由的 metricip route change default via 192.168.1.1 dev eth0 metric 20

metric 必须是正整数或 0,负值无效;ip route replace 本质是先删后加,不如显式 del+add 清晰可控。

永久配置 metric:按发行版选方式

临时命令一重启就丢,要持久化必须写进配置文件,但路径和语法因发行版而异:

  • Ubuntu/Debian(Netplan):编辑 /etc/netplan/*.yaml,在对应网口下用 routes 块,例如:
    routes:  - to: default    via: 192.168.1.1    metric: 100
    注意缩进必须是空格,不能用 tab;改完运行 sudo netplan apply
  • RHEL/CentOS(ifcfg-):编辑 /etc/sysconfig/network-scripts/ifcfg-eth0,加 GATEWAY=192.168.1.1METRIC=100;但若 NetworkManager 接管了该接口,得设 NM_CONTROLLED=no 才生效
  • NetworkManager 管理的桌面环境:用 nmcli,例如 nmcli connection modify "Wired connection 1" ipv4.route-metric 100,然后 nmcli connection down && up 生效

关键点:多个网卡都启 DHCP 时,务必禁用非主网卡的自动默认路由(如 Netplan 中设 use-routes: false),否则会和你手配的 metric 冲突。

为什么加了多条 default 路由却只有一条生效

内核策略很明确:同一时刻只用一条 default 路由,选法就是找 metric 最小的那个。如果两条都是 metric 0,后添加的那条可能被忽略,也可能触发未定义行为(取决于内核版本和编译选项)。

所以别指望“多加几条 default 就能自动 failover”——真要做冗余,得配一主(metric 100)一备(metric 200),再配合脚本监听链路状态,探测失败时用 ip route change 切换 metric 值,或者用 ip rule + 自定义路由表做更精细控制。

相关文章

精彩推荐