状態:
- 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