背景
目前作为代理网关是 Surge Mac 的一个重要的使用场景。作为家庭网关,对网络可靠性的要求也是非常高的,不稳定的网络对家人使用体验的影响非常大。大多数主机只允许配置一个默认网关,当 Surge Mac 故障时,需要手工干预网络配置或修复 Surge Mac 故障网络才能恢复,无法实现自动故障恢复。
昨晚 Surge Mac 从 5.7.0 版本自动更新到 5.7.1 时出现卡 Terminating 的问题,导致 Surge Mac 不工作。此时局域网大多设备都断网,直到早上起床发现问题并强制 Kill 掉 Surge Mac 后才恢复。最终 NAS 上配置的深夜运行且依赖于网络的 Job 都没有正常执行。
这只是一次故障,之前曾多次因 Surge Mac 异常退出,配置错误等问题断网,导致无法远程连回家恢复,从而影响家人网络使用体验而产生了不少怨言。这些问题我都通过使用 pm2 进程守护、备用 snell server、VPN 和 todesk 等方式保证 Surge Mac 正常运行,保证 Surge Mac 异常时能远程连回内网进行故障恢复。
VRRP
VRRP 是一种容错协议,它保证当主机的下一跳路由器出现故障时,由另一台路由器来代替出现故障的路由器进行工作,从而保持网络通信的连续性和可靠性。通常有 Keepalived 这类工具可以非常简单地让服务支持 VRRP,而用户只需要访问一个 VIP(Virtual IP)既可。
如果 Surge Mac 支持 VRRP,那么我在 NAS 上再配置个 Surge Mac 的黑苹果虚拟机,当运行 Surge Mac 的 Mac MINI 出现任何问题,黑苹果 Surge Mac 就可以立刻抢占 VIP 而保证网络正常使用。
替代方案
之前我使用过 monitor ping + DNAT 的方式实现类似的效果。当 macmini 挂了,监控程序 ping 超时就自动在主路由上创建 DNAT,把发送给 macmini IP 的流量转发给备用网关(黑苹果虚拟机/OpenWRT 软路由)。这种方式使用下来有挺多问题,包括监控程序自身可用性保证,监控程序到路由器、macmini 和备用网关的网络稳定性保证,网络结构调整,需要主路由转发多一跳、带宽降低等。
总结
所以,如果 Surge Mac 支持类似于 VRRP 的协议,可以非常简化高可用的实现。既可以增加高级订阅数量(起码得 2 终端以上的授权),又可以解决用户对高级使用场景的需求。