ダイナミックDNS(DDNS)Value-Domain 自動登録スクリプト

| コメント(0)

*Dynamic Do!.jp を説明したページと同じ事が書いてあるとお思いのあなたに…。
下のスクリプトの部分は全く違いますので、御容赦を…(^^;

ダイナミックDNSとは?

 最近はダイナミックDNSというのも一般化してきたと思うので、皆さん御存知とは思うが簡単に説明する。あなたが http://www.******.com/ などとブラウザのアドレスバーに入力してリターンキーを押すと該当のドメインのホームページが出力される。当たり前だと思うかもしれないが実は裏では "www.******.com" という文字列が数値に変換されている。何で数値に変換する必要があるのか?コンピュータのIPアドレスというのは実は数値で表現されているからだ。ためしに

http://3540913925/

と打ち込んで見て欲しい。Yahoo!Japanのホームページが表示されたでしょ?(2004/5/13現在)
表示されない?その場合はアドレスが変わっているのかも知れませんね。DOSプロンプトから

nslookup www.yahoo.co.jp


と打ち込むとIPアドレス(AAA.BBB.CCC.DDD)が得られるので (AAA * 256 * 256 * 256) + (BBB * 256 * 256) + (CCC * 256) + DDD を計算してみてください。

 さて、このように本当は数値だけでホームページを見ることができるのです。だからドメイン名なんて必要ないといえばないんです。(^^;
でも覚えられないでしょ?携帯電話だってたった11桁の番号(しかも最初3桁はほぼ固定)なのに覚えられるのならアドレス帖機能なんて必要ないですよね。人間にとってわかりやすい名称を使うというのがドメイン名ということです。コンピュータには数値しか理解できず、それでは困るので数値に変換しているわけです。この変換の仕組みがDNS(ドメインネームシステム)です。

 ではダイナミックDNS(DDNS)とは何なのか?企業や研究所や政府機関などはそれぞれのIPアドレスは固定になっています。だから www.******.co.jp <--> ***.***.***.*** という相互変換した値は常に同じわけです。一般の人がサーバーを立ち上げたいとした場合、固定IPアドレス契約をすれば簡単です。しかし、固定IPアドレス契約は費用も余計にかかるため、個人サーバやちょっとした実験などに使いたい場合は勿体ないです。そういった場合にDDNSを利用すればよいわけです。一般的にプロバイダと個人で契約した場合(個人向けダイヤルアップやADSL、FTTHなど)に割り振られるグローバルIPアドレスは動的なものです。ある場合は AAA.BBB.CCC.DDD だけど 次に接続した場合は EEE.FFF.GGG.HHH になります。プロバイダが保持しているグローバルIPアドレスには限りがあるため、接続ごとに空いたIPアドレスを貸し出しているわけです。

 たとえばあなたが yourdomain.com というドメイン名を持っているとしましょう。しかし固定のIPアドレスが無い場合にはDNSサーバにIPアドレスを登録することはできません。しかしダイナミックDNSという仕組みを使えばこれが可能になるのです。つまり「IPアドレスが変わった」->「それをDNSサーバに登録する」というのをその都度行えば良いのです。普通のDNSと一緒じゃん?と思ったあなたは鋭い!普通のDNS登録だって同じことをすればいいだけじゃん。いや、確かにその通りなんですが何が違うのか?ダイナミックDNSの場合はそのIPアドレスの情報の有効期限が1分とか10分とか極端に短く設定されているんです。普通のDNSの場合有効期限が日の単位で設定されています。つまりドメイン名をIPアドレスに変換しようとした場合に有効期限が長いため、古い情報が返されてしまう場合があるんです。その場合には非固定アドレスだと当然アクセスできなくなります。固定IPの場合は結局同じIPアドレスですからそれでも問題は発生しないわけです。

 そんなわけで、IPアドレスが変わった場合に自動的にDNS登録を行うプログラムがあればいちいち人間が登録しなくてもすみます。WWWサーバやMailサーバにしている場合は夜中でもアクセスがあるわけなので人手に頼った作業は現実的ではないでしょう。サーバがWindowsの場合は専用のプログラムが用意されているようですがOSがLinuxだとなかなか存在しないようです。( Dice というのがLinuxに対応しているようです)このプログラムが環境的にうまく動く方はそちらを使ってもらってもいいと思いますが、何か問題のある方や動作が見えないのは嫌だという方(笑)は以下のスクリプトを使ってもらってもいいです…(^^;

Value-Domain を使ってみる
Value-Domain ですが、実はダイナミックDNS専用の業者さんではありません。どちらかというとドメイン名登録代行の業者という感じです。ホームページには「ドメイン総合サービス」って書いてあります。

で、ここを使うとどんなことができるか?「独自ドメイン取得&ダイナミックDNS」
おお、それは凄い!!でも登録料とか維持費とか高いんじゃないの?と思うでしょう?普通。でもね、驚くほど安いんですよ。たとえばあなたが *********.com という好きなドメインを取得したとして、年間1000円以下なんですよ。私の場合、ここ見つけてすぐに独自ドメインで別サイトの 運営をダイナミックDNSで始めましたが1年ぐらいになりますが安定しています。 私の場合はそういう運用の仕方ですが、他にもレンタルサーバとかいろいろあるみたいです。 何か、宣伝モードになってますね(^^;

更新スクリプトは以下の方針で作成します。
・出来るだけ value-domain のサーバに負荷をかけないようにする。
・自分のIPアドレスはルーターにアクセスして取得する。(別スクリプト)
・IPアドレスが変更になった時だけ更新を行うようにする。
・取得したIPアドレスは一時ファイルに保存する。
・動作ログを /var/log/messages に保存する。
・cron で定期起動する。
・value-domain へのアクセスには テキストブラウザ lynx を使用する。
・更新サーバは1~5まであるため、時刻によって適当にアクセスを散らせる。
Value-Domain 用DNS更新スクリプト


#!/bin/bash

NUM=`date | grep 'JST' | awk '{print $4}' | cut -b 4-4`

# 更新サーバは複数あるため時刻によって 1~5 まで振り分けるようにしてあるが
# そもそも dyn.value-domain.com/cgi-bin/dyn.fcg にアクセスすれば自動的に
# 負荷分散してアクセスするようになっている。そのため NUM の値を入れる必要はない(^^;
# まあ、どっちか好きな方にしてください。
# 自動負荷分散するには NUM="" としてください。
#
if [ $NUM = '0' ]; then
NUM=""
fi

SUBDM="dyn$NUM"
TO="-connect_timeout=180"


# 自グローバルIPアドレスを取得する。
# この場合は自分のルーター(NEC WR7600H) から…
REMOTEIP=`/usr/local/etc/DDNS/warpstar.pl`
#echo "remoteip = $REMOTEIP"

# 自グローバルIPアドレスが取得できない場合
# しかし、よそ様のスクリプトを勝手に使わないように…。
#
#REMOTEIP=`/usr/local/bin/lynx -dump 'http://ddo.jp/remote_addr.php' | grep '.' | awk '{print $1}' | cut -b 13-`
#

# CGI Script
CGI=value-domain.com/cgi-bin/dyn.fcg

# domain / password
DOMAIN="**********.com" <-- 自分のドメイン名
PASS="*************" <-- パスワード
MESSAGE="You_are_part_of_MilkyWay_galaxy_too." <-- あなたのお気に入りの言葉

IPFILE="/tmp/${DOMAIN}.ipaddress"

if [ ! -f "$IPFILE" ]; then
echo "$MESSAGE" > "$IPFILE"
fi

if [ $REMOTEIP == "ERR" ]; then
echo "$MESSAGE" > "$IPFILE"
KEKKA="could not retrieve global IP address"
/usr/bin/logger -p daemon.info -t $DOMAIN $KEKKA
exit 0
fi

if [ x"$REMOTEIP" != x`cat "$IPFILE"` ]; then

HOST="@"
URL="http://${SUBDM}.${CGI}?d=${DOMAIN}&p=${PASS}&h=${HOST}&i=${REMOTEIP}"
RESULT1=`/usr/local/bin/lynx ${TO} -dump $URL | head -10 | grep 'status' | awk '{print $1}'`
/usr/bin/logger -p daemon.info -t ${HOST}.${DOMAIN} ipaddress=$REMOTEIP server=$SUBDM $RESULT1

HOST="www"
URL="http://${SUBDM}.${CGI}?d=${DOMAIN}&p=${PASS}&h=${HOST}&i=${REMOTEIP}"
RESULT2=`/usr/local/bin/lynx ${TO} -dump $URL | head -10 | grep 'status' | awk '{print $1}'`
/usr/bin/logger -p daemon.info -t ${HOST}.${DOMAIN} ipaddress=$REMOTEIP server=$SUBDM $RESULT2

if [ $RESULT1 == "status=0" ]; then
if [ $RESULT2 == "status=0" ]; then
echo "$REMOTEIP" > "$IPFILE"
fi
fi

fi
exit 0

インストール&動作設定
 インストールって言っても、どこか適当なところ(ここの例では /usr/local/etc/DDNS)に置いて cron で起動してください。 まあ数日に1回ぐらいは強制的に登録するようにしておけばいいでしょう。そのためには、前回IPアドレス記録ファイルを定期的に削除してやれば良いです。

root ユーザになってファイル権限を700にします。その上で crontab -e コマンドで cron に登録します。登録し終わったら :wq で終了します。(そこまで言わんでいい?)

以下の cron 例は10分毎にIPアドレスをチェックして変更があれば登録する。また毎日23:59にファイルを強制削除することによって1日1回の強制登録を行う例です。ファイル名は(yourdomain.com.sh です。)/var/log/messages に動作ログが残っているので確認してください。


# for yourdomain.com Value-Domain update
*/10 * * * * /usr/local/etc/DDNS/yourdomain.com.sh
59 23 * * * rm -f /tmp/yourdomain.com.ipaddress

コメントする

ウェブページ

  • about
Powered by Movable Type 5.2.10

このブログ記事について

このページは、よしが2004年5月13日 12:14に書いたブログ記事です。

ひとつ前のブログ記事は「NEC WARPSTAR 7600H グローバルIPアドレス取得スクリプト」です。

次のブログ記事は「ダイナミックDNS(DDNS)ddo.jp(Dynamic Do!.jp) 自動登録スクリプト」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。