@niftyのダイナミックDNSを利用している。クライアントとしてはDiCE for Linuxを使用していたが、デーモンとして常時起動していてCPU負荷常に消費している。また設定する時の文字コードがいまどきEUC固定で不満があった。
niftyのダイナミックDNSサービスはそもそもブラウザで指定ページを認証するだけで更新できるので、perlで簡単にクライアントを作れそうだ。
動きを追ってみる。https://www.atnifty.com/ddns/p13.phpにアクセスするとIPアドレスとvalidというコードを渡される。validはたぶんIPアドレスのハッシュか何かかな。このIPアドレスを以前に更新した際に記録しておいた手元のアドレスと比較して、違っていた場合にhttps://gateway.nifty.com/service/g-way/ddns/nifty/secure/config/update.phpに上記のIPアドレスとvalidを渡すことによってダイナミックDNSを更新する。その際に@nifty IDとパスワードによるベーシック認証が行われる。
これを元にperlスクリプトを作る。はじめはHTTPクライアント機能もperlで作るつもりだったが、wgetを呼び出して簡単に済ますことにした。出来たのがこちら。
このスクリプトを好きな場所(ここでは/usr/local/bin/ddns4nifty/)に置く。IPアドレスを記録しておくファイルは、フルパスでスクリプト内に記述する。@nifty IDとパスワードもハードコーディングする。
次にこれを、cronで定期的に実行するようにする。実行間隔は10分くらいがいいかな。
*/10 * * * * root /usr/bin/perl /usr/local/bin/ddns4nifty/ddns4nifty.pl
何度かルータを再起動したりしてIPを強制的に変えてみたが、ちゃんと切り替わるようだ。ただcronが回るのに最大で10分。ダイナミックDNSを更新しても数分はキャッシュが残っているみたいなので、最悪20分くらいはサーバにアクセスできないこともありうる。これはダイナミックDNSの宿命か。
このスクリプトは使用、改変、再配布など自由に行っていただいてかまわないが、一切の動作保障や発生した損失の補償をしない。なお、私のプログラミング技術は入門者レベルなので、利用を検討される方はその点も十分にご注意いただきたい。
