Dynamic DNSを自動更新するための設定

一応このサイトの目玉コンテンツです(^^;)
もちろん今(2006.3)となっては、大昔の話ですが(w

常にアクセスしてもらえるために

 ダイナミックDNSを使用すればフレッツISDN/ADSL環境といえどもFQDNでアクセスしてもらうことができる環境を作ることが可能になります。

 しかし、いつ何時切断/再接続が発生してIPアドレスが変わるのか全く予測がつかないフレッツISDN/ADSL接続において、常にDNSに登録されているIPアドレスを正しい状態に保つことは、人力でははっきり言って不可能です。四六時中端末の前に座って監視をしているのならばともかく、日中に学校や会社に行ったりしているうちにIPアドレスが変わってしまったら、手の打ちようがありません。

 せっかくフレッツISDN/ADSLによる常時接続環境を手に入れたのだから、ちゃんと常に固定のURLでアクセスできるようにしたい.....

 その手段はただ一つしかありませんでした。こうして

DNSのIPアドレスを自動的に更新するプログラムを書く

ということを決意しました。
#といっても、開発期間1日ですが(^^;)

 

情報を維持していたスクリプト

#!/usr/bin/perl
# Script for AutoRegistration


#接続が切れている場合は、まず接続する
print "Establishing Internet Connection....\n";
system("ping -c 1 210.130.139.65");
print "\n";


use Net::Telnet ();

$t = new Net::Telnet (Timeout => 10, Prompt => '/Slotin\% $/');

#MN128 SOHO Slot-inにログインする
print "Connecting to MN128 SOHO Slot-in......\n";
$t->open("192.168.0.1");
$t->login(Username_of_Admin, Password_of_Admin);


print "Connection Established!\n";

@lines = $t->cmd("show status");

#前回取得したIPアドレスの読み込み
open (INPUT, "ipaddress.txt");
$PreviousIP = <INPUT>;


foreach (@lines){
     if (/割り当てIPアドレス/){
          $CurrentIP = substr($', 1, length($') - 3);
          print "$CurrentIP\n";
          if ($PreviousIP eq $CurrentIP){
               print "IPアドレスは変更されていません\n";
               print "終了します....\n";
               $t->close;
               print "Connection Closed.\n";
               exit;
          }else{
               open (OUTPUT, ">ipaddress.txt");
               print OUTPUT $CurrentIP;
               close OUTPUT;
               print "IPアドレスが変更されています\n";
               print "DNSレコードを更新します....\n";
               $t->close;
               print "Connection Closed.\n";
          }
     }
}


print "IPアドレスの更新を開始します....\n";

#-------------------------------------------------------------------
# dyn.to 自動設定用スクリプト v0.1
# (C) KK.Kon
# http://www8.freeweb.ne.jp/computer/kkon/
#-------------------------------------------------------------------


# Create a user agent object

# ブラウザ情報の設定
#$AgentName = "";
#$AgentName = "Mozilla/4.0 (compatible; MSIE 5.01; Windows 98)";
#$AgentName = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
$AgentName = "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)";
#$AgentName = "Mozilla/4.04 [ja] (Win95; I ;Nav)";
#$AgentName = "Mozilla/4.6 [ja] (Win95; I)";
#$AgentName = "Mozilla/4.7 [en] (Win98; I)";


# dyn.toのユーザー名とパスワードの設定
$UserName = "Username_of_dyn.to";
$Password = "Password_of_dyn.to";


# CGIに渡すパラメータの説明
# command=
# Update: 登録/更新
# Delete: 削除
# IP=
# x.x.x.x: 登録する際のIPアドレス。
# もし空白ならWebにアクセスしているIPアドレスが使用される
# MX=
# 1: MXレコードの設定をする
# ntt-telho=
# 1: 午前8時に自動的に削除
$CGIparm = "command=Update&IP=$CurrentIP&MX=1";

use LWP::UserAgent;
use LWP::Debug;
# デバッグ出力
# 次の行のコメントをはずせばデバッグ情報が表示されます。
#LWP::Debug::level('+');

$ua = new LWP::UserAgent;
$ua->agent($AgentName);

# Create a request
my $req = new HTTP::Request
(GET => "http://${UserName}:${Password}\@" .
"cgi.dyn.to/cgi-bin/members/dyndns?" .
"${CGIparm}");

# Pass request to the user agent and get a response back
my $res = $ua->request($req);

# Check the outcome of the response
if ($res->is_success) {
     print "IPアドレスの変更が正常に終了しました!\n";
     exit 0;
} else {
     print $res->content;
     print "IPアドレスの変更に失敗しました\n";
     exit 1;
}

解説

 解説はいずれ時間を見てつけます。現在はこのスクリプトをcronで15分に1回実行しています。また、このスクリプトの一部は、http://www.dyn.toに掲載されている自動設定スクリプトを参考にしています。

当面の間、質問がある方は情報交換掲示板の方にお願いいたします。

 このスクリプトはMN128 SOHO Slot-inを対象としてますが、他のMN128シリーズでの動作状況の情報も募集しておりますので、よろしくお願いいたしますm(__)m。

 情報交換掲示板