2013年4月30日火曜日

VALUE DOMAINのDDNS用Shell Scriptを作った

今まで固定IPな環境だったのが、非固定IPな環境に移ってしまったので、VALUE DOMAINのDDNSを使用して自宅サーバーのホスト名を管理すべくShell Scriptを作成してみた。

こんなこともあろうと、DDNSが使用出来るVALUE DOMAINで契約しておいて良かったよ。

#!/bin/sh

HOST='foo'                         # ホスト名('*'も可)
DOMAIN='example.jp'                # ドメイン
PASSWORD='*******'                 # DDNSのパスワード
DNS_SERVER='ns1.value-domain.com'  # VALUE DOMAINのネームサーバー

wget=`/usr/bin/which wget`
host=`/usr/bin/which host`
grep=`/usr/bin/which grep`
mail=`/usr/bin/which mail`

# 現在のIPアドレスを取得
CURRENT_IP=`$wget -q http://dyn.value-domain.com/cgi-bin/dyn.fcg?ip -O -`

# DNSに登録されているIPをCURRENT_IPでgrepする。
if [ "${HOST}" = "*" ]; then
    CHANGE=$($host $DOMAIN $DNS_SERVER | $grep -F $CURRENT_IP)
else
    CHANGE=$($host $HOST.$DOMAIN $DNS_SERVER | $grep -F $CURRENT_IP)
fi
# IPが変更になった場合はCHANGEは空が入ってくるので、登録処理に入る
if [ -z "${CHANGE}" ]; then
    # DNSへ登録
    RESULT=$($wget -q "http://dyn.value-domain.com/cgi-bin/dyn.fcg?d=$DOMAIN&p=$PASSWORD&h=$HOST" -O - )
    STATUS=$(echo $RESULT | $grep -F 'status=0')
    if [ -z "${STATUS}" ]; then
	    # 登録失敗の場合は、root@localhostへメールを送信
        echo "Dynamic DNS Updating was NG.\nresult:$RESULT" | $mail -s "DDNS updating failed" root@localhost
    fi
fi

自宅サーバーはルータにもなっているので、boot時にプロバイダーとの接続が確立されてIPアドレスの取得後に一回実行させれば良いと思われるので、rc.localに下記のように記述を追加。

if[ -f /usr/local/sbin/ddns.sh ]; then
        /usr/local/sbin/ddns.sh
fi

0 コメント:

コメントを投稿