网络管理器:两个默认网关之间的故障转移

Vol*_*ych 7 linux routing networkmanager

网络管理器是否能够检查默认网关是否可以将包路由到 Internet?

我有两个接口,都提供了到互联网的路由。

当我从其中任何一个拔下电缆时,默认网关正在更新并且我的互联网连接正常。但是,如果当前首选网关在没有中断物理链路的情况下发生故障,系统不会故障转移到第二个网关。

我试图手动为失败的 GW 设置更高的指标,它奏效了,但这是我想避免的手动步骤。

使用网络管理器可以解决这个问题吗?

我的设置:Ubuntu 16.04,NM 1.2.2

UPD

NM 的 irc 频道上的社区成员回答说,NM 不检查网关是否实际工作,也不执行任何 GW 切换。

VRRP/ucarp/heartbeat/keepalived也不勾选。他们只检查网络可用性,并在虚拟接口后面切换上游 GW。这对我的情况没有帮助。

Iproute 的 nexthop 有点工作,但具有巨大的延迟。路由被内核缓存,甚至在ip route flush cache 系统故障转移到第二个 GW 大约需要 10 分钟之后。

ip route replace default scope global \
  nexthop via 11.22.33.1 dev eth0 weight 1 \
  nexthop via 55.66.77.1 dev eth1 weight 1
Run Code Online (Sandbox Code Playgroud)

我目前的解决方案:一个 shell 脚本,它检查当前的默认 gw 是否提供互联网访问;如果不是 - 它会增加当前 GW 的度量,并且系统故障转移到具有较低度量的第二个。

我仍然希望找到一个更优雅的解决方案。

小智 0

我认为有几种可能性。最好/现代的方法是使用 iproute2“表”。我还没有完全理解它,但它在这里描述: http: //mlvpn.readthedocs.io/en/latest/linux_example.html不幸的是,该示例的作用比您所要求的更多,这使问题变得困惑。但我相信这样的事情可能会起作用:

ip route show table main

ip route add default via 10.70.1.1 dev eth0 table 100

ip route add default via 10.70.70.1 dev eth0 table 101

(可选)编辑/etc/iproute2/rt_tables并添加两行:

100 myfavgw

101 myothergw

然后你可以通过名称来引用它们:

ip route add default via 10.70.70.1 dev eth0 table myothergw

可能需要一些额外的摆弄,但以上似乎是一个有希望的开始。我无法测试它,因为我的两个网关之一刚刚出现故障:-(

第二种方法似乎依赖于相当古老的技术。2005 年的这篇文章建议,如果您有两个 NIC,则可以为每个 NIC 指定不同的默认网关: https: //www.linux.com/news/using-linux-failover-router。所以 - 大声思考 - 如果你没有两个网卡,有一种方法(我忘记了如何)创建第二个虚拟接口,并让它使用相同的以太网卡(这样做就像加载一个网卡一样简单)内核模块,而且效果很好)。如果仍然可以为每个接口指定不同的默认网关,那么第二种方法将是该问题的一种老式解决方案。

第三种解决方案是丑陋的。正如您所指出的,人们可以每分钟运行一个 shell 脚本来进行检查。

这样的脚本可以在这里找到!