我有一台带有两个USB调制解调器的Linux机器,每个调制解调器都有自己的SIM卡和公共IP地址。
其中一个调制解调器可能会在某个时候失去连接,我希望连接尽可能具有弹性。 据我所知,维持现有连接可能是不可能的,但至less一旦接口1失去连通性,我希望接口2立即用于新的连接。
在Linux中使用两个接口实现最小停机时间的最佳方法是什么?
____________ +------------+ / \ | | | | +-------------+ Provider 1 +------- \ | | | / \ +------+--------+ +------------+ | | | if1 | / \ | | | | + Linux machine | | Internet | | | | | | if2 | \ / +------+--------+ +------------+ | | | | | \ / +-------------+ Provider 2 +------- / | | | | +------------+ \____________/
我会build议有两个接口,并调整你的路由表是这样一种方式:
你可以使用上面的方法
ip route add default dev xyz metric 100
根据您的Linux发行版,您将能够通过编辑后续或if-up脚本使其成为永久的。
另一种方法,特别是如果你没有按照使用量收费的话,就是对两个接口进行负载平衡。 我从来没有设置类似的东西… 但是使用lnlb看起来非常简单 。 不要我的错误,这是为LAN /集群负载平衡,但这有一个基于iptables的实现。
更新:基于评论:
路由表如下所示:
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.207.246.1 0.0.0.0 UG 0 0 0 br0 10.0.3.0 0.0.0.0 255.255.255.0 U 0 0 0 lxcbr0 10.207.246.0 0.0.0.0 255.255.255.0 U 0 0 0 br0 169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 br0
默认路由是目的地为0.0.0.0路由。 你可以看到我的是:
0.0.0.0 10.207.246.1 0.0.0.0 UG 0 0 0 br0
metric指示优先级, 最低的数字是最优先的。 例如,有两个接口,我可以有以下,在这种情况下,我更喜欢发送stream量到我的br0 (bridge)接口:
0.0.0.0 10.207.246.1 0.0.0.0 UG 0 0 0 br0 0.0.0.0 10.205.243.1 0.0.0.0 UG 100 0 0 eth1
如果br0由于任何原因而closures,第二个默认路由将是唯一的路由,因此eth1将被使用。 一旦br0返回,首选路由将再次改变并指向该接口。
现在,据我了解,第二种方法使用两个不同的路由表! 使用链接博客中的示例,可以看到一个名为bsnl表和一个名为tata表。 每张桌子都映射到互联网供应商,每个供应商都有:
直接连接的局域网:
ip route add 192.168.1.0/24 dev eth1 src 192.168.1.10 table bsnl
默认路由/网关:
ip route add default via 192.168.1.1 table bsnl
而我假设一个规则将传入的stream量映射到路由表(如果我错了,纠正我 – 读这个 ):
ip rule add from 192.168.1.10 table bsnl
上面的configuration定义了WAN / ISP方面的事情(每个互联网连接一个)最后,全局范围默认路由将决定来自LAN的stream量的下nexthop ,并且必须路由到WAN。 (我假设的全局范围适用于所有不属于ip rule的接口):
ip route add default scope global nexthop via 192.168.1.1 dev eth1 weight 1 \ nexthop via 192.168.0.1 dev eth2 weight 4
最重要的区别是最后一种技术使用两个接口/连接同时执行给定优先级的负载平衡。 在上面的例子中, eth1优先考虑1/5的时间(20%), eth2优先考虑的四分之四(80%)。 相反,在第一个设置中,使用两个默认路由,任何时候只使用一个连接。
免责声明:我从来没有做过第二次设置,所以有些事情可能是错误的或不完全详细解释…
希望能帮助到你