1

UbuntuサーバーをNATルーターとして使用しています。WAN インターフェイスはeth1で、LAN インターフェイスはeth0です。フェールオーバーのために LAN 側で ucarp 仮想 IP を使用します。WAN リンクまたはデフォルト ゲートウェイがダウンした場合に LAN インターフェイスをダウンさせるスクリプトを作成していますeth0(LAN インターフェイスがダウンした場合、ucarp は NAT ゲートウェイ IP をネットワーク上の別のルーターに解放できます)。また、WAN IP が ping されると、LAN インターフェイスが起動し、WAN IP が ping されるまで起動したままになります。

バッシュスクリプト:

#!/bin/bash
t1=$(ifconfig | grep -o eth0)
t2="eth0"
#RMT_IP = "8.8.8.8"
SLEEP_TIME="10"

ping -c 2 8.8.8.8 > /dev/null
   PING_1=$?

if [ $PING_1 = 1 ]; then
    if [ "$t1" != "$t2" ]; then
        ifconfig eth0 up
        echo "Iface brought up"
    else
        echo "Iface is already up"
    fi
else
    if [ "$t1" = "$t2" ]; then
        ifconfig eth0 down
        echo "Iface brought down"
    else
        echo "iface already down"
    fi
fi

sleep $SLEEP_TIME

スクリプトが機能しません。私が望むのは、WAN IPにpingを実行できる場合、LANインターフェースは稼働eth0したままにする必要があるということです。WAN IP に ping を実行できない場合は、インターフェイスを停止する必要があります。スクリプトは 10 秒ごとにループで実行する必要があります。WAN ip が長期間 ping できない場合は、eth0停止したままにしておく必要があります。しばらくして WAN ip が ping された場合は、eth0起動する必要があります。また、起動ジョブとして起動時にスクリプトを実行する予定です。

編集1: 私の最終的なスクリプト:

#!/bin/bash

timeout=5         # delay between checks
pingip='8.8.8.8'   # what to ping
iface="eth0"
LOG_FILE="/var/log/syslog"
isdown=0            # indicate whether the interface is up or down
                   # start assuming interface is up

while true; do
    LOG_TIME=`date +%b' '%d' '%T`
    if ping -q -c 2 "$pingip" >> /dev/null ; then      # ping is good - bring iface up
        if [ "$isdown" -ne 0 ] ; then
            ifup $iface && isdown=0
            printf "$LOG_TIME $0: Interface brought up: %s\n" "$iface" | tee -a $LOG_FILE
        fi
    else                                 # ping is bad - bring iface down
        beep -f 4000
        if [ "$isdown" -ne 1 ] ;  then
            ifdown $iface && isdown=1
            printf "$LOG_TIME $0: Interface brought down: %s\n" "$iface" | tee -a $LOG_FILE
        fi
    fi
    sleep "$timeout"
done
4

1 に答える 1

3


ping が成功$ifaceした場合はこれを試してください
。ping が失敗した場合は起動します。次に$iface停止します。

#!/bin/bash

timeout=3               # delay between checks
iface="eth0"            # which interface to bring up/down
pingip='8.8.8.8'        # what to ping
isdown=-1               # indicate whether the interface is up(0) or down(1)
                        # start in unknown state

while true; do
    if ping -q -c 2 "$pingip"; then       # if ping is succeeds bring iface up
        if [ "$isdown" -ne 0 ]; then      # if not already up
            ifconfig "$iface" up && isdown=0
            printf ":: iface brought up: %s\n" "$iface"
        fi
    elif [ "$isdown" -ne 1 ]; then        # if ping failed, bring iface down, if not already down
        ifconfig "$iface" down && isdown=1
        printf ":: iface brought down: %s\n" "$iface"
    fi
    sleep "$timeout"
done
于 2012-04-20T10:43:55.000 に答える