cronでダイナミックDNSの更新

  • 投稿日:
  • 更新日:2015/03/01
  • by
  • カテゴリ:

長いこと更新していませんでしたが、最近環境が落ち着いてきたので少しづつまた書こうと思います。

動的DNSエントリは定期的に更新が必要

で、表題のは私の環境では必要が殆どないのですが、やっている人もやりたい人も多いであろうと思うcronでの動的DNSエントリの更新についての備忘録です。

最近はルータにこの機能が搭載されていることも多いので必ずしも必要ではないようですけども。

TinyCoreを例に取ると、crontabは

/var/spool/cron/crontabs/root

というファイルになります。

ログインによって更新する例

mydnsの場合、http://www.mydns.jp/login.htmlと いうURLに対してユーザ名とパスワードを渡してログインするのがもっとも簡単な方法です。パスワードが平文で渡ってしまいますが。このあたりは MyDNSのサイトにも書いてあります。このあたり、ダイナミックDNSを提供するサイトによって異なるので、調査が必要です。

さて、これをcronにする場合、まずcrontabに書く必要があります。私は以下のようにしていました。

00 0-23/3 * * * /usr/local/bin/wget -O - --http-user=(ユーザ名) 
--http-password=(パスワード) http://www.mydns.jp/login.html
2>&1 | logger -t dyndnsupdate -p local0.info

(表示の都合上3行にしていますが、実際には1行です) これで、

「0:00, 3:00, 6:00, ..., 21:00」に(00 0-23/3 * * *の部分)
「wget --http-user-(ユーザ名) --http-password=(パスワード) http://www.mydns.jp/login.html」を実行(残りの部分)

という意味になります。パイプの先のloggerは出力をsyslogに送っています。時刻指定の方法は

分 時 日 月 曜日(日曜が0で土曜が7)

となります。たとえば、一日一回でよければ、時間指定の部分は

00 3 * * *

ですし(上記は毎日3:00に実行)、一週間に一回でよければ、

30 17 * * 0

のようになります(これは毎週日曜日の17:30に実行)。

で、TinyCoreの場合はこのファイルがリブートのたびに消えては困るので、

/opt/.filetool.lst

に入れておきます。また、起動時にcronをデーモン化しておきたいので、

/opt/bootlocal.sh

に以下の記述を入れておきます。

crond -L /dev/null 2>&1 | logger -t crond -p local0.info

ここでも、crondの出力をloggerでsyslogに送っています。

(24 Dec 2014追記) wgetのオプションが間違っていたのを修正しました。(誤) --http-passwd (正) --http-password お詫びして修正します。

(5 Jan 2015追記) 変なところにファイルが出力されないようにwgetの出力先をsyslogにしました。

こちらもよく読まれています