[Home] [Kuri] [Sysad] [Internet?] [Blog] [Java] [Windows] [Download] [Profile] [Flash] [+]

FreeBSD で djbdns

djbdns は非常にシンプルな DNS サーバです。
今までずっと BIND を使ってきたのですが、最近、某所でたて続けに core を吐いて止まっていることがありました。一応セキュリティホールの見つ かっていない最新版を使用していますが、少々不安に思っております。
そこで、試しに閉じた環境で使ってみました。

目次


1. 環境

daemontools も必要です。インストールや設定方法は
こちらをご覧ください。

OS:FreeBSD-4.1R (しかも VMware 上…)
IP:192.168.0.1
管理するドメイン:in.usupi.org
外部参照DNS:192.168.0.254
source:djbdns-1.05.tar.gz
daemontools-0.70.tar.gz → 詳しくはこちら

このマシンは、in.usupi.org の DNS サーバとして機能させます。
また、テスト環境は内部の半ば閉じた世界ですので、外部の名前を解決する ために別の DNS サーバに問合せるようにします。

2. インストール

とっても簡単です。/usr/local/bin にインストールされます。

  % tar xfz djbdns-1.05.tar.gz
  % cd djbdns-1.05
  % make
  % su
  # make setup check

実行とログ用のユーザが必要です。ここでは、3つのユーザ(tinydns, dnscache, dnslog)と、3ユーザの属するグループを以下のように生成します。
# UID, GID は適当です。

  # pw groupadd dns -g 70
  # pw useradd dnscache -u 71 -g 70 -d /usr/local/etc/dnscache -s /sbin/nologin
  # pw useradd dnslog -u 72 -g 70 -d /usr/local/etc/dnscache -s /sbin/nologin
  # pw useradd tinydns -u 73 -g 70 -d /usr/local/etc/tinydns -s /sbin/nologin


3. 設定

BIND などですと、外部からの問合せに答える機能と、内部からの問合せ を受けて外部のネームサーバに再帰的に問合せる機能が一緒になっています。 djbdns の場合、前者は tinydns, 後者は dnscache が行います。

3.1 tinydns の設定

まずは、外部からの問合せに答えるだけの tinydns を設定します。
ベースとなるディレクトリは /usr/local/etc/tinydns とします。(推奨は /etc/tinydns だったと思います。)

  # tinydns-conf tinydns dnslog /usr/local/etc/tinydns 192.168.0.1

1つ目の引数は、tinydns を実行するユーザを指定しています。
2つ目の引数は、ログを収集するユーザを指定しています。
3つ目の引数は、ベースとなるディレクトリを指定しています。
4つ目の引数は、このマシンの IP ですが、実際にこの IP に対して listen します。
では次に、実際のデータを作成します。

  # cd /usr/local/etc/tinydns/root
  # ./add-ns in.usupi.org 192.168.0.1
  # ./add-ns 0.168.192.in-addr.arpa 192.168.0.1
  # ./add-host tamao.in.usupi.org 192.168.0.211
  ...略
  # ./add-alias www.in.usupi.org 192.168.0.211
  # ./add-mx in.usupi.org 192.168.0.11
  # make

まず、add-ns スクリプトを用いてネームサーバを登録します。上記では 正引きと逆引きを登録しています。
次に、add-host スクリプトを用いてホストを登録します。
あと、CNAME を登録したい場合は、add-alias スクリプトを用います。 MX を登録したい場合は、add-mx スクリプトを用います。
登録し終ったら、make を実行してデータを更新します。
最後に、daemontools に登録して、tinydns を起動します。

  # ln -s /usr/local/etc/tinydns /usr/local/service

実際に動いているか、確認しておきます。

  % dnsq a tamao.in.usupi.org 192.168.0.1
  1 tamao.in.usupi.org:
  95 bytes, 1+1+1+1 records, response, authoritative, noerror
  query: 1 tamao.in.usupi.org
  answer: tamao.in.usupi.org 86400 A 192.168.0.211
  authority: in.usupi.org 259200 NS a.ns.in.usupi.org
  additional: a.ns.in.usupi.org 259200 A 192.168.0.1

3.2 dnscache の設定

次に、内部からの問合せを受け付け、外部に再帰的に問合せて、代わりに 解決してくれる dnscache の設定です。
ベースとなるディレクトリは /usr/local/etc/dnscache とします。(推奨は /etc/dnscache だったと思います。)

  # dnscache-conf dnscache dnslog /usr/local/etc/dnscache

1つ目の引数は、dnscache を実行するユーザを指定しています。
2つ目の引数は、ログを収集するユーザを指定しています。
3つ目の引数は、ベースとなるディレクトリを指定しています。
次に、問い合わせる先のサーバを指定します。

  # cd /usr/local/etc/dnscache/root/servers
  # echo 192.168.0.1 > in.usupi.org
  # echo 192.168.0.1 > 0.168.192.in-addr.arpa
  # mv @ @.0
  # echo 192.168.0.254 > @

root/servers の下に、問い合わせるゾーンと同名のファイルと作成し、 ファイルの中に1行につき1つのIPアドレスを書いておきますと、そのゾーン への問合せをそのIPアドレスに投げるようになります。
ルートの場合、ファイル名は @ になります。デフォルトですとルートサーバ が列挙されていますが、ここでは内部の別の DNS サーバに問合せますので、 そのIPアドレスを指定しています。
また、以下のようにフォワードすることを明記します。

  # echo 1 > /usr/local/etc/dnscache/env/FORWARDONLY

# 外部に直接問合せられる場合、@ の編集と FORWARDONLY の作成は不要です。
最後に、daemontools に登録して、dnscache を起動します。

  # ln -s /usr/local/etc/dnscache /usr/local/service

実際に動いているか、確認しておきます。

  % dnsqr a www.in.usupi.org
  1 ftp.in.usupi.org:
  58 bytes, 1+1+0+0 records, response, noerror
  query: 1 ftp.in.usupi.org
  answer: ftp.in.usupi.org 86400 A 192.168.0.211

あとは、/etc/resolv.conf に nameserver 127.0.0.1 を追加し、各種アプリ ケーションから使用できることを確かめます。

3.3 備考

daemontools の配下に置いた後、設定変更などを行ってもそれが反映 されてないと思われる場合は、以下のようにしてみてください。

  # svc -t /usr/local/service/tinydns あるいは dnscache


4. 感想

さすがに qmail の開発者と同じ方が開発されただけあって、安心して本番 マシンに入れられそうです。
ただ、今回は単一のマシンに対して設定しましたので、dnscache は localhost を listen するだけでよいのですが、別のマシンからの再帰問合せを受け 付けるには、tinydns で listen しているアドレスと別のものを使わなくて はなりません。プライベートアドレスが割り振られていて空いているアドレス がある場合はよいのですが、限られたグローバルアドレスだと辛いこともある のではなかろうか、と余計な心配をしてしまいました。

Powered by Apache PostgreSQL Usupi Logo Kuri Logo
[Home] [Kuri] [Sysad] [Internet?] [Blog] [Java] [Windows] [Download] [Profile] [Flash] [-]
usu@usupi.org Last modified : Tue Jul 10 06:06:13 2001