[globe3.ddns.org]

ddclient-2.3.7を使うための設定

ここでは、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.PL
make
make test
make install
3) 更新用のプログラムを入手します

ここでは、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/
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の内容です。
注意:[\]は「バックスラッシュ」です。

------------------- ここから --------------------
#!/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当にメールで確認できます。


[コンピュータの話し] [globe3.ddns.net]