监视到远程主机的Internet链接

我有一个运行Xivo的Debian Wheezy服务器(我们称之为A),这个服务器有2个接口: eth0eth1 。 没有默认网关,只有less数服务器是从静态到达的eth0有一个公共IP,并直接连接到远程服务器(我们称之为B),A的第二个接口, eth1在另一个互联网的本地networking上连接应该被用于不同的目的。

路由表A中,B通过接口eth0可达。 我想要的是build立一个故障转移路由,如果连接尝试在eth0失败,则尝试通过eth1进行连接。 我无法访问路由器,也不会涉及到外部A的dynamic路由。

到目前为止,我看到不同的东西,如ip ruleheartbeat HA和其他技术,但有了这个问题,我想要实现的是确定我想要做什么是可能的,如果可能的话,用什么样的技术。

编辑1

我决定改写我的问题,因为我觉得没有人知道。
如何监控从一台服务器到另一台服务器的链接,并在链接closures的情况下采取措施? 它也可以与arp分辨率有关,因为我虚拟连接到远程主机,我知道它的MAC地址。
我非常肯定互联网丛林中已经有了可能性,我不想为这个任务重新发力。

编辑2

由于脚本的解决scheme终于是我select的我会接受并奖励它,但是我添加了一个我使用脚本之前所尝试的所有编译

前段时间我有一个类似的问题,通过一个不稳定的HDSL连接从数据采集器(Ubuntu)到达远程服务器(有时不能工作数天!)。 我已经创build了一个简单的bash脚本在crontab中的数据logging器上运行。 这个脚本是这样工作的:

  • testingHDSL ping公共/始终可用的服务器的状态(如DNS或类似的东西)
  • 如果testing结果为KO,则脚本通过同一networking上的备份3G路由器将路由添加到远程服务器
  • 如果testing正常,则删除之前的路由,使数据采集器通过HDSL路由器到达远程服务器

这不是一个完善的解决scheme,但它在我的情况下工作!

以下文章解释了如何以简单的方式实现故障转移路由。

http://archive09.linux.com/feature/113988

这包括将两条路由添加到同一个目的地,一个通过eth0,另一个通过eth1,以及一个超时设置,当一个不可用时切换活动路由。

请记住,如果使用nat,则出站数据包的源IP将会更改。 使用无连接协议(如HTTP),这并不重要。 但是,对于面向连接的协议,路由可能会切换,但如果源IP发生更改,则连接将失败。

VoIP在你的评论中被提及,你应该期望看到通话失败,需要重新启动。

你的问题很有趣 谷歌search给了Mpath工具

Mpath-tools是一组针对linux 2.6+的程序,旨在促进多重和异构ISP连接的负载平衡和故障转移。

Mpathd是一个守护进程和mpath-tools的核心,它在后台运行,监视每个连接的状态。 它根据网关的状态和pipe理员设置的一组规则dynamic地更新路由表。

每个连接的状态由通过ICMP探测器发送到一个或多个地址来确定。

我从来没有尝试过。
这是一个保密的项目,它们没有很好的索引,“Linux静态路由故障转移”search没有给出任何东西,而“Linuxdynamic路由故障转移”给了第4页的网站(也许我的search技能不好); 即使“mpath-tools”只返回几个链接。 请注意,这并不意味着它不工作。

我最终得到了几个解决scheme,被保留的是一个运行着arping的“crontabed”脚本,这是脚本:

 #!/bin/sh #remote host to test on public interface REMOTE_TEST_IP="195.168.156.1" REMOTE_TEST_MAC="00:2D:FF:FF:FF:FF" #number of arp request send to test connectivity TEST_COUNT=4 #the rate acceptable of arp request failling, strictly above this rate the route will be change #NEVER put 100 or it will never set up failover ACCEPTABLE_FAILURE_RATE=20 #list of network that will be rerouted if test fails NETWORK_LIST="25.14.0.0/20 198.27.45.40/32 21.1.80.0/20" PUBLIC_DEVICE="eth0" PUBLIC_GATEWAY="192.168.1.250" PRIVATE_DEVICE="eth1" PRIVATE_GATEWAY="15.168.16.4" #try to ping the remote host ip and the remote host mac, extract the result line and get the failure rate FAILURE_RATE=$(arping -i $PUBLIC_DEVICE -c $TEST_COUNT -t $REMOTE_TEST_MAC $REMOTE_TEST_IP | grep % | sed -rs/.* ([0-9]{1,3})% .*/\1/) #if the faillure is superior to the acceptable failure rate, change the route to remote the remote host if [ $FAILURE_RATE -gt $ACCEPTABLE_FAILURE_RATE ] then for NETWORK in $NETWORK_LIST do logger "$0 - WARNING -The network route to $NETWORK_LIST are set to failover route." route del -net $NETWORK gw $PUBLIC_GATEWAY dev $PUBLIC_DEVICE route add -net $NETWORK gw $PRIVATE_GATEWAY dev $PRIVATE_DEVICE done else for NETWORK in $NETWORK_LIST do #back to default route route del -net $NETWORK gw $PRIVATE_GATEWAY dev $PRIVATE_DEVICE route add -net $NETWORK gw $PUBLIC_GATEWAY dev $PUBLIC_DEVICE done fi 

在其他答案中,我也发现了不同的解决scheme。

  • MPath工具的安装过程中提到了一个php脚本,听起来不太可靠
  • 链接状态监视器 ,仅维护基于redhat的系统

我真的不知道任何其他的解决scheme, 这里的约翰·奥尔德(John Auld) 这里提到的博客的date是从2005年开始的,当时Linux还在使用路由的度量标准,除非你使用dynamic路由协议。