“热备”这个词是我听来的

某日我正愉快地网上冲浪,有人说到all in boom的问题,我就回了句路由器应该保持独立稳定,不然网断了老婆要骂,没想到有人马上怼我说断了就断了,没有热备就别指望单点的稳定性,口气还十分嚣张轻蔑,可是他没想到的是,他的话恰恰撞在了我的枪口上,我TM有热备,而且还有两个,惊不惊喜,意不意外?立马怼回去!

下面就记录下我的“热备”

我家两条宽带线路,一条电信千兆作为日常使用,一条联通200M带公网IP,主要用上行线路远程访问家里,另外还有台华为4G路由器配一张每月100G的SIM卡。三条线路接在了我的软路由三个WAN口上,通过MWAN3负载均衡实现三条线路主从热备份自动切换,当然所有的设备还都接在了UPS上,也不怕短时间的停电。三条线路的主备关系为:电信>联通>4G路由器

MWAN3的设置没什么好记录的,看文档就行,这里主要记录下4G路由器的自动开关机。

平时绝大部分时间两条光纤宽带都在线,4G路由器并没有必要一直开着机,只需要在两条宽带离线时再启动就行,宽带恢复后又关闭。为此我能想到就是给他装一个智能插座,可以通过命令控制开关,而且这个命令必须能在没有外网的局域网环境中发送,最好还是最简单朴素的HTTP API方式。假设插座的IP是192.168.1.2,通过简单的curl http://192.168.1.2/switch/on 就能打开电源。

一番搜索下来,我竟然找不到一款这样的成品插座。市面上的智能插座,无一例外都要求使用他们的App或云服务控制,显然不符合我的要求。后来看到了tasmota这个开源的ESP IoT设备固件,固件的功能完全符合我的要求,查看固件支持的设备,最终花50块包邮买了Sonoff S26这个插座用于刷机

刷机的步骤参考官方的教程。刷机后连上WiFi上线后,在路由器上给S26指定一个静态分配IP,让他独享这个IP保持不变,如192.168.1.2。浏览器登陆192.168.1.2可以控制开关和设置MQTT等功能,当然这些我都用不上,我只需要他的HTTP API。只需要简单的curl命令就行,简单而美好,好久没看到这么容易操作的API了

开: curl "http://192.168.1.2/cm?cmnd=power%20on"
关: curl "http://192.168.1.2/cm?cmnd=power%20off"

然后在MWAN3的notification设置页添加判断脚本,这是我的

if [ "$ACTION" = "disconnected" -a "$DEVICE" = "pppoe-ct" ]; then
	curl "http://192.168.1.2/cm?cmnd=power%20on"
fi

if [ "$ACTION" = "connected" -a "$DEVICE" = "pppoe-ct" ]; then
	curl "http://192.168.1.2/cm?cmnd=power%20off"
fi

逻辑说明:检测到电信主线路离线就自动给4G路由器通电,检测到电信线路恢复后就给4G路由器断电。跳过了对联通线路的检测,电信线路离线后直接让4G路由器提前做好接管全部网络的准备,真正做到热备秒切换。