需要Linux WAN故障转移简单解决scheme

我正在砸我的头,想出一个聪明而简单的广域网故障转移解决scheme。 这是用于两个不同外部IP的SOHO安装。 只需要出站连接故障转移。

  • 供应商1:电缆
  • 提供者2:无线

防火墙是Debian的GNU / Linux,所以解决scheme应该使用Linux并且是基于软件的。

目前的网络状况

我希望能够不仅检测,如果其中一个路由器(iproute2这很容易),但当他们的连接closures。 两台路由器都没有SNMP或其他基于标准的RMON。

有没有像我可以指定默认路由使用ping工具?

这样,我可以用一个小脚本来最优地监视这两个链接。 或者我应该去其他路线?

这是一个更复杂一点,因为我假设你的路由器不能以有意义的方式导出他们的路由。 如果您想深入研究,请记住当您在本地发送数据包时,IP地址仍然是远端主机,无论如何,以太网上的MAC地址都是基于主机路由表和arpcaching。

如果你敲低你的软件,并使用内核的数据包调用来形成你的消息,你可以用你select的MAC地址写这个IP数据包。 数据包然后将使用您select的路由器作为第一跳。 使用它来ping和监视响应,您将能够testing连接而不更改系统设置。

当然,您需要在程序中提升一些权限才能完成此操作。

否则,Evanbuild议的强制单地址路由表条目将允许你不用写任何调用内核的东西。 对于路由器没有告诉你的任何方法,你需要在DMZ中,否则你不能select你的数据包去哪里,除非你最终启用了源路由 。

主机路由到“金丝雀”的IP地址是你在找什么。

在每台路由器的远端select一个IP地址作为“Canary”,用PING(或者HTTP GET,或者你想使用的任何失败指标)进行监控。 在防火墙上为该“canary”IP地址添加一个带有/ 32networking掩码的静态路由,将其发送到相应的路由器。

如果我通过“192.168.178.254”路由器监视“10.0.0.1”,我会添加route add 10.0.0.1 gw 192.168.178.254 。 在添加该路由之后,所有到10.0.0.1的stream量将通过网关192.168.178.254路由。 如果192.168.178.254远端的互联网连接失败,10.0.0.1的stream量将无法到达目的地(不会返回PING等)。

使用像这样的主机路由应该使您能够编写一个简单的脚本来交换一个Internet连接失败时的默认网关。

如果你想使用一个高可用性的群集(如yahoo.com或google.com),它使用循环DNS和多个IP(可能来自两个范围),那么这个主机路由并不是很有帮助。

在Linux主机上,你平常的'ping'工具有两个有用的参数:

ping -I <interface> example.com Ping将从指定的接口发送数据包。 如果您的主机为每个连接都有单独的界面,请使用它。

ping -m <interface> example.com Ping将发送“标记的”传出数据包; 内核可以使用这些标记来select传出路由。 如果您通过单个界面访问两个上行链路通道,则会很有用 这需要基于标记的IP路由规则,在任何情况下您都可能在多WAN主机上使用(通过同一链接发送请求来自Internet的请求,而不是默认路由)。 这里是非常简短的描述如何做这样的路由。