2つのWRTルーターがあり、それぞれは独自のワイヤレスゲートウェイ(携帯電話とルートスキップホットスポット)に接続されています。ルータ LAN は WDS を介してブリッジされ、同じサブネット上にあるため、クライアントはネットワーク設定に応じて両方のゲートウェイのいずれかに接続できます。ルーター2のゲートウェイがインターネットにアクセスできない場合(電話機のホットスポットをオフにしたり、電話が自宅にない場合)、ルーター2のゲートウェイがルーター1を指すように変更されるようにスクリプトを実装したいと思います。ルーター 2 のゲートウェイが正常に戻ったら、もう一度変更する必要があります。
ここに文書化されているようにフェールオーバー機能を備えたデュアルゲートウェイ、以下のスクリプトが見つかりましたが、起動スクリプトに実装した後にデフォルトのゲートウェイ接続を切断すると、ゲートウェイは変更されません。
複数のゲートウェイとさまざまなメトリックを使用するさまざまな静的パスについて読み取ったり読み込んだり、それらのいずれかに接続できない場合は、デフォルトで別のパスが使用されます。そうであれば、リピータブリッジモードのWRTルータで実装できます。以下のスクリプトタイプが必要ですか?誰でも正しい方向を教えてもらえますか?ありがとうございます。
INTERVAL=6
PACKETS=2
USINGWAN=0
GW=br0
WAN1GW=192.168.3.4
WAN2GW=192.168.3.1
DNS1=202.88.149.25
CH=1
while sleep $INTERVAL
do
TARGET=`ip route | awk '/default via/ {print $3}'`
if [ "$WAN1GW" = "$TARGET" ]; then
USINGWAN=1;
else if [ "$WAN2GW" = "$TARGET" ]; then
USINGWAN=2;
fi;
fi
RET=`ping -c $PACKETS $DNS1 2>/dev/null | awk '/packets received/ {print $4}'`
if [ "$RET" -lt "$CH" ]; then
if [ "$USINGWAN" = "1" ]; then
ip route delete default via $WAN1GW dev $GW
ip route add default via $WAN2GW dev $GW
sleep 2
USINGWAN=2
echo "Changed active WAN port to 2!"
fi
fi
if [ "$USINGWAN" = "2" ]; then
WAN1STAT=`ping -c $PACKETS $DNS1 2>/dev/null | awk '/packets received/ {print $4}'`
if [ "$WAN1STAT" = "$PACKETS" ]; then
ip route delete default via $WAN2GW dev $GW
ip route add default via $WAN1GW dev $GW
sleep 2
USINGWAN=1
echo "Changed active WAN port to 1!"
fi
fi
done;
Below are the creator/users comments:
Used the code above with ping to only one ip, added a static route in gateway 192.168.3.1 for ping ip to be always routed through 192.168.3.4 as a result of which in case of ping failure gateway changed to secondary gateway and once ping was back live it switched to primary... Also used -lt variable to make sure that gateway changed on at least 2 ping failures and not 1.