自宅サーバを立てるためにieServerが提供しているDDNSを使っているのですが、停電とか電源抜けるとかで自宅のルータが再起動掛かるとグローバルIPが変わってしまい、外からアクセスできなくなることがあります。
出先でこうなると結構不便。
というわけで、自動でieServerにログインしてIPが登録しているものと違う場合は更新してくれるシェルスクリプト作ってみました。ログインしたら表示される登録しているIPと今のIPを比べて違う場合は登録のPOSTをしてくれるスクリプトです。
※ルータ配下のネットワークから実行する必要があります。
これをcronとかで自動実行させておけば勝手に復帰します。(ブログ記載時点では上手く動いております)
#! /bin/sh export LANG=ja_JP.eucJP USER_NAME="xxx" #ログインユーザー名を指定 PASSWORD="xxx" #ログインパスワードを指定 DOMAIN="xxx" #ドメインを指定(myhome.cxなど) COOKIE_FILE="cookie.txt" RESPONSE1=`curl -L -i -c $COOKIE_FILE -d username=$USER_NAME -d password=$PASSWORD -d domain=$DOMAIN -d login=login https://ieserver.net/cgi-bin/dip.cgi` IFS_ORG="$IFS" IFS=$'\n' RESPONSE1_ARR=(`echo "$RESPONSE1"`) IP1=`echo ${RESPONSE1_ARR[8]} | awk '{match($0,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/); print substr($0,RSTART, RLENGTH)}'` IP2=`echo ${RESPONSE1_ARR[15]} | awk '{match($0,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/); print substr($0,RSTART, RLENGTH)}'` if [ -z "$IP1" ]; then echo "IP1 is null." echo "Response is [$RESPONSE1]" exit 255; fi if [ -z "$IP2" ]; then echo "IP2 is null." echo "Response is [$RESPONSE1]" exit 255; fi if [ $IP1 != $IP2 ]; then echo "IP is different. Do update." RESPONSE2=`curl -L -i -c $COOKIE_FILE -d username=$USER_NAME -d password=$PASSWORD -d domain=$DOMAIN -d updatehost=updatehost https://ieserver.net/cgi-bin/dip.cgi` echo "Response is [$RESPONSE2]" fi IFS="$IFS_ORG"