PPPOE の再接続スクリプトを作成する。
pppoe_auto_reconnect.sh
#!/bin/sh
 
# ログファイルパス
LOG_FILE_PATH=/jffs/var/log/pppoe_auto_reconnect.log
# WAN IP アドレス
WAN_IP_ADDR=`nvram get wan_ipaddr`
 
# WAN IP アドレスにpingが通らない場合
if ! ping -c 1 $WAN_IP_ADDR >/dev/null; then
    echo `date +"%Y/%m/%d %T"`" WANが切断されました.("$WAN_IP_ADDR") 再接続中..." >> $LOG_FILE_PATH
    # 関連するデーモンを終了させる
    killall redial; killall pppd; killall inadyn; sleep 10
    /usr/sbin/pppd file /tmp/ppp/options.pppoe >/dev/null; sleep 25
 
    # WAN IP アドレスを取得
    WAN_IP_ADDR=`nvram get wan_ipaddr`
 
    # 再接続が成功した場合
    if ping -c 1 $WAN_IP_ADDR >/dev/null; then
        echo `date +"%Y/%m/%d %T"`" WAN再接続成功! ("$WAN_IP_ADDR")" >> $LOG_FILE_PATH
 
        # DDNS の IP アドレスを取得(IPが複数行取得される場合は最終行を取得)
        DDNS_IP_ADDR=`grep -o -e "[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+" /tmp/ddns/ddns.log | sed -n '$p'`
 
        # DDNS の IP が更新されていない場合
        if [ $DDNS_IP_ADDR != $WAN_IP_ADDR ]; then
            # DDNS デーモンを終了させる
            killall inadyn; sleep 10
 
            # DDNS を更新
            echo `date +"%Y/%m/%d %T"`" DDNS 更新中..."
            /usr/sbin/inadyn --input_file /tmp/ddns/inadyn.conf
            echo `date +"%Y/%m/%d %T"`" DDNS 更新完了!" >> $LOG_FILE_PATH
        fi
    fi
fi