ゾーン転送サービス axfrdns の導入

SERVER

djbdns で、セカンダリ DNS にゾーン転送を行うためのサービス axfrdns を稼動してみました。


djbdns と axfrdns

djbdns とは、qmail の作者、D.J.Bernstein さんが作成したネームサーバです。http://djbdns.jp.qmail.org/djbdns/ でも歌われている通り、「安全、確実、高速、簡潔、設定も簡単な DNS ツール群」 が売り文句になっています。

また、axfrdns はそれに付属しているゾーン転送サービスプログラムで、BIND などで運用されたセカンダリ DNS に対してゾーン情報の転送を行う機能を提供します。

今回は、axfrdns を設定して、ゾーン転送ができるように tinydns を設定します。なお、すでに tinydns はインストールされていることとして話を進めていこうと思います。

tinydns の設定から起動までは、EZ-NET 特集: ネームサーバ djbdns 1.05 のインストール で触れています。

 

axfrdns が必要とするプログラム

なんと言っても djbdns 一式が必要です。が、ここではすでに tinydns が動いている状態を想定していますので、これはすでに用意済みということにします。

その他に必要なのが、これも D.J.Bernstein さんが作成した、ucspi-tcp ( TCP client-server command-line tools ) です。axfrdns では、この中のうちの tcpserver というソフトウェアが必要になります。

まずはこれを、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

これで、axfrdns に必要な tcpserver が導入されます。

 

axfrdns のインストール

axfrdns の導入ですが、djbdns をインストールした段階で、すでに axfrdns はコンピュータ内に用意されています。ただし、動作するためには若干の作業が必要なので、ここではその手順を紹介します。

 

まずは、axfrdns を動かすためのアカウントを作成します。

ここでは axfrdns という名前のアカウントを作成してみることにしました。

useradd -g djbdns -s /bin/true -d /dev/null axfrdns

 

続いて、axfrdns の設定ファイルの作成です。

設定ファイルの作成には、djbdns のインストールにおいて導入された axfrdns-conf というプログラムを使用します。これに axfrdns を起動するためのアカウントと、ログをとるためのアカウント、さらに自ホストの IP アドレスを添えて呼び出すことによって、自動的に axfrdns が設定されます。

なお、ログをとるアカウントを、tinydns のインストール時に作成した dnslog にすることにしました。また、ゾーン転送サービスを行うホストの IP アドレスは 192.168.0.1 であるとします。

/usr/local/bin/axfrdns-conf axfrdns dnslog /etc/axfrdns /etc/tinydns 192.168.0.1

これで準備完了です。なお、上記の axfrdns は axfrdns を動かすアカウント、dnslog は axfrdns のログをとるためのアカウントです。/etc/axfrdns は axfrdns のためのファイルを置く場所で、axfrdns-conf は自動的にこのディレクトリを作成してくれます。また、/etc/tinydns はゾーンデータが保存されている場所をさします。これは tinydns を設定した時点ですでに決まっていることと思います。そして最後に axfrdns が機能するホストの IP アドレスを設定すれば、axfrdns が起動できる状態になります。

 

そして、いよいよ起動です。

axfrdns の起動には svscan という仕組みを使用します。これも tinydns を動かしたときにすでに導入してあるはずなので、ここで導入の話は省略することにします。

axfrdns を起動するためには、/service ディレクトリに /etc/axfrdns のシンボリックリンクを作成するだけで OK です。

ln -s /etc/axfrdns /service

これで、axfrdns が起動されたと思います。ただし、これだけだと axfrdns は、外部からの 53/TCP の接続に応答しないような設定になっていますので、このあたりを微調整する必要があります。

このあたりの調整は tcpserver に依存しています。/etc/axfrdns ディレクトリの中に tcp という名のファイルがあり、そのなかにどのホストからのゾーン転送要求を受理するかといった設定を tcpserver の設定ファイルどおりの構文で記述する必要があります。

 

設定に必要なのは、まず、どのホストからの要求を受け取るか。そして、どのゾーン情報を転送するかの2つです。

ここでは、ゾーンを転送するホストは自ネットワーク空間のホスト、そして転送するゾーンを、ez-net.local と、0.168.192.in-addr.arpa であるとします。このとき、tcpserver の構文どおりに、まず許可する IP アドレスと :allow を記述して、続いて AXFR という値に、転送可能なゾーンを / で区切って指定します。

192.168.0.0-255:allow,AXFR="ez-net.local/0.168.192.in-addr.arpa"
:deny

この2行を tcp というファイルに保存します。あとは、make コマンドを実行すると、自動的に tcpserver 用のファイルに変換されたあと、axfrdns の設定が更新されます。Linux で一般的な -HUP シグナルを送ることなく、新しい設定情報に更新できるところがうれしいです。

 

これで導入完了です。あとは、セカンダリ DNS からゾーン転送の要求を受けると、自動的にゾーン情報が転送されます。

 

関連ページ

EZ-NET 特集: DNS サーバ djbdns

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