ダイナミックDNSのIPアドレス更新を自動化してみる [雑記]
前回,ダイナミックDNSの登録をやって,ひとまず使えるようになったのだが,必須作業であるIPアドレスの更新が手動になっていた.今回はこれを自動化してみる.
で,ちょっと調べてみると,この自動更新をやってくれるクライアントソフトがある.
Windowsでは,DiCEが定番のようだ.
だけどうちのサーバはUbuntuだ.DiCE for Linux Beta Versionというのもあるようだが,もうちょっと調べてみると,「Dynamic DO!.jp」ならスクリプトとcronで簡単にできるようだ.
参考にしたサイトは以下の3つ.
「240ねっと! - Linuxサーバの構築」
「DDNS/ddo.jp - PukiWiki」
「U1F BLOG: ddo.jp 自動更新スクリプト」
では,具体的な作業に入ろう.
まずは,perlスクリプトの作成.IPアドレスの変更があったときだけ更新(登録)作業をするようなスクリプトとしておく.
ipchk.plは以下のとおり.
ちなみに,ホスト名とパスワードは「Dynamic DO!.jp」に登録したホスト名とパスワードだ.
このスクリプトにはパスワードが平文で書かれてるので,アクセス権をrootだけにしてやる.
動作テストしてエラーが無ければcronに登録してやる.
「Dynamic DO!.jp」には以下のような記載がある.
あと,まるっきりIPアドレスが変わらないと更新(登録)作業がされないことになるが,最低1ヶ月に1回はIPアドレスの更新をしないといけない.なので,スクリプトが生成する「現在のIPアドレスを保持するファイル」を週に2回削除するようにして,必ず更新(登録)作業がされるようにしてやる.
crontabの編集
記載内容
これでIPアドレス更新が自動的に行われるようになるはずだ.
試しにサーバのIPアドレスを変更したり,CRT_IP.datファイルを削除して動作を確認してみたが正常に動作しているようだ.
ちなみにLogは/var/log/ddns.logに出力される.更新(登録)作業がされたときに出力されるようになっていて動作が確認できる.
以上で作業は完了.これでIPアドレスが変わってもちゃんとDNSでアクセスできるようになる.
で,ちょっと調べてみると,この自動更新をやってくれるクライアントソフトがある.
Windowsでは,DiCEが定番のようだ.
だけどうちのサーバはUbuntuだ.DiCE for Linux Beta Versionというのもあるようだが,もうちょっと調べてみると,「Dynamic DO!.jp」ならスクリプトとcronで簡単にできるようだ.
参考にしたサイトは以下の3つ.
「240ねっと! - Linuxサーバの構築」
「DDNS/ddo.jp - PukiWiki」
「U1F BLOG: ddo.jp 自動更新スクリプト」
では,具体的な作業に入ろう.
まずは,perlスクリプトの作成.IPアドレスの変更があったときだけ更新(登録)作業をするようなスクリプトとしておく.
cd /usr sudo mkdir ddns cd ddns sudo vi ipchk.pl
ipchk.plは以下のとおり.
ちなみに,ホスト名とパスワードは「Dynamic DO!.jp」に登録したホスト名とパスワードだ.
#!/usr/bin/perl # $CRT_IPF = '/usr/ddns/CRT_IP.dat'; $NEW_IPF = '/usr/ddns/NEW_IP.dat'; $LOG = '/var/log/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); $NEW_IP = substr($c,$stp,($edp-$stp)); close(INPUT); 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("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; }
このスクリプトにはパスワードが平文で書かれてるので,アクセス権をrootだけにしてやる.
sudo chmod 700 ipchk.pl
動作テストしてエラーが無ければcronに登録してやる.
「Dynamic DO!.jp」には以下のような記載がある.
「IPアドレス更新リクエストが毎時00分前後の数秒に集中しております。 サーバ負荷の増大に伴い、その間の更新リクエストが失敗する場合もございます。 自動更新処理は毎時00分を避けるよう設定ください。」なので5分ごとの更新タイミングを3分ずらすようにする(3分,8分,13分・・・とする).
あと,まるっきりIPアドレスが変わらないと更新(登録)作業がされないことになるが,最低1ヶ月に1回はIPアドレスの更新をしないといけない.なので,スクリプトが生成する「現在のIPアドレスを保持するファイル」を週に2回削除するようにして,必ず更新(登録)作業がされるようにしてやる.
crontabの編集
sudo crontab -e
記載内容
3-58/5 * * * * /usr/ddns/ipchk.pl 0 5 * * 0 rm -f /usr/ddns/CRT_IP.dat 0 5 * * 3 rm -f /usr/ddns/CRT_IP.dat
これでIPアドレス更新が自動的に行われるようになるはずだ.
試しにサーバのIPアドレスを変更したり,CRT_IP.datファイルを削除して動作を確認してみたが正常に動作しているようだ.
ちなみにLogは/var/log/ddns.logに出力される.更新(登録)作業がされたときに出力されるようになっていて動作が確認できる.
以上で作業は完了.これでIPアドレスが変わってもちゃんとDNSでアクセスできるようになる.