主备自动切换的核心是系统仅启用metric最小的默认路由,主失效后退选次优路由;需两网关共存、metric明确区分、禁用dhcp覆盖,并通过链路断开触发切换。

靠跃点数(Metric)实现主备自动切换,核心不是“双网关同时生效”,而是让系统只用一条默认路由,当它失效时,再启用另一条——前提是两条默认路由都存在、跃点数不同,且系统能感知主网关离线。
主备路由生效的前提条件
Windows 和 Linux 都不允许多个 0.0.0.0/0 默认路由“并行转发”。真正起作用的永远只有 Metric 最小的那一条。所谓“自动切换”,本质是:主路由不可达时,系统放弃使用它,退而选择次优的那条默认路由。
- 两块网卡必须各自获得一个有效的默认网关(比如有线网关 192.168.1.1,Wi-Fi 网关 192.168.5.1)
- 两条默认路由必须共存于路由表中,且 Metric 明确区分(如主=10,备=100)
- 主网关所在链路需实际断开(物理断连、DHCP 失效、网关设备宕机),仅禁用网卡或关闭 Wi-Fi 不一定触发切换——系统仍可能尝试发包并超时重试
Windows 下设置主备跃点数
推荐用 PowerShell 按接口索引精准设置,比图形界面更稳定,尤其适合多网卡或脚本部署:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 先查网卡信息:Get-NetIPInterface -AddressFamily IPv4 | ft InterfaceAlias, IfIndex, InterfaceMetric
- 设主网卡(如以太网,IfIndex=12)跃点为 10:Set-NetIPInterface -InterfaceIndex 12 -AddressFamily IPv4 -InterfaceMetric 10
- 设备用网卡(如 WLAN,IfIndex=5)跃点为 100:Set-NetIPInterface -InterfaceIndex 5 -AddressFamily IPv4 -InterfaceMetric 100
- 验证:route print -4 | findstr "0.0.0.0" —— 应只看到一条 Metric=10 的默认路由;另一条 Metric=100 的默认路由也会存在,但不被优先选用
Linux 下用 nmcli 实现主备自动切换
nmcli 配置的关键在于显式声明默认路由 + 控制 metric + 阻止 DHCP 覆盖:
- 为主连接(如 eth0)添加主默认路由:nmcli connection modify "Wired connection 1" ipv4.routes "0.0.0.0/0 192.168.1.1" ipv4.route-metric 100
- 为备用连接(如 wlan0)添加备用默认路由:nmcli connection modify "MY_WIFI" ipv4.routes "0.0.0.0/0 192.168.5.1" ipv4.route-metric 200
- 禁用 DHCP 自动添加默认路由(否则会覆盖手动配置):nmcli connection modify "Wired connection 1" ipv4.ignore-auto-routes yes,同样对 Wi-Fi 连接也执行
- 重启连接生效:nmcli connection down "Wired connection 1" && nmcli connection up "Wired connection 1"
为什么有时切换不及时?常见原因
主备切换不是毫秒级响应,依赖系统探测机制和 TCP/IP 栈行为:
- ARP 缓存未刷新:主网关断开后,本地 ARP 表仍缓存其 MAC 地址,导致发包失败但不立即换路;可手动清空:arp -d *(Windows)或 ip neigh flush all(Linux)
- 应用层重试策略:浏览器、远程桌面等会坚持重试原路径几秒甚至十几秒,才触发底层路由重选
- 没有健康探测:系统不会主动 ping 网关来判断存活;只有发包失败、超时、ICMP 目标不可达等反馈积累后,才会降级使用备路由
- 路由表残留旧项:若曾手动添加过静态路由,可能干扰自动生成的默认路由;建议清理:route delete 0.0.0.0(Windows)或 ip route del default via ...(Linux)










