ゾーン転送サービス 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.88make
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 からゾーン転送の要求を受けると、自動的にゾーン情報が転送されます。
関連ページ
djbdns に関するお話を、上記のページにまとめてみました。このページの内容を含め、ほかにもいろいろなことに触れてみました。