- 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転送をする。
Copyright © 2004-2005 E-HIRO.NET. All Rights Reserved.