Linux 上的死网关检测

Linux 上的死网关检测

我必须在具有三个网络接口的 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

为什么不运行 rip 或其他路由协议?确切地它们的设计目的是什么。斑驴在 Linux(以及其他系统)上运行,并且很好地实现了许多这些协议。

在我自己的系统中我使用乌卡普管理虚拟 IP,然后通过 DHCP 将虚拟地址作为网关通告给我的客户端。然后,真正的网关使用 rip 来决定如何处理它们收到的数据包。

答案3

iproute2 有一个“ip monitor”选项,可以监视路由状态,并在必要时更改它们。

从未尝试过,但它看起来并不复杂,而且似乎比脚本更有用。

相关内容