はじめに
自宅サーバへアクセスするため,DynDNSで無料で利用させていただいているダイナミックDNSですが,ドメイン名が長いのでちょっと飽きてきた今日この頃...衝動的にドメインを取得してみました.VALUE DOMAINで.
以下,そんなVALUE DOMAINで取得したドメインを,ダイナミックDNSで利用できるようにするための流れについてざっと.更新を自動化するためのPerlスクリプトも書いてみました.
ダイナミックDNS設定に関する情報
次のURLに,ダイナミックDNS設定に関する情報が記載されています.
DNS更新をリクエストするスクリプト
上記URLの情報を参考に,次のようなスクリプトをテキトーに書きました.
#!/usr/bin/perl use strict; use warnings; use utf8; use LWP::UserAgent; # # 設定 # my $ipaddr = ''; my $domain = 'yourdomain.com'; my $passwd = 'yourpasswd'; my $host = '*'; # # 設定 ここまで # my $logfile = sprintf '/var/log/ddns/%s.log', $domain; my $ua = LWP::UserAgent->new; my $res; my ($ss, $mm, $hh, $d, $m, $y) = localtime time; $y+=1900; $m++; my $datetime = sprintf('%04d-%02d-%02d %02d:%02d:%02d', $y, $m, $d, $hh, $mm, $ss ); # # IPアドレスの取得 # if($ipaddr eq '') { my $url_get_ip = 'http://dyn.value-domain.com/cgi-bin/dyn.fcg?ip'; $res = $ua->get($url_get_ip); chomp($ipaddr = $res->content); } # # DNS更新リクエスト # my $url_update = sprintf('http://dyn.value-domain.com/cgi-bin/dyn.fcg' . '?d=%s&p=%s&h=%s&i=%s', $domain, $passwd, $host, $ipaddr, ); $res = $ua->get($url_update); chomp(my $content = $res->content); $content =~ s{(\x0d\x0a?|\x0a)}{ // }g; # # print log # open(my $fh, '>>', $logfile) or die $!; printf $fh "[%s] Request: %s, Result: %s\n", $datetime, $ipaddr, $content; close $fh; __END__
これを,/home/iwata/cron/ddns-yourdomain.com.plみたいな感じで保存します.
crontabに追記
あとはこれを定期的に呼び出したいので,次のような1行を/etc/crontabに追記します.
*/10 * * * * root /usr/bin/perl /home/iwata/cron/ddns-yourdomain.com.pl >/dev/null 2>&1
これを保存すれば,自動的に定期実行の対象になります.
ログファイル
こんな感じです.ときどき失敗してますね><
... [2009-10-13 08:00:01] Request: ***.***.***.***, Result: status=0 // OK [2009-10-13 08:10:01] Request: ***.***.***.***, Result: status=0 // OK [2009-10-13 08:20:01] Request: ***.***.***.***, Result: status=0 // OK [2009-10-13 08:30:01] Request: ***.***.***.***, Result: status=0 // OK [2009-10-13 08:40:01] Request: ***.***.***.***, Result: status=0 // OK [2009-10-13 08:50:01] Request: ***.***.***.***, Result: status=0 // OK [2009-10-13 09:00:01] Request: ***.***.***.***, Result: status=0 // OK [2009-10-13 09:10:01] Request: ***.***.***.***, Result: status=0 // OK [2009-10-13 09:20:01] Request: ***.***.***.***, Result: status=0 // OK [2009-10-13 09:30:01] Request: ***.***.***.***, Result: <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> // <HTML><HEAD> // <TITLE>503 Service Temporarily Unavailable</TITLE> // </HEAD><BODY> // <H1>Service Temporarily Unavailable</H1> // The server is temporarily unable to service your // request due to maintenance downtime or capacity // problems. Please try again later. // </BODY></HTML> [2009-10-13 09:40:01] Request: ***.***.***.***, Result: status=0 // OK [2009-10-13 09:50:01] Request: ***.***.***.***, Result: 500 Server closed connection without sending any data back [2009-10-13 10:00:01] Request: ***.***.***.***, Result: 500 Server closed connection without sending any data back [2009-10-13 10:10:01] Request: ***.***.***.***, Result: status=0 // OK [2009-10-13 10:20:01] Request: ***.***.***.***, Result: status=0 // OK ...
おわりに
こんな感じで,VALUE DOMAINで取得したドメインをダイナミックDNSで利用できるようにしてみました.今のところ大丈夫っぽいです.
...こういったスクリプトを,RubyとかPythonとかでも書いてみるといいのかな,と,名古屋Ruby会議01の余韻.
