linux网络中断自动切换备用网卡的核心是统一出口、毫秒级检测、mac一致与路由干净,分主备绑定、双网卡策略路由、networkmanager切换三类场景,并需规避多网关、stp、arp缓存等常见坑点。

主备绑定(bonding mode=1)——推荐用于服务器高可用
这是最成熟、内核原生支持的自动切换方案,适用于有两块物理网卡直连同一交换机或不同上行链路的场景。
- 必须设置 miimon=100:每 100ms 检测一次物理链路(MII 寄存器),过低易误判,过高会导致切换延迟超 300ms,业务已超时
- 必须设 fail_over_mac=1:让备用网卡 MAC 主动同步为主网卡 MAC,防止交换机缓存旧端口导致发包丢弃
- 从网卡清空所有 IP 配置:eth1 配置文件中不能出现 IPADDR、GATEWAY、BOOTPROTO,只保留 MASTER=bond0 和 SLAVE=yes
- bond0 接管全部 IP 和默认路由:IP、网关、DNS 全部配在 bond0 上,系统路由表里只有一条默认路由指向 bond0
双网卡+策略路由——适合跨网络切换(如内网+4G 热点)
当两张网卡连接完全不同的网络(比如办公网 + 手机热点),无法做 bonding,需靠路由优先级和监控脚本联动。
- 主网卡走低 metric 默认路由:ip route add default via 192.168.1.1 dev eth0 metric 100
- 备用网卡配高 metric 备用路由:ip route add default via 10.42.0.1 dev wlan0 metric 500
- 用 ping + 脚本实时探测主网关:每 2 秒 ping 192.168.1.1,连续失败 3 次就执行 ip route replace default via 10.42.0.1 dev wlan0
- 加 -p 或写入 /etc/network/if-up.d/ 保证重启不失效:临时命令不持久,需配合 systemd service 或 NetworkManager dispatcher
NetworkManager 自动切换(适合桌面/笔记本)
利用 nmcli 的连接优先级和故障转移机制,无需写脚本,适合移动办公环境。
- 给两个连接设不同 priority:nmcli connection modify "Wired connection 1" ipv4.route-metric 100;nmcli connection modify "Hotspot" ipv4.route-metric 300
- 启用 autoconnect-slaves=all:确保主连接断开后,NM 自动激活次优连接
- 禁用主连接的 gateway on-link:避免路由冲突,尤其当两个网关不在同一子网时
- 检查 active connection 状态:nmcli -t -f NAME,DEVICE,STATE connection show --active 可确认当前生效连接
常见踩坑点——切不动、切完不通、切了又切回来
很多“自动切换”失败,其实卡在细节配置上:
- 两张网卡都配了 GATEWAY:systemd-networkd 会拉起两条默认路由,造成选路混乱甚至环路
- 没关 STP 或交换机端口聚合未匹配:主备切换时交换机学习新 MAC 延迟,导致丢包数秒
- ARP 缓存未刷新:客户端仍往旧 MAC 发包,需配合 gratuitous ARP(fail_over_mac=2)或手动 arping -U
- 监控脚本没加锁或重复触发:一个 ping 失败事件触发多次 route 替换,引发抖动











