linux主备网关自动切换核心是通过metric优先级+链路状态感知实现,确保仅一条默认路由生效:主连接设低metric(如100)并禁用自动路由,备用连接用ipv4.routes显式配置高metric(如300)默认路由,配合ipv4.ignore-auto-routes=yes隔离冲突,重启连接后拔插主线路可验证自动切换。

Linux中实现主备网关自动切换,核心不是同时启用两个默认网关,而是靠路由优先级(metric)+链路状态感知+配置隔离来达成“主用失效即切备用”的效果。关键在于让系统只认一条默认路由,但提前埋好备用路径,等主路径断开后自动升格。
确认当前网络连接与路由现状
动手前必须理清现状,避免多条 default via 并存导致流量混乱:
- 查活动连接名:nmcli connection show --active | grep ethernet,记下如 Wired connection 1 这类名称
- 看当前默认路由:ip route show default,确保只有一条;若出现两条,先用 ip route del default 清理
- 核对设备映射:nmcli device status,确认 CONNECTION 列(如 “Wired connection 1”)和 DEVICE 列(如 eth0)匹配无误
为主连接配置静态IP与低metric主网关
这是主通路,需显式声明网关并设低优先级(如100),确保它默认生效:
- 执行命令(替换连接名、IP、网关、DNS):nmcli connection modify "Wired connection 1" ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.dns "8.8.8.8,114.114.114.114" ipv4.method manual
- ipv4.method manual 必须设置,否则后续所有静态配置会被忽略
- 子网掩码统一用 CIDR 表示(如 /24),DNS 多个地址用英文逗号分隔、不加空格
为备用连接配置静态IP与高metric备用路由
备用路径不能用 ipv4.gateway,而要用 ipv4.routes 显式添加默认路由,并拉高 metric(如300),再禁用自动路由覆盖:
- 假设备用连接名为 Backup_WIFI,执行:nmcli connection modify "Backup_WIFI" ipv4.addresses 192.168.5.100/24 ipv4.routes "0.0.0.0/0 192.168.5.1" ipv4.route-metric 300 ipv4.dns "114.114.114.114" ipv4.method manual
- 注意:ipv4.routes "0.0.0.0/0 ..." 是声明默认路由的正确写法,ipv4.gateway 在备用连接中禁用
- metric 值(300)必须明显高于主连接(如100),数值越小越优先
- 补上:nmcli connection modify "Backup_WIFI" ipv4.ignore-auto-routes yes,防止 DHCP 或 NetworkManager 自动写入冲突路由
启用自动切换能力并验证
仅设 metric 不够,还需确保 NetworkManager 能识别链路状态变化并响应:
- 为主、备连接都关闭自动路由注入:nmcli connection modify "Wired connection 1" ipv4.ignore-auto-routes yes 和同命令作用于备用连接
- 重启两个连接使全部配置落地:nmcli connection down "Wired connection 1" && nmcli connection up "Wired connection 1",同样操作备用连接
- 验证切换效果:拔掉主网线,执行 ip route show default,应立即变为备用网关;恢复主线路后,几秒内应自动切回











