2010年12月19日日曜日

ddo.jp 自動更新スクリプト

せっかく光を引いたので、EeePC 4GにUbuntu Linux Serverをインストールして、Webサーバーをたてました。JCOMとは違って、光はモデムの電源を入れなおすとIPアドレスが変わります。ひょっとしたらDHCPの更新でもIPアドレスが変わることもあるのかも。
逆に言うと、JCOM は固定IPかよってくらいIPアドレスがまったく変わらない仕様のようです。
とりあえず、IPアドレスがわからなくなると外から接続できなくなるので、無料DDNS の ddo.jp を使ってみることにしました。

http://ddo.jp/

ブラウザで上記URLにアクセスして登録した後、IPアドレスが変更になったときにIPアドレスを自動で再登録するようにスクリプトを組みました。
元々は、ここにあったVine用のものを使ってみたものの、Ubuntu(?)だからかうまく動かなかったので、スクリプトをちょっと弄りました。


#!/usr/bin/perl
#
$CRT_IPF = '/tmp/CRT_IP.dat';
$NEW_IPF = '/tmp/NEW_IP.dat';
$LOG = '/tmp/ddns.log';

open(INPUT,$CRT_IPF);
$CRT_IP=<INPUT>;
close(INPUT);

system("/usr/bin/wget -q -O $NEW_IPF http://info.ddo.jp/remote_addr.php");
open(INPUT,$NEW_IPF);
@xx = <INPUT>;
$c = $xx[1];
$stp = index($c,"REMOTE_ADDR:")+12;
$edp = length($c);

print "c = $c\n";
print "stp = $stp, edp = $edp\n";

$NEW_IP = substr($c,$stp,($edp-$stp));
close(INPUT);

print "New IP: $NEW_IP\n";
print "Current IP: $CRT_IP\n";

if ($NEW_IP ne "" and $CRT_IP ne $NEW_IP) {
open (OUTPUT ,">$CRT_IPF");
print OUTPUT $NEW_IP;
close OUTPUT;

print "IP Address update: $CRT_IP to $NEW_IP\n";
system("/usr/bin/wget -q -O - 'http://free.ddo.jp/dnsupdate.php?dn=[登録名].ddo.jp&pw=[パスワード]'");

$now_string = localtime;
open (OUTPUT ,">>$LOG");
print OUTPUT "$now_string DDNS IP Address Updated. $CRT_IP to $NEW_IP\n";
close OUTPUT;
}


更に、これを cron で15分毎に自動で動くように設定します。
/etc/cron.d/ddns というファイルを作って、以下の2行を記入します。


# DDNS
*/15 * * * * hogehoge /home/hogehoge/ddns/ipcheck.pl


IPアドレスが変わっても15分後には新しいIPアドレスでドメインを辿れるようになります。