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