ダイナミックDNS(DDNS)ddo.jp(Dynamic Do!.jp) 自動登録スクリプト

| コメント(0)

ダイナミック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に対応しているようです)このプログラムが環境的にうまく動く方はそちらを使ってもらってもいいと思いますが、何か問題のある方や動作が見えないのは嫌だという方(笑)は以下のスクリプトを使ってもらってもいいです…(^^;

Dynamic Do!.jp を使ってみる
Dynamic Do!.jp というダイナミックDNS提供業者のDNS更新スクリプトを書いてみます。Dynamic Do!は2年以上使用していますが安定度抜群です。数少ない障害時の情報も公開されており信頼できます。個人的にはお勧めです。

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

Dynamic Do!.jp 用DNS更新スクリプト


#!/bin/bash

#
# DDNS更新リクエストを送った場合の応答の例
#
# [1]Dynamic DO!.jp
# SUCCESS: *******.ddo.jp <= [ ***.***.***.*** ]
# IPアドレス更新完了.
# ※IPアドレスに変更がありませんため、パスワードはチェックしておりません
# 。
# 2004/05/12 15:02:48
#
#References
#
# 1. http://ddo.jp/
#

TO="-connect_timeout=180"
MYDOMAIN="*******.ddo.jp"  <-- あなたのドメイン名を指定します。
PASSWORD="*************"   <-- パスワードを指定します。

# メッセージにはスペースコード(空白)は入れないこと
MESSAGE="You_are_part_of_MilkyWay_galaxy_too." <-- ダミーファイルに書き込むメッセージ(何でもよい)

# 前回取得のIPアドレス
IPFILE="/tmp/${MYDOMAIN}.ipaddress"

# ルーターのグローバルIPアドレスを取得
# 取得失敗したら "ERR" を返すようにしてください。
REMOTEIP=`/usr/local/etc/DDNS/warpstar.pl` <-- グローバルIPアドレスを取得します。

# 自グローバルIPアドレスが取得できない場合はコメントを外す。
# ただ、これを呼び出すと「サーバに負荷をかけないようにする」というポリシーに反しますので
# できるだけグローバルIPアドレスを自分でどうにか取得してください。
#
#REMOTEIP=`/usr/local/bin/lynx -dump 'http://ddo.jp/remote_addr.php' | grep '.' | awk '{print $1}' | cut -b 13-`
#

# 前回IPアドレス記録ファイルが存在しなかった場合
# ダミー文字列を入れたファイルを作成する。
# don't insert space code
# echo で出力する中には空白を含めないこと!
#
if [ ! -f "$IPFILE" ]; then
echo "$MESSAGE" > "$IPFILE"
fi

# グローバルIPアドレス取得失敗時は即終了する
# warpstar.pl ではグローバルIP取得失敗時に "ERR" を返す
if [ $REMOTEIP == "ERR" ]; then
echo "$MESSAGE" > "$IPFILE"
KEKKA="could not retrieve global IP address"
/usr/bin/logger -p daemon.info -t $MYDOMAIN $KEKKA
exit 0
fi

# 前回グローバルIPアドレスと今回アドレスが異なる場合
# DDNSの更新を試行する
if [ x"$REMOTEIP" != x`cat "$IPFILE"` ]; then

RESULT=`/usr/local/bin/lynx -dump \
"http://ddo.jp/dnsupdate.php?dn=${MYDOMAIN}&pw=${PASSWORD}" \
| head -10 | grep '<=' | awk {'print$1'}`

if [ $RESULT == "SUCCESS:" ]; then
KEKKA="IP address update SUCCESS.(^o^)v"
echo "$REMOTEIP" > "$IPFILE"
else
KEKKA="IP address update FAIL.(; ;)"
fi

# 結果をログに出力する。
/usr/bin/logger -p daemon.info -t $MYDOMAIN [$REMOTEIP] $KEKKA

fi

インストール&動作設定
 インストールって言っても、どこか適当なところ(ここの例では /usr/local/etc/DDNS)に置いて cron で起動してください。注意すべきは Dynamic Do!.jp無料登録のドメインは1ヶ月間更新がないと使われてないと判断されるのでしょう「アカウント削除」になってしまいます。このスクリプトが完璧に動いている&あなたのADSLなりFTTHが安定度抜群で1ヶ月間IPアドレスが変わらなかった場合、「DNS登録作業」が行われないので削除されてしまいます。そのため、まあ数日に1回ぐらいは強制的に登録するようにしておけばいいでしょう。そのためには、前回IPアドレス記録ファイルを定期的に削除してやれば良いです。

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

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


# for yourdomain.ddo.jp DynamicDNS update
*/10 * * * * /usr/local/etc/DDNS/yourdomain.ddo.jp.sh
59 23 * * * rm -f /tmp/yourdomain.ddo.jp.ipaddress

コメントする

ウェブページ

  • about
Powered by Movable Type 5.2.10

このブログ記事について

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

ひとつ前のブログ記事は「ダイナミックDNS(DDNS)Value-Domain 自動登録スクリプト」です。

次のブログ記事は「RED HAT7.1 カーネルアップグレード&EXT3ファイルシステムの利用」です。

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