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.88

make
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.tmp

make

そしてこのスクリプトに 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 を再起動させてやれば完了です。

 

関連ページ

EZ-NET 特集: DNS サーバ djbdns

djbdns に関するお話を、上記のページにまとめてみました。このページの内容を含め、ほかにもいろいろなことに触れてみました。