DNSコンテンツサーバを構築する (djbdns)

対象プラットフォーム: FreeBSD 8.x
(下記手順を2014/05/01にFreeBSD 8.4-RELEASEで確認済み)


はじめに

DNSの機能は、大きく分けて自分が責任を持つドメインの名前を解決するDNSコンテンツサーバと、自分が責任を持たない任意のドメインの名前解決をするDNSリゾルバの2つがあります。
自分が管理するドメインの名前解決を外向けに提供したい場合、必要なのはDNSコンテンツサーバで、リゾルバの機能はDNS Poisoning攻撃などのリスクを増やすため、提供すべきではありません。

DNSサーバの主要な実装であるBINDは、このコンテンツサーバ機能とリゾルバの機能の両方を包含しており、DNSコンテンツサーバのみ有効にするにはかなりの工夫が必要です。
また、BINDは結構な頻度で脆弱性が見つかるので、今回はセキュアで単機能なdjbdnsを使いたいと思います。

djbdnsはqmailの開発者としても知られるDaniel Julius Bernstein(DJB)氏が開発したソフトウェアです。
djbdnsはDNSコンテンツサーバであるtinydnsとDNSリゾルバであるdnscacheの2つから構成されます。
今回はtinydnsを使ったDNSコンテンツサーバの立て方を説明します。

「djbdns」のインストール

まずはじめに、portsを使ってdjbdnsをインストールします。

portsを使ったdjbdnsのインストール
$ cd /usr/ports/dns/djbdns
$ make config-recursive
$ make install clean

djbdnsのビルドメニューで「ADD_USERS」を設定することにより、djbdnsを動作させるのに必要なユーザが作成されます。
また、portsの依存関係により、daemontools等の必要なパッケージについても自動的にインストールされます。

「ADD_USERS」を設定し忘れてビルドした際でも、以下のようにすれば必要なユーザを追加できます。

必要なユーザの追加(「ADD_USERS」を指定してビルドした場合は不要)
$ pw groupadd djbdns -g 70
$ pw useradd tinydns -u 71 -g 70 -d /usr/local/etc/tinydns -s /sbin/nologin
$ pw useradd dnscache -u 72 -g 70 -d /usr/local/etc/dnscache -s /sbin/nologin
$ pw useradd dnslog -u 73 -g 70 -d /usr/local/etc/dnslog -s /sbin/nologin

tinydnsはDNSコンテンツサーバ用、dnscacheはDNSリゾルバ用、dnslogはログ出力用のプロセスを動作させるユーザです。
qmailもそうですが、DJB氏のアプリケーションは単機能の機能を権限が違う複数のユーザで動作させる設計で作られています。

「tinydns」の設定

次に、tinydnsの設定を進めていきます。
tinydnsの設定は、tinydns-confを使います。

tinydns-confによる設定フォルダの作成
$ tinydns-conf tinydns dnslog /usr/local/etc/tinydns 192.168.0.13

tinydns-confの引数は、順に「tinydnsを動かすユーザ」「ログを保存するユーザ」「設定ファイルの保存先」「tinydnsを動かすIPアドレス」です。

上記の手順で作成したフォルダの中に以下のようにして設定を追加していきます。

tinydnsの設定
$ cd /usr/local/etc/tinydns/root
$ ./add-ns orbiter.kishiro.com 192.168.0.13
$ ./add-host appolo11.orbiter.kishiro.com xxx.xxx.xxx.xxx

上記の例では、orbiter.kishiro.comを管理するDNSコンテンツサーバを設定し、その元でxxx.xxx.xxx.xxxというIPアドレスにappolo11.orbiter.kishiro.comという名前を設定しています。

尚、上記の手順だけでは設定が反映されません。
編集が終わったあとにmakeを実施するして設定を反映してください。

makeによる設定の反映
$ make

「damemontools」の設定

tinydnsを動作させるには、同じくDJB氏開発のdaemontoolsを使います。
daemontoolsは、tinydnsを起動させるために必要で、万が一tinydnsが停止、終了した場合でも、再起動させてくれるデーモンです。
FreeBSDでportsからdjbdnsをインストールした場合には、daemontoolsも自動的にインストールされるので、daemontoolsの個別のインストール作業は不要です。

daemontoolsの起動スクリプトは、「/usr/local/etc/rc.d/svscan」として保存されています。
中を見るとわかるのですが、このスクリプトは指定された「サービス起動用ディレクトリ」の中の(サブディレクトリ内の実行属性のついた)シェルスクリプトを起動させるようになっています。
daemontoolsがportsからインストールされていれば、この「サービス起動用ディレクトリ」は「/var/service」になっています。

まず、このサービス起動用ディレクトリを作成します。

「サービス起動用ディレクトリ」の作成
$ mkdir -p /var/service

次に、このサービスフォルダにtinydnsサービスを登録します。

tinydnsサービスの登録
$ ln -s /usr/local/etc/tinydns /var/service

登録といっても、シンボリックリンクを貼るだけです。
この手順により、「/usr/local/etc/tinydns」内の「run」スクリプトが起動されるようになります。

最後に、システムが起動した際にdaemontoolsが自動的に起動するように、「/etc/rc.conf」を編集します。
「/etc/rc.conf」に以下の記述を追記してください。

「rc.conf」への追記
svscan_enable="YES"

この記述により、システムが起動した時に自動的にdaemontoolsも起動し、そこからtinydnsが起動されます。
あとは再起動するか、/usr/local/etc/rc.d/svscan startするだけです。

尚、このページではtinydnsのFreeBSDでの導入方法を中心に記載しています。
tinydnsの詳しい使い方は、他のサイトを確認してください。

変更履歴

2014/11/14

・文章の内容全般を見直し再構成。

2014/05/27

・portsの導入時に適切な設定を選択することにより、必要なユーザが自動的に追加される旨を追記。


あなたの探し物は見つかりましたか?
まさにこれだ
参考になった
ちょっと違う
これじゃない

何かメッセージがあればお願いします

このメッセージを非公開にする

ご注意

・頂いたメッセージは管理者のチェックの後、公開されます。
・メッセージの公開を希望されない場合には、「このメッセージを非公開にする」にチェックを入れてください。
・管理者が不適切と判断したメッセージは公開しませんので、予めご了承ください。


まだ評価がありません

表示できるメッセージはありません。


目次に戻る
image