ここでは、YAMAHA RTA52i もしくは Planex BRL-04 を用いたインターネット接続のもとにウェッブサーバを設置した際に、ダイナミック DNS(Domain Name System)を使ってURL(ここでは、http://globe.dyndns.org)を、プロバイダから割り当てられたIPアドレスと関連させる 為の設定を以下にまとめました。
URLと割り当てられたIPアドレスの関連づけは 、 http://www.dyndns.org/ を利用しています。
ウェッブサーバに、perlモジュールとdddclient-2.3.7をインストールし、dddclientを働かすためのスクリプトを作成しま した。
ドメインネームの取得
接続毎に変わるIPアドレスと http://globe.dyndns.org を関連付けさせるために、「dyndns.org」へ登録をした [http://members.dyndns.org/nic/dyndns/globe.dyndns.org ]へIPアドレスを更新するための設定を以下の様に行いました。
やり取りは、次の様な具合いです。
dyndns.org ======== RTA52i -------- ウェッブサーバ
<--------
1) ウェッブサーバ:「割り当てられたIPアドレスを教えて」
-------->
2) RTA52i :「61.132.243.2だよ」
3) ウェッブサーバ : 「前回とは違うから更新しよう」
<----------------------------
4) ウェッブサーバ : 「globe.dyndns.orgのIPナンバーが61.132.243.2に変わりました」
5) dyndns.org:「globe.dyndns.org は、61.132.243.2
に変換するんだな。ネームサーバの問い合わせに答えられるようにメモしておこう」
1) Moduleを入手する
http://ring.astem.or.jp/archives/lang/perl/CPAN/modules/01modules.index.html
から以下のPerl Moduleを入手しました。
・Digest-MD5-2.12
・HTML-Tagset-3.03
・Net-Telnet-3.02
・libnet-1.0703
・HTML-Parser-3.13
・MIME-Base64-2.11
・URI-1.09
・libwww-perl-5.48
2) Moduleをインストールする
上記の各ファイルを順序通りに tar -zxvf を使い展開します。READMEに目を通してから、コンパイル済みの
[.pm]ファイルが用意されていれば、それをPerlのライブラリを置くディレクトリ(私の場合は/usr/lib/perl5/5.00503)にコ
ピーしました。[.pm]ファイルが用意されていなものは、次のコマンドでコンパイルしインストールしました。
# perl Makefile.PL
# make
# make test
# make install
3) 更新用のプログラムを入手します
http://members.home.net/pburry/ddclient/ から
dddclient-2.3.7.tar.gzを持ってきます。
http://support.dyndns.org/dyndns/clients/ に各々OSの案内があります。
ddclient本体とその振る舞いを決るためにsample-ddclient.conf を適切なファイル名にして、保存します。
"globe.dyndns.org"の場合は /root/bin に ddclient本体を、設定ファイルを/etcに置いています。
# cp ddclient /root/bin/
# cp sample-ddclient.conf
/etc/ddclient.conf
/etc/ddclient.conf の hostnames, logins, passwordsを追記します。
ファイルの属性を[-rwx ------]に変更しました。(chmod 700 )
4) 更新用のスクリプトを入手、改変する
http://piyopiyo.homeip.net/diary/2K1221.html
を参考に以下のスクリプトを作り、/etc/cron.hourlyにdnsupdate.cronの名前で保存します。
このファイルの属性を[-rwx ------]に変更します。(chmod 700 )
このスクリプトの内容は、次の通りです。
a) globe.dyndns.orgへpingを一回打つ。
回線切断してる場合は、pingを行うことで接続しグローバルIPを取得する。
b) RTA52iにログインする。
c) RTA52iからインターネットに接続するポートの各情報を教えてもらう。
d) ポートの情報からIP番号のみを取り出す。
以下が、dnsupdate.cronの内容です。
ウェッブサーバに、perlモジュールとdddclientをインストールし、
dddclientを働かすためのスクリプトを作成しました。
1) Moduleを入手する
http://ring.astem.or.jp/archives/lang/perl/CPAN/modules/01modules.index.html
から以下のPerl Moduleを入手しました。
・Digest-MD5-2.12
・HTML-Tagset-3.03
・Net-Telnet-3.02
・libnet-1.0703
・HTML-Parser-3.13
・MIME-Base64-2.11
・URI-1.09
・libwww-perl-5.48
2) Moduleをインストールする
上記の各ファイルを順序通りに tar -zxvf を使い展開します。
READMEに目を通してから、コンパイル済みの .pmファイルが用意されていれば、
それをPerlのライブラリを置くディレクトリ(私の場合は、/usr/lib/perl5/5.00503)に
コピーしました。
.pmファイルが用意されていなものは、次のコマンドでコンパイルしインストールしました。
perl Makefile.PL3) 更新用のプログラムを入手します
make
make test
make install
ここでは、ddclient 2.3.7 の設定をまとめています。
(http://members.home.net/pburry/ddclient/ から dddclient-2.3.7.tar.gz
を入手しました。)
2.3.7以降のddclientは、使用していません。
(ddclient-3.1.0以降では、/etc/ddclient.confの形態が変わりました。)
http://support.dyndns.org/dyndns/clients/ に各々OSの案内があります。
ddclient本体とその振る舞いを決るために
sample-ddclient.conf を適切なファイル名にして、保存します。
"globe.dyndns.org"の場合は /root/bin に ddclient本体を、設定ファイルを
/etc に置いています。
cp ddclient /root/bin//etc/ddclient.conf の hostnames, logins, passwordsを追記します。
cp sample-ddclient.conf /etc/ddclient.conf
4) 更新用のスクリプトを入手、改変する
http://piyopiyo.homeip.net/diary/2K1221.html
を参考に以下のスクリプトを作り、/etc/cron.hourlyに、dnsupdate.cronの名前で保存します。
このファイルの属性を[-rwx ------]に変更します。(chmod 700 )
このスクリプトの内容は、次の通りです。
a) globe.dyndns.orgへpingを一回打つ。回線切断してる場合は、pingを行うことで接続しグローバルIPを取得する。
b) RTA52iにログインする。
c) RTA52iからインターネットに接続するポートの各情報を教えてもらう。
d) ポートの情報からIP番号のみを取り出す。
以下が dnsupdate.cronの内容です。
注意:[\]は「バックスラッシュ」です。
------------------- ここから --------------------
#!/usr/bin/perl
open( LOG, ">> /var/log/ipaddress.log" );
$date = `/bin/date '+%D %X'`;chop($date);
my($lines,$t,$pass,$adminpass,$rthost);
print "Establishing Internet Connection.... \n";
system("ping -c 1 globe.dyndns.org"); #pingを一回実行して接続をする
print "\n";
use Net::Telnet();
$rthost = '***.***.***.***';#RTA52に設定したIPアドレス
$pass = '********';#RTA52iのユーザーパスワード
$adminpass = '********';#RTA52iの管理ユーザーパスワード
$t=new Net::Telnet(-host => "$rthost"); #RTA52iへ接続
$t->waitfor('/Password:.*$/');
#RTA52iからの"Password:"表示を待つ
$t->print("$pass");
#"Password:"に対してユーザーのパスワードを入力
$t->waitfor('/>.*$/');
#">"表示を待つ
$t->print("administrator");
#">"表示に対して管理ユーザーへの移行コマンドを入力
$t->waitfor('/Password:.*$/');
#"Password:"表示を待つ
$t->print("$adminpass");
#"Password:"に対して管理ユーザーのパスワードを入力
$t->waitfor('/#.*$/');
#" #"表示を待つ
$t->print("pp select
1");
#コマンドの設定対象をPP1にする。複数ある場合は対象の番号を入力
$t->waitfor('/#.*$/');
#"#"表示を待つ
$t->print("show status
pp");
#状態の表示を行う
@mylines = $t->waitfor('/#.*$/');
# 表示内容からAddress Local: を取り出す
foreach(@mylines) {
if(/Address[\s+]Local:[\s+]/) {
$myIP=$';
}
}
foreach($myIP){
if(/, Remote:/){
$myIPaddress=$`;
print $myIPaddress,"\n";
}
}
$t->close; # telnetセッションの終了
# グローバルIPアドレスを ddclient に渡す
$command=sprintf("/root/bin/ddclient -ip %s -retry", $myIPaddress);
system($command);
exit;
-------------- ここまでがスクリプトの内容です。 --------------
運用の実際
4) 動作の確認
上記のスクリプトを/etc/cron.hourly/dnsupdate.cronとして保存します。これを実行するとエラーが表示されました。
そこで、/root/bin/ddclientのダイアルアップルータのIPアドレスを追記しました。
デフォルトでは、IPアドレスが、192.168.1.1 になっていました。
下記の***.***.***.*** は貴方のダイアルアップルーターのIPアドレスを記入します。
" ${program} -ip ***.***.***.*** -retry",
" -- set the ip address of all dyndns hosts listed in the
/etc/ddclient.conf
to ***.***.***.***",
" ${program} -ip ***.***.***.*** -host somehost.dyndns.org",
" ${program} -ip ***.***.***.*** -host statichost.dyndns.org
-static",
" -- set the address of statichost.dyndns.org to ***.***.***.***
in the static DNS database",
以上で設定ができましたので、確認をします。
/etc/cron.hourly/dnsupdate.cron を実行します。
[root@neptune cron.hourly]# ./dnsupdate.cron
Establishing Internet Connection....
PING globe.dyndns.org (61.116.63.19) ***.***.***.*** : 56(84)
bytes of data.
***.***.***.***: 目的のホストへ届きません
--- globe.dyndns.org ping ---
送信パケット数1, 受信パケット数 0, +1 エラー, パケット損失
100%
211.131.246.135
SUCCESS: updating globe.dyndns.org: Modifications Complete
上記のように表示されました。その内容は、
ダイアルアップルーターが接続していなかったので、globe.dyndns.orgへping、
「パケット損失 100%」は、接続していないための結果、
次の「SUCCESS: updating globe.dyndns.org: Modifications Complete」では、
得られたIPナンバー(211.131.246.135)を登録していることを表しています。
5) 毎日4:02に更新のプログラムを動かす。
Vine GNU/Linuxでは、毎時、毎日一回、一週に一度、一月に一度に
動かす為の時間設定が /etc/crontab に書かれています。
01 * * * * root run-parts
/etc/cron.hourly
-> 毎時1分
02 4 * * * root run-parts
/etc/cron.daily
-> 毎日4:02
22 4 * * 0 root run-parts
/etc/cron.weekly
-> 一週に一度 4:22
42 4 1 * * root run-parts
/etc/cron.monthly
-> 一月に一度 4:42
それぞれに、/etc/以下にある次のディレクトリにあるファイルが対応します。
cron.d/
cron.daily/
cron.hourly/
cron.monthly/
cron.weekly/
今回作った dnsupdate.cron を、/etc/cron.daily/ 内に置きました。
BRL-04とADSLを用いた dyndns.org への IPアドレス更新
アナログ回線====ADSL modem ====BRL-04 ---- NotePC (Plamo PC-9821 Ls12)
上図のようにADSLモデム、BRL-04、NotePCを用いた、ウェッブサーバとインターネットの接続下に、
スクリプトがBRL-04にtelnetでログインを行い、プロバイダから割り当てられたIPアドレスを取り込みます。
BRL-04のtelnetコマンドは、メニューから番号を選び設定や表示をさせるものです。
以下が dnsupdate.cronの内容です。意味は前記の RTA52iを参照してください。
注意:[\]は「バックスラッシュ」です。
#!/usr/local/bin/perl
open( LOG, ">> /var/log/ipaddress.log" );
$date = `/bin/date '+%D %X'`;chop($date);
my($lines,$t,$pass,$adminpass,$rthost);
# conect and ping session
print "Establishing Internet Connection....\n";
system("ping -c 1 ******.dyndns.org"); #貴方のドメイン名
print "\n";
use Net::Telnet();
$rthost = '***.***.***.***';
#BRL-04の工場出荷時のナンバーは192.168.1.1です
$adminpass = '********';
#BRL-04のパスワード。工場出荷時の設定を必ず変えましょう。
$t=new Net::Telnet(-host => "$rthost");
$t->waitfor('/Password :/');
$t->print("$adminpass");
#$t->waitfor('/->.*$/');
@mylines = $t->waitfor('/->.*$/');
# 表示内容の「WAN IP =
[***.***.***.***]」からIPナンバーのみを取り出す。
foreach(@mylines) {
if(/WAN[\s+][\s+][\s+]IP[\s+][\s+][\s+]=[\s+][\[+]/)
{
$myIP=$';
}
}
foreach($myIP){
if(/[]]/){
$myIPaddress=$`;
print $myIPaddress,"\n";
}
}
zmmz72gr
$t->close;
$command=sprintf("/root/bin/ddclient -ip %s -retry", $myIPaddress);
system($command);
exit;
---- ここまでがスクリプトの内容です。 ----
dnsupdate.cronを適当なディレクトリに入れます。私の場合は、/root/bin/に置きました。
一時間毎にこれを実行するために、/var/spool/cron/crontabs/rootに次を追記します。
00 * * * * /root/bin/dnsupdate.cron > /dev/null「> /dev/null」の記述が無ければ、結果がroot当にメールで確認できます。