@ DynamicDNSの取得・自動更新
DynamicDNS は,IP を動的に特定のFQDNに関連付けてくれるものです.
固定IPで独自ドメインも持っている方には無関係ですが,普通の一般人はDDNSのお世話になりますよ.基本的な利用は無料が多いです.


DDNSサイトへの登録
まずは,DDNSを提供しているドメインのサブドメインを無料で取得しましょう.案外多くのサイトが見つかると思いますが今回は下記2サイトで.
 Dynamic DO!.jp DynDNS.org
前者が日本のDDNSで,後者は英語圏のものです.登録はどちらもいたって簡単なのでサイトに行ってもらえればすぐわかります.
DynDNS.org のほうは1アカウントで幾つもサブドメインを登録できるので,Apacheでバーチャルホストを使う際には便利です.


自動更新
DynamicDNS は,自身のIPが変更になる度に登録したサイトに報告して更新していかなければなりません.さもなければ,IPが変わってしまうとサイトがFQDNで表示できなくなってしまい非常に不便です.(グローバルIPを入力すれば見れます)
しかし,IPが変化するたびに手動で更新していくのはとても骨の折れる作業ですね.自宅に居るときなら何とかなりますが,外出中はお手上げです.
そこで,サーバ機自身にIP変化を監視させて,変化した時に自動でDDNSへ報告するようにすれば良いでしょう.
ここで,DDNSの自動更新で有名な DiCE というソフトを利用するのが解決への早道でしょう.
Linux版は更新する気がないらしいので,そのうち使えなくなるかもしれませんね.そうしたら,開発してくれるかもしれませんけど.
DiCEのインストールは解凍するだけで終わりですので,解凍後,dicedを起動して設定を済まして,自動起動に設定しておくと良いでしょう. 自動起動は,"/etc/rc.local" に "/解凍ディレクトリ/DiCE/diced -dl" を追加するだけです.起動も同様にして行います.

さて,普通に設定していて特に問題がなければ良いのですが,時々,問題があってDiCEが使用できない可能性があるので,その時は,自前で更新スクリプトを作成すると良いでしょう.以下,その例です.
実際に使ってみた時の不都合だったのですが,Linux Kernel を 2.6.9 から 2.6.25-rc4 に変更したのですが,DiCEを起動していると常にCPU使用率が高い (Dual-Core なので50%前後使用でした) 状態に陥り,常用するのは不可能でした.
原因はわかりませんが,カーネルが新しいとこのような問題が起こるようです.但し,最新のカーネルでは改善されている可能性があります.(2008/10 現在)
仕方ないので,Perlを用いてCGIスクリプトの自動更新をCronとの組み合わせで作成しました.Cron は自動実行のデーモンです.下記にソースを示します.
Cron 登録時は,Perlが実行できるディレクトリ ( /usr/PerlOK/ としましょう) に保存し,"1-59/15 * * * * root /usr/PerlOK/ddns.cgi > /dev/null" とすれば良いでしょう.
上の例では15分間隔で更新確認します." > /dev/null " は出力を表示しない設定です.メールが欲しければはずしましょう.

ddns.cgi

#!/usr/bin/perl

sub get_ip;

# The Shortest Update Distance Time (Minuites)
$Next_Up=60;	# Default 60

open(DATA,"/var/www/cgi-bin/ip.pl");	# File Pass for IP Data
	@IP_ADD=<DATA>;
close(DATA);

$Current_IP="0.0.1.0";
$Old_IP=@IP_ADD[0];
	chomp $Old_IP;
$Update_Time=@IP_ADD[1];
	chomp $Update_Time;
$Current_Date=time();
$num=0;

do{
	get_ip();
	$num++;
} while($Current_IP!~/Address/ && $Current_IP ne "0.0.0.0");


$Current_IP=~s/.*?(([0-9]+\.){3}[0-9]+).*/$1/;

$difference=$Current_Date-$Update_Time;

#######################################################################
########################### FTP-PASV_mode #############################
if ($Current_IP ne $Old_IP){
	open(FTP,"/etc/vsftpd/vsftpd.conf");
		@ftp_conf=<FTP>;
	close(FTP);
	$new_conf='';
	foreach(@ftp_conf){
		if($_=~/^pasv_address=/){
			$new_conf.="pasv_address=$Current_IP\n";
		} else{
			$new_conf.=$_;
		}
	}
	open(FFTP,">/etc/vsftpd/vsftpd.conf");
		print FFTP "$new_conf";
	close(FFTP);
	print "Grobal IP is changed! The following is text of vsftpd.conf\n\n";
	print "$new_conf\n";
	system("/etc/init.d/vsftpd restart");
}
#######################################################################
#######################################################################

if($difference > $Next_Up*60 && $Current_IP ne $Old_IP || $difference > 60*60*24*7){
	print "IP Update....\n";
	system("wget -q -O - http://free.ddo.jp:80/dnsupdate.php?dn=USER&pw=PASSWORD&ip=");	# DDO!.jp  USER,PASSWORD is yours!
	system("wget -q -O - http://USER:PASSWORD\@members.dyndns.org:80/nic/update?hostname=FQDNs&myip=&wildcard=&mx=&backmx=");	# DynDNS.org  USER,PASSWORD,FQDNs is yours!
	open(DaTE,">/var/www/cgi-bin/ip.pl");
		print DaTE "$Current_IP\n$Current_Date\n";
	close(DaTE);
}

sub get_ip{
	if($num==0){
		system("wget -q -r -O - http://checkip.dyndns.org/ | grep Address > /var/www/cgi-bin/get_ip.pl");
	} elsif($num==1){
		system("wget -q -r -O - http://www.dyndns.org/cgi-bin/check_ip.cgi | grep Address > /var/www/cgi-bin/get_ip.pl");
	} elsif($num==2){
		system("wget -q -r -O - http://web0.obenri.com/ipsend.php | grep Address > /var/www/cgi-bin/get_ip.pl");
	} else{
		$Current_IP="0.0.0.0";
	}
	open(GIP,"/var/www/cgi-bin/get_ip.pl");
		$Current_IP=<GIP>
	close(GIP);
	$Current_IP=@Current_IP[0];
	$Current_IP=~s/\n//;
	$Current_IP=~s/\r//;
}

exit();

FTP-PASV_mode のところは不要なら削って下さい.PASV mode (ブラウザなど) でFTP接続する際に設定する項目です.
ちなみに,7日ごとの自動更新機能付です.更新しないで30日前後経つと自動でサブドメインが削除されてしまいます.
更新間隔を変更する場合は,60*60*24*7 の 7 を任意の日数に変更してください.(例:隔週 → 60*60*24*14)
著作権がどうのなどは気にしないで下さい.折角,オープンソースのLinuxを使っていますからね!使いたけれ自由に改変してでも使って下さい.
不明な点は,掲示板若しくはadministrator@benben.ddo.jpまでどうぞ.



サーバ構築の流れ
1.OSの選定
2.OSのインストール
3.必要なサーバソフトの設定
4.ルータの設定
5.動作確認
6.DynamicDNSの取得・自動更新
7.その他

TOPへ



広告とか



This site is created by Benben. Copy Right 2008 Benben