Linux网关故障自动切换运维指南
多网关场景下的运维挑战
在实际IDC或云环境中,单一网络出口往往存在单点故障风险。当默认网关不可用时,服务器将失去与外网的连接,即便备用链路正常也无法自动恢复。Linux系统默认只维护一份路由表,需通过额外机制实现网关故障的检测与切换。
基于路由表的备用网关配置
Linux内核支持多路由表(通过ip rule和ip route实现),可针对不同源地址或目标网段为独立路由表配置优先级。以下为常见配置思路:
- 创建两个路由表:
table link_a与table link_b,分别绑定不同网关。 - 通过
ip rule add from lookup link_a priority 100实现主路由优先。 - 在主路由表失效时,通过监控脚本动态降低优先级或删除规则,使流量切换至备用表。
该方案需要配合健康检查(如Ping网关或运营商对端IP)才能生效。
使用ip route + 脚本实现自动切换
对于仅需处理默认网关故障的场景,可编写简单Shell脚本,周期检测网关连通性,并在失败时替换默认路由。
核心思路
- 使用
ping -c 3 -W 1 $GATEWAY判断连通性。 - 若连续检测失败(建议重试2~3次),执行
ip route del default via $PRIMARY,再添加ip route add default via $BACKUP。 - 恢复检测与回切逻辑类似,注意设置回切确认次数,避免抖动。
注意事项
- 脚本需以root或具有CAP_NET_ADMIN权限的用户运行。
- 对网关的探测应同时测试下一跳IP及远端公共服务(如DNS),防止网关IP可达但上行链路中断。
- 若服务器使用DHCP获取地址,需配置忽略默认网关或使用
metric控制优先级。
基于keepalived的冗余网关方案
keepalived常被用于高可用场景,也可管理虚拟IP,并与后端状态联动。但在网关切换场景,更推荐的组合是keepalived + VRRP:
- 两台服务器形成主备,共享一个虚拟IP作为内网网关。
- 主机通过健康检查脚本检测上行线路(如探测运营商网关或公网IP)状态。
- 当主机检测失败,VRRP优先级降低,备用机自动接管虚拟IP,从而实现网关切换。
该方案适用于物理服务器或虚拟机,但需要在同一二层网络内。若跨VLAN则需配合动态路由协议(如OSPF)。
路由优先级与策略路由的补充说明
对于多运营商接入(双线双IP)场景,常规默认路由切换可能会导致源IP选择错误,此时需要利用策略路由将不同源IP分发到对应路由表。切换时只需禁用对应表或更新健康状态标记,而无需改动全局默认路由。
运维观测与日志记录
建议在切换脚本中加入日志输出(syslog或独立文件),记录执行时间、前后路由变化及探测结果。同时可使用Prometheus + alertmanager等监控工具,将网关连通性暴露为指标,在自动切换时及时发送告警,便于人工确认。
验证与灰度
生产环境实施前,应先在测试服务器验证脚本逻辑和切换时间。可以手动断开主网关链路的物理连接或使用iptables模拟丢包,确认备用网关能自动接管,并观察业务恢复情况。恢复过程中也应验证回切动作不会引起短暂双网关冲突。