[Linux] ValueDomain DDNS (wget+cron)

ValueDomain の提供する無料DNS サーバーにはDDNS 機能がある(DDNS 詳細)。これをwget とcron で簡単に更新する方法。

通常は、このような作業を必要としない半固定的なグローバルアドレス環境にあるのだが、計画停電(輪番停電)の影響により割り振られているIP アドレスが変更になってしまう。計画停電についてはApcupsd を用いて自動的に複数のシステムとUPS を安全にシャットダウンするように設定し、復電後に自動復帰するようにした。また、同時に稼働中のVMware Server2 上の仮想マシンの自動停止と自動起動も設定した。ほとんどこれで問題ないはずだったのだが、思わぬところに穴があった。

※他にはValueDomain のウェブサイトから手動で更新する方法や、DiCE を使う方法などがある。

スポンサードリンク

通知アドレスと引数

まず、ValueDomain の「アクセス先の例」には次のように書かれている:

http://dyn.value-domain.com/cgi-bin/dyn.fcg?d=[ドメイン]&p=[パスワード]&h=[ホスト名]&i=[IP アドレス]

ドメイン名は「example.com」、ホスト名は「*」や「@」などが設定できるようで、IP アドレスを引数に加えなければValueDomain 側で送信元(=ほとんどの場合、サーバーのあるネットワークのIP アドレスになるはず)を調べてくれる。ValueDomain 側で調べてもらえるから、プライベートネットワーク内に居ると調べるのが面倒なグローバルアドレスを得る必要がない。

コマンドライン書式

まず、コマンドラインから実行してみる。

$ wget -O – ‘http://dyn.value-domain.com/cgi-bin/dyn.fcg?d=ドメイン&p=パスワード&h=ホスト名’ > /dev/null 2>&1

上記コマンドを実行して、ValueDomain のDNS レコードを表示したとき、自分のIP アドレスに更新されていれば成功。

cron に追加

コマンドラインでの実行が成功したら、これが自動的に実行されるようにcron に追加する。なお、この方法だと、IP アドレスが更新されていようがいまいが指定間隔でValueDomain に通知される。過度なアクセスはネットワークトラフィックの増大につながるから避けなければならない。

$ sudo crontab -e

*/15 * * * * wget -O – ‘http://dyn.value-domain.com/cgi-bin/dyn.fcg?d=[ドメイン]&p=[パスワード]&[email protected]’ > /dev/null 2>&1

※この例では15 分毎に実行される

実行確認

実行されたかどうか確認するには次のようにする:

$ sudo tail /var/log/cron

または

$ sudo cat /var/log/cron | grep wget

とする。

結果例(抜粋)

# sudo cat /var/log/cron | grep wget
Mar 23 01:24:01 *** crond[9488]: (root) CMD (wget -O – ‘http://dyn.value-domain.com/
Mar 23 01:28:01 *** crond[9584]: (root) CMD (wget -O – ‘http://dyn.value-domain.com/
Mar 23 01:32:01 *** crond[9722]: (root) CMD (wget -O – ‘http://dyn.value-domain.com/
Mar 23 01:45:01 *** crond[10003]: (root) CMD (wget -O – ‘http://dyn.value-domain.com/
Mar 23 02:00:01 *** crond[10331]: (root) CMD (wget -O – ‘http://dyn.value-domain.com/

※上3 行は「*/4」としたときのもので、以降は「*/15」としたもの

参考文献

※作業は Ubuntu にインストールされた VMware Server2 上の仮想マシン CentOS 上で行った。参考文献はLinux、FreeBSD、UNIX、Ubuntu 向けのものを読んだが、おそらくこれらは共通するものだと思われる。

関連記事

スポンサードリンク

Comments

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です