axfr-get で data ファイルを複製する
SERVER
djbdns を Secondery DNS にするために、ゾーン取得サービス axfr-get を導入してみました。
djbdns と axfr-get
djbdns とは、qmail の作者、D.J.Bernstein さんが作成したネームサーバです。http://djbdns.jp.qmail.org/djbdns/ でも歌われている通り、「安全、確実、高速、簡潔、設定も簡単な DNS ツール群」 が売り文句になっています。
また、axfrdns はそれに付属しているゾーン転送サービスプログラムで、セカンダリ DNS に対してゾーン情報の転送を行う機能を提供します。
今回は、もうひとつの djbdns から、axfr-get を使ってゾーンデータを取得してみようと思います。なお、すでにどちらのサーバにも tinydns はインストールされていて、転送する側の djbdns は、axfrdns によってゾーン転送が可能であることとして話を進めていこうと思います。
なお、tinydns の設定から起動までは、 EZ-NET 特集: ネームサーバ djbdns 1.05 のインストール で、axfrdns の設定から起動までは EZ-NET 特集: ゾーン転送サービス axfrdns の導入 で触れています。
axfr-get が必要とするプログラム
なんと言っても djbdns 一式が必要です。が、ここではすでに tinydns が動いている状態を想定していますので、これはすでに用意済みということにします。
その他に必要なのが、これも D.J.Bernstein さんが作成した、ucspi-tcp ( TCP client-server command-line tools ) です。axfr-get では、この中のうちの tcpclient というソフトウェアが必要になります。
まずはこれを、http://cr.yp.to/ucspi-tcp/install.html からダウンロードします。そして、ダウンロードした ucspi-tcp-0.88.tar.gz を次のような手順で展開してインストールします。
tar xvzf ucspi-tcp-0.88.tar.gz
cd ucspi-tcp-0.88make
make setup checkこれで、axfr-get に必要な tcpclient が導入されます。
axfr-get でのゾーン情報取得
ゾーン情報を提供する側の djbdns はすでに適切に設定がなされているものとして話を進めます。
ゾーン情報を取得するための axfr-get ですが、このプログラムは tcpclient 上で動作するように作られているようです。そこで、axfr-get を実行する際には ucspi-tcp に付属していた tcpclient とともに実行する必要があります。
たとえば、取得したいゾーンが ez-net.jp で、その DNS が 192.168.0.2 にて稼動していたとします。このときに、/etc/tinydns/root/ のなかの data ファイルを更新したい場合には、/etc/tinydns/root/ ディレクトリの中へ移動してから、コマンドラインで次のように入力します。なお、ここで 192.168.0.3 は、自分自身の IP アドレスです。
/usr/local/bin/tcpclient -i 192.168.0.3 192.168.0.2 53 /usr/local/bin/axfr-get ez-net.jp data data.tmp
これで、data ファイルにゾーン情報の複製が取得できたはずです。あとは make コマンドを実行して、data ファイルの変更を有効にしましょう。
もしもゾーンの取得がうまくいかない場合は、axfrdns 側の tcp のセキュリティ設定などを確認してみましょう。また、ident ポート (TCP/113) を使用している様子なので、このあたりのポートを閉じている場合には開いてみるといいかもしれません。
同期の自動化
さて、上記の方法ですと、djbdns のゾーン変更のたびに手動で data ファイルの複製を行わなくてはいけませんので、自動的にゾーン情報の同期が行われるように設定してみます。
まず、/etc/tinydns/root/ ディレクトリの中に、次のような内容の zone-sync ファイルを作成します。
#!/bin/sh
cd /etc/tinydns/root
/usr/local/bin/tcpclient -i 192.168.0.3 192.168.0.2 53 /usr/local/bin/axfr-get ez-net.jp data data.tmpmake
そしてこのスクリプトに chmod u+x zone-sync として、実行権限を与えます。あとは、/usr/bin/crontab コマンドを使用して、zone-sync スクリプトが定期的に実行されるように crond の設定ファイルを編集します。/usr/sbin/crontab -e root と入力すると、root 用の crontab が編集できますので、そこに次の行を追加します。
30 * * * * /etc/tinydns/root/zone-sync > /dev/null 2>&1
あとは、ps axu | grep crond で crond のプロセス ID を探して、kill -HUP [プロセス ID] によって crond を再起動させてやれば完了です。
関連ページ
djbdns に関するお話を、上記のページにまとめてみました。このページの内容を含め、ほかにもいろいろなことに触れてみました。