Yesterday:117 | Today:111 | Total:75756
[ 自宅サーバーWebRing |ID=83 前後5表示乱移動サイト一覧 ]

E-HIRO.NET Web Site..

- DNSサーバー(内向き):djbdnsの設定 -

一般的に、DNSサーバーと言えば、BINDですが色々調べた結果、非常にコンパクトでセキュリティ的に高いということで、djbdnsを採用しました。BINDは定期的にupdateしなければならないし、sendmailと同様巨大で複雑です。そこで、個人レベルではdjbdnsで十分だと判断しました。
後々はBINDもいじってみようとは思ってますが、まずはdjbdnsでDNSを行なっていきます。
また、djbdnsは機能単位のモジュール化とroot権限実行モジュールの絞込みからセキュリティ的に高いとのことです。
ちなみに、djbdnsはqmailの作者であるD.J.Berneteinさんのソフトウェアです。

(参考サイト) http://www.emaillab.org/djb/tools/ucspi-tcp/top.html

djbdnsには以下に示す関連プログラムがあります。
(1) tinydns   : 自ゾーン問い合わせ用サービス
(2) dnscache  : 再帰検索とCache
(3) supervise : サービスの開始と監視
(4) dnslog    : DNSログサービス
(5) svscan    : サービス郡起動制御
(6) axfrdns   : ゾーン転送サービス(TCPで動作)


djbdnsに必要なプログラム
(1) djbdns      : DNSサーバー本体
(2) daemontools : djbdnsの設定、動作制御用ツール群
(3) ucspi-tcp   : svscanがdnscacheの動作に必要


ucspi-tcpは、tcpserverとtcpclientを改良したもので、
TCPクライアント・サーバ・アプリケーションを構築するための使いやすいコマンドラインツールです。
tcpserverは入ってくる接続を待ち、それぞれの接続に対して好みのプログラムを起動させます。
プログラムはローカルやリモートのホスト名、IPアドレス、ポート番号を示す環境変数を受け取ります。


RPMファイルの作成
自分の環境に合ったRPMファイルを作成します。
先程示したdjbdnsに必要なプログラム(1)〜(3)のRPMファイルを作成します。

(1) djbdns-1.05-5.i386.rpmの作成
# cd /usr/src/redhat/SRPMS
# wget http://summersoft.fay.ar.us/pub/qmail/djbdns/redhat-9.0/djbdns-1.05-5.src.rpm
# rpm -Uhv djbdns-1.05-5.src.rpm
# cd /usr/src/redhat/SPECS
# rpmbuild -ba djbdns.spec
# cd /usr/src/redhat/RPMS/i386
# ls
djbdns-1.05-5.i386.rpm
djbdns-debuginfo-1.05-5.i386.rpm

(2) daemontools-0.76-2.i386.rpmの作成
# cd /usr/src/redhat/SRPMS
# wget http://summersoft.fay.ar.us/pub/qmail/daemontools/redhat-9/daemontools-0.76-2.src.rpm
# rpm -Uhv daemontools-0.76-2.src.rpm
# cd /usr/src/redhat/SPECS
# rpmbuild -ba daemontools.spec
# cd /usr/src/redhat/RPMS/i386
# ls
daemontools-0.76-2.i386.rpm
daemontools-debuginfo-0.76-2.i386.rpm

(3) ucspi-tcp-0.88-6.i386.rpmの作成
# cd /usr/src/redhat/SRPMS
# wget http://summersoft.fay.ar.us/pub/qmail/ucspi-tcp/ucspi-tcp-0.88-6.src.rpm
# rpm -Uhv ucspi-tcp-0.88-6.src.rpm
# cd /usr/src/redhat/SPECS
# ls
ucspi-tcp.specが作成されていることを確認します。
このSPECファイルは既にPatchが適用されていますので、そのまま変更なしでrpmbuildします。
# rpmbuild -ba ucspi-tcp.spec
# cd /usr/src/redhat/RPMS/i386
# ls
ucspi-tcp-0.88-6.i386.rpm
ucspi-tcp-debuginfo-0.88-6.i386.rpm

インストール
# cd /usr/src/redhat/RPMS/i386
# rpm -ivh ucspi-tcp-0.88-6.i386.rpm
# rpm -ivh daemontools-0.76-2.i386.rpm

dnscacheのために、group、userを追加します。
追加後、念のため/etc/groupと/etc/passwdで追加されたことを確認してください。
# groupadd djbdns
# useradd -d /dev/null -g djbdns -s /bin/true dnscache
# useradd -d /dev/null -g djbdns -s /bin/true dnslog

dnscacheのためのsvscanの起動(back groundで動作)
# svscan /service &

プロセスの動作確認
# ps -ax
 9560 pts/0    S      0:00 svscan /service

DNSサーバー本体のインストール
# rpm -ivh djbdns-1.05-5.i386.rpm


一般的なDNSサーバーでは、外部からのDNS要求に応じるためDNSサーバー(tinydns)を動かし、
ループバックインターフェース(127.0.0.1)でキャッシュサーバーを動かしているようですが、
私のような非固定IPの環境ではDNSサーバーを外部向けに運用するのは困難なので、内部向けに運用します。
内部向けの場合は、DNSサーバー(tinydns)を127.0.0.1で動かし、
キャッシュサーバーをLAN内のクライアントが利用できるようにプライベートアドレス(192.168.0.x)を
割り当てて、運用します。


tinydnsの設定
# tinydns-conf tinydns dnslog /var/tinydns 127.0.0.1
# mkdir /var/log/tinydns
# chown dnslog:djbdns /var/log/tinydns
# chmod 700 /var/log/tinydns

ログの設定
# vi /var/tinydns/log/run
#!/bin/sh
exec setuidgid dnslog multilog t s1000000 n10 /var/log/tinydns

レコードの追加
# cd /var/tinydns/root
# ./add-ns e-hiro.net 192.168.0.1
# ./add-ns 0.168.192.in-addr.arpa 192.168.0.1
# ./add-host www.e-hiro.net 192.168.0.1
# ./add-host pc1 192.168.0.10
# ./add-host pc2 192.168.0.11
dataファイルの修正
:a:のaを削除(ns mx)
# vi data

設定反映
# make

シンボリックリンクの作成
# ln -s /var/tinydns /service

正常に起動しているか確認
# svstat /service/tinydns
# svstat /service/tinydns/log

tinydns関連が起動しているか確認
# ps -ax
 9603 pts/0    S      0:00 supervise tinydns
 9604 pts/0    S      0:00 [tinydns]
 9606 pts/0    S      0:00 supervise log
 9607 pts/0    S      0:00 multilog t s1000000 n10 /var/log/tinydns

設定を反映させるには、それぞれのサービスを再起動します。
# svc -h /service/tinydns
# svc -h /service/tinydns/log


dnscacheの設定
dnscache-confはDNSキャッシュサービスのための環境を設定します。
# dnscache-conf dnscache dnslog /var/dnscache 192.168.0.2
# mkdir /var/log/dnscache
# chown dnslog:djbdns /var/log/dnscache
# chmod 700 /var/log/dnscache

ログの設定
# vi /var/dnscache/log/run
#!/bin/sh
exec setuidgid dnslog multilog t s1000000 n10 /var/log/dnscache

LAN内からの接続許可の設定
デフォルトではホスト(127.0.0.1)からの接続のみ応答する設定となっている。
# touch /var/dnscache/root/ip/192.168.0

e-hiro.netと0.168.192.in-addr.arpaは127.0.0.1に問い合わせるようにします。
# cd /var/dnscache/root/servers
# echo 127.0.0.1 > e-hiro.net
# echo 127.0.0.1 > 0.168.192.in-addr.arpa

自ドメイン以外の名前の解決をプロバイダのDNSサーバーに問い合わせるようにします。
# cd /var/dnscache/env
# echo 1 > FORWARDONLY
# cd /var/dnscache/root/servers
# vi @
xxx.xxx.xxx.xxx
yyy.yyy.yyy.yyy

起動設定
シンボリックリンクを/serviceディレクトリ内に張るだけで自動的に起動してくれます。
# ln -s /var/dnscache /service

resolv.confの設定
nameserverに192.168.0.2を設定します。
また、LAN内のクライアントに対してDNSサーバーは192.168.0.2を設定します。
# vi /etc/resolv.conf
nameserver 192.168.0.2


正常に起動しているか確認
# svstat /service/dnscache
# svstat /service/dnscache/log

digコマンドで他サイトの名前引きを実行してみます。
# dig www.yahoo.co.jp @192.168.0.2

dnscacheの再起動
設定ファイルを編集後、設定を反映させるためdnscacheを再起動します。
# svc -h /service/dnscache


付録
レコードの登録(コマンドを使用しないで直接入力します)
# cd /service/tinydns/root
# vi data
.e-hiro.net:192.168.0.2:ns1.e-hiro.net
@e-hiro.net:192.168.0.2:mail.e-hiro.net
=www.e-hiro.net:192.168.0.2
=www2.e-hiro.net:192.168.0.3
.0.168.192.in-addr.arpa :127.0.0.1

=は、正引きと同時に逆引きのレコードも登録しています。
最後の1行は逆引きのためのゾーンとなっています。
以下のように定義することもできます。
.0.168.192.in-addr.arpa::ns1.e-hiro.net
.0.168.192.in-addr.arpa::ns2.e-hiro.net

# make
makeをすることでdataファイルから自動的にdata.cdbが作成できます。
もし、dataファイルに設定ミスがあり正常にレコードの登録ができなかった場合でも、
肝心のdata.cdbファイルは変更前の状態を維持したままtinydnsが稼動し続けるので
安心してdataファイルを編集しなおすことができるようになっているそうです。


それぞれのサーバーの役割
tinydns  --> 問われれば自分の管理している名前(zone)だけを答える。
dnscache --> 名前の問合せをして回答する。
              もしすでに知っていれば(キャッシュ)自分で答え、知らなければ他(外部)に聞く。
上記の2つは同じIPアドレスでは動作しません。
axfrdns  -->zone転送をする。
			
Menu
Copyright © 2004-2005 E-HIRO.NET. All Rights Reserved.