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=[パスワード]&h=@’ > /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日本語フォーラム / Wgetを使ったIP自動設定の方法 wo
- crontabの書き方 — server-memo.net
- UNIXの部屋 コマンド検索:crontab (*BSD/Linux)
※作業は Ubuntu にインストールされた VMware Server2 上の仮想マシン CentOS 上で行った。参考文献はLinux、FreeBSD、UNIX、Ubuntu 向けのものを読んだが、おそらくこれらは共通するものだと思われる。
コメント