障害発生時のインターネットリンクの変更

障害発生時のインターネットリンクの変更

状態:

  • 2つのインターネットリンク(AとB)はどちらもLinuxルーターに接続されています。
  • 2つのルーティングテーブル、最初のテーブルはデフォルトでAを通過し、2番目のテーブルはデフォルトでBを通過します。
  • iptablesおよびipルールは、特定のトラフィックに最適なテーブルを選択します。

すべてがうまく機能しますが、これは静的構成です。

インターネットリンクの1つがダウンした場合はどうなりますか?この場合、すべてが2番目の正しいリンクを通過する必要があります。そして、失敗したリンクが戻ってくると、トラフィックが両方のリンクを通過するのと同じ状態にすべてが戻ってくるはずです。

これを行うための「標準」ツールはありますか?そのようなことをするために何か(スクリプト)を書くことは問題ではありません。しかし、 – おそらくもっと標準的なツールがありますか?

(失敗したリンクの定義 - 重要なIPの1つは特定のリンクでは接続できませんが、2番目のリンクでは接続できます。)

答え1

私のマルチWAN Draytekルーターはpingまたはarpを使用してイーサネットおよびVPNリンクの接続維持を監視できます。 (明らかにxDSLのためのより良いオプションがあります。)内部接続維持を生成するようにSshとOpenVPNを設定できます。私は他の標準的な方法を知りません。

次のもの(テストされていません):

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

関連情報