2002年9月5日 改定

DNSサーバ(BIND)の紹介

 DNSはインターネットにおいて重要なサーバの1つです。 機能はIPアドレスをドメイン名の対応を行うためのサーバで、例えばwww.ntt.co.jpというドメインアドレスに対応するIPアドレスを検索したり、逆にドメインアドレスからIPアドレスを検索する機能を提供します。DNSサーバソフトとしてはBINDというソフトが特に有名で、多くのDNSサーバではこのソフトを利用して事と思います。
なお、BINDにはバージョン4系のものとバージョン8系のものがありますが、本資料中では特に断らない限り、バージョン8系のものを説明しています。BINDにはバージョン9系もありますが、基本機能では8系と大差ないです。 (ダイナミックDNSやビューといった概念が取り入れられています)
1.Bindの入手先
2.Bindのコンパイル
3.Bindの設定
4.起動設定
5.関連情報

1.Bindの入手先

BINDは一般的なLinuxやFreeBSDではパッケージされていますが、最新のものを使いたい場合やセキュリティに問題あるバージョンしかパッケージにない場合には最新のBINDを以下のサイトから求めることが可能です。
現在利用中のBindのバージョンを調べるには、コマンドプロンプトから
 # named -v
を実行することで表示されます。
ソースファイル
 ・ 本家: http://www.isc.org/
 ・IIJのFTPサイト ftp://ftp.iij.ad.jp/pub/network/bind/src/
 ・ 九州大学のFTPサイト ftp://ftp.kyushu-u.ac.jp/pub/Net/Bind/mirror/
これらのFTPサーバから”bind-src.tar.gz”を取り出せばコンパイル可能です。
パッケージ
 ・ 最新版についてはそれぞれのディストリビューションのFTPサーバを覗いてみてください。
FreeBSDについては上記のソースファイルのFTPサーバ上にFreeBSDのportsパッケージが存在します

2.Bindのコンパイル(必要に応じて)

ソースファイルからBINDをコンパイルするには、まず上記1.で入手したソースファイルを解凍します。
 $
mkdir bind-8
 $
cd bind-8
 $
gzcat bind-src.tar.gz | tar xfpB -
とすることで解凍されます。
続いて、コンパイル作業に入ります。
 $
cd src
 $
make clean
 $
make depend
 $
make
コンパイルできたなら、
 $
su
 #
make install
で所定の場所にコンパイルした内容がインストールされます。なお、このようにコンパイルしてインストールを行った場合、プログラム本体や設定ファイルの格納ディレクトリはパッケージで格納される場所と違う場合がありますので注意してください。
(/usr/local/sbin等)

3.Bindの設定

DNSの設定ファイルは利用するOSによってその存在するディレクトリの位置が違いますが、Linux(TurboLinux)とFreeBSDでは以下のようになっています。
【Linux(TurboLinux)】
 ・/etc/named.conf        ----- BINDの設定
 ・/var/named/named.ca     ----- ルートキャッシュ情報
 ・/var/named/named.local    ----- ローカルホストの逆引きゾーン情報
 ・/var/named/*          ----- その他のファイル(ゾーン定義等)
【FreeBSD】
 ・/etc/namedb/named.conf   ----- BINDの設定
 ・/etc/namedb/named.root   ----- ルートキャッシュ情報
 ・/etc/namedb/localhost.rev  ----- ローカルホストの逆引きゾーン情報
 ・/var/namedb/*         ----- その他のファイル(ゾーン定義等)
なお、ソースファイルをコンパイルしてインストールした場合の上記の設定ファイルの場所に関しては、ソースファイルに付属したREADME等を参照してください。

また、named(DNSサーバ)に起動方法に関しては、各ディストリビューションの環境によって起動方法が違いますので、それぞれのディストリビューションに見合った方法で行ってください。ちなみにTurboLinuxではturboserviceというツールを使って起動設定を行いますし、FreeBSDでは/etc/defaults/rc.confファイル中のnamed_enable="NO"の記述をnamed_enable="YES"に変更して再起動すればnamedが起動されます。
【設定例】
DNSを設定するには予めインターネット・サービス・プロパイダ(ISP)かJPNIC(Japan Network Infomation Center : http://www.nic.ad.jp/jp/index.html )に、使いたいドメイン名の申請を行います。(現在ではISPに申請するのが一般的です。)
申請をする際には、ISPから割り当てられたグローバルIPアドレスの中からDNSサーバにするマシン用のIPアドレスを決めて、使いたいドメイン名とともに申請します。
以下では、プロパイダから取得したIPアドレス202.214.63.112/28(202.214.63.112-127)のゾーンを使ったDNSの例を示します。なお、プロパイダから指定された逆引きゾーンのサブアロケーション名は"112.63.214.202.in-addr.arpa"で、正引き名は"user.co.jp"、また今回のDNSを”dns.user.co.jp”と想定します。
【named.confの設定内容】
//
options {
directory "/var/named";  // FreeBSDの場合には'/etc/namedb'
// query-source address * port 53;
} ;
//
zone "." {

type hint ;
file "named.ca" ; // FreeBSDでは'named.root'
} ;
//
zone "0.0.127.in-addr.arpa" {

type master ;
file "named.local" ; // FreeBSDでは'localhost.rev'
} ;
//
zone "112.63.214.202.in-addr.arpa" {

type master ;
file "db.202.214.63.112" ;
} ;
zone "user.co.jp" {

type master ;
file "db.user.co.jp" ;
} ;

逆引きゾーンは"63.214.202.in-addr.arpa"でなく"112.63.214.202.in-addr.arpa"であることに注目してください。
【db.user.co.jpの設定内容例】
//
// 最初にSOAレコードで、このDNSサーバの名前がnsで管理者がrootであることを
// 示している。
$TTL 3600
@ IN SOA ns.user.co.jp. root.ns.user.co.jp. (
2000052700 ; // Serial: シリアル番号(このファイルを編集する度にアップさせる)
28800 ; // Refresh :リフレッシュは28800秒間隔
14400 ; // Retry:リトライ間隔は14400秒
3600000 ; // Expire:廃棄する間隔は3600000秒間隔
86400 ) ; // Minimum:生存時間は86400秒間隔

IN NS ns.user.co.jp. ; //user.co.jpのDNSサーバマシンを定義
IN NS ns1.isp.ne.jp. ; //プロパイダのDNSにセカンダリを依頼している場合にはプロ
               // パイダのDNSも定義しておく。
// 上記2つのNSレコードでは行の先頭が空白またはTABであることに注意する事
// また、FQDN名の最後はピリオド(.)で終わっていることに注意すること
;
user.co.jp IN MX 10 mail.user.co.jp. // 最後はピリオド。メールサーバの定義

localhost IN CNAME localhost. // ローカルホスト名の定義。最後はピリオド
;
ns IN A 202.214.63.113 // ns.user.co.jpのIPアドレス
www IN A 202.214.63.115 // www.user.co.jpのIPアドレス
ftp IN CNAME www.user.co.jp. // ftp.user.co.jpはwwwと同じ。最後はピリオド
mail IN A 202.214.63.116
// 以上のように必要に応じてuser.co.jpのゾーンにあるマシンのIPアドレスを定義していく。
db.202.214.63.112の設定内容例】
//
// 最初にSOAレコードで、このDNSサーバの名前がnsで管理者がrootであることを
// 示している。
$TTL 3600
@ IN SOA ns.user.co.jp. root.ns.user.co.jp. (
2000052700 ; // Serial: シリアル番号(このファイルを編集する度にアップさせる)
28800 ; // Refresh :リフレッシュは28800秒間隔
14400 ; // Retry:リトライ間隔は14400秒
3600000 ; // Expire:廃棄する間隔は3600000秒間隔
86400 ) ; // Minimum:生存時間は86400秒間隔

IN NS ns.user.co.jp. ; //user.co.jpのDNSサーバマシンを定義
IN NS ns1.isp.ne.jp. ; //プロパイダのDNSにセカンダリを依頼している場合にはプロ
               // パイダのDNSも定義しておく。
// 上記2つのNSレコードでは行の先頭が空白またはTABであることに注意する事
// また、FQDN名の最後はピリオド(.)で終わっていることに注意すること
;
113 IN PTR ns.user.co.jp. // 最後はピリオド
115 IN PTR www.user.co.jp.

116 IN PTR mail.user.co.jp.
【named.ca(named.root)およびlocalhost.rev(named.local)の設定内容】
設定すべき部分はありません。標準のままで問題ありません。ただし、FreeBSDではDNSの設定に先立ち、/etc/namedbディレクトリのmake-localhostを実行してnamed.localを作成する必要があります。
ゾーンファイルを変更した場合には、必ずシリアル番号をアップさせてから、
  # ps ax | grep named
として”named”のプロセス番号を調べて、
  # kill -HUP プロセス番号
としてnamedの設定を有効にしてください。

4.起動設定

Linuxの場合にはBindをパッケージからインストールすると、一般的には /etc/rc.d/init.d/named というスクリプトに記述された方法で起動されます。さらにこのファイルは/etc/rc.d/rc3.d/Sxxnamed というファイル(xxは適当な数字)にシンボリックリンクされており、各ランレベル(起動がGUIでの起動になっている場合には/etc/rc.d/rc5.d/Sxxnamed)でこのスクリプトが実行されます。
もし、Bindを自分でコンパイルしたような場合で、先のスクリプトファイルが無い場合には取りあえず以下のようなスクリプトを作成すれば、Bindを起動できる筈です。

(/etc/rc.d/init.d/named)
#!/bin/sh
# /etc/rc.d/init.d/named
#
インストールディレクトリ/named -u bind -g bind
ここで、インストールディレクトリはパッケージからのインストールなら/usr/sbinにあると思います。またソースからコンパイルした場合には、/usr/localディレクトリ以下のどこかにあると思います。
このスクリプトではnamedの起動時にユーザとグループをそれぞれ"bind"という名前で起動するようにしています。(予め、ユーザとグループは登録しておく事)こうする事で、万一、bindのセキュリティホールによるバッファーオーバーラン等での侵入を許しても、侵入者はbindというユーザの権限しかないので、root権限での操作ができなくなります。
このスクリプトを、各ランレベルで実行できるようにシンボリックリンクを張っておきます。
 # ln -s /etc/rc.d/init.d/named /etc/rc.d/rc3.d/S85named
 # ln -s /etc/rc.d/init.d/named /etc/rc.d/rc5.d/S85named
FreeBSDの場合には、/etc/defaults/rc.confというファイルに記述されている、
named_enable="NO" を named_enable="YES" にすれば次回の起動時からbindが起動されます。
もしソースからコンパイルした場合には、namedプログラムは/usr/localディレクトリ以下のどこかにある筈なので、場所を named_program="xxxxxxxxxx"で指定してください。
また、ユーザの権限をrootからbindに切り替えるなら、/named_flags="-u bind -g bind"という記述を追加してください。