出现故障时更改互联网链接

出现故障时更改互联网链接

情况:

  • 2 个互联网链路 - A 和 B - 均连接到 Linux 路由器。
  • 2 个路由表,第一个默认通过 A,第二个默认通过 B。
  • iptables 和 ip 规则为特定流量选择“最佳”表。

一切正常,但是 - 它是静态配置。

如果其中一个互联网链接出现故障,该怎么办?在这种情况下,一切都应该通过第二个正确的链接进行。并且 - 当发生故障的链路恢复时 - 一切都应该回到流量通过两个链路的情况。

是否有任何“标准”工具可以完成此类操作?写一些东西(脚本)做什么这样的事情不是问题 - 但是 - 也许有更多的标准工具?

(失败链接的定义 - 重要 IP 之一无法从特定链接访问,但可以从第二个链接访问)。

答案1

我的多 WAN Draytek 路由器可以使用 ping 或 arp 来监控以太网和 VPN 链路上的保持活动状态。 (显然对于 xDSL 有更好的选择。)可以配置 Ssh 和 OpenVPN 来生成内部 keepalive。我不知道还有其他标准方法。

像这样的东西(未经测试):

ROUTE1=up LINK1=up COUNT1=3
ROUTE2=up LINK2=up COUNT2=3
SHOUT=once

while sleep 5
do
    if ping {destination_via1}
    then
        LINK1_UP=up COUNT1=3
    else
        [[ 0 -lt $COUNT1 ]] && COUNT1=$((COUNT1 - 1))
        [[ 0 -ge $COUNT1 ]] && LINK1=down
    fi

    if ping {destination_via2}
    then
        LINK2_UP=up COUNT2=3
    else
        [[ 0 -lt $COUNT2 ]] && COUNT2=$((COUNT2 - 1))
        [[ 0 -ge $COUNT2 ]] && LINK2=down
    fi


    if [[ down = $LINK1 -a up = $ROUTE1 ]]
    then
        # add code here to remove route via LINK1 #
        ROUTE1=down
    elif [[ up = $LINK1 -a down = $ROUTE1 ]]
        # add code here to add route via LINK1 #
        ROUTE1=up
        SHOUT=once
    fi

    if [[ down = $LINK2 -a up = $ROUTE2 ]]
    then
        # add code here to remove route via LINK2 #
        ROUTE2=down
    elif [[ up = $LINK2 -a down = $ROUTE2 ]]
        # add code here to add route via LINK2 #
        ROUTE2=up
        SHOUT=once
    fi

    if [[ once = $SHOUT -a down = $ROUTE1 -a down = $ROUTE2 ]]
    then
        # add code here to shout that both routes are down #
        SHOUT=no
    fi
done

相关内容