我必须在具有三个网络接口的 Linux 机器上设置死网关检测。到目前为止,我找到的有关该主题的唯一指南都暗示要修补内核,但我们不太愿意这样做。还有其他方法吗?
谢谢。
编辑以澄清
这 3 个接口分别是:1 个以太网、1 个 wifi 和 1 个 3G 调制解调器。有线是主要连接,其他两个用于备份,3G 调制解调器是最后一个资源。
高可用性不是问题,因为我们可以承受短时间的断线。
该盒子同时是客户端(将数据发送到中央服务器)和服务器(中央服务器可以更改其配置),并通过类似 dyndns 的机制公开其当前 IP。
最后,我们将有数百个盒子向一个中央服务器报告,因此盒子的维护成本应该尽可能低。
答案1
如果网关响应ICMP请求,则可以使用ping:
ping -qc 4 $GATE1 > /dev/null
if [ "$?" -ne 0 ];
ping -qc 4 GATE2 > /dev/null
if [ "$?" -ne 0 ];
ping -qc 4 $GATE3 > /dev/null
if [ "$?" -ne 0 ];
ip route del default;ip route add default via $GATE3
else
echo "Three gateway down!"
fi
else
ip route del default;ip route add default via $GATE2
fi
如果网关不响应 ICMP 请求,请将“ping -qc 4”更改为“ping -qc 4 -I IP_OF_INTERFACE_TO_GATE_N 8.8.8.8”
答案2
答案3
iproute2 有一个“ip monitor”选项,可以监视路由状态,并在必要时更改它们。
从未尝试过,但它看起来并不复杂,而且似乎比脚本更有用。