BIND 9.Xのインストールと設定
はじめに
DNSサーバは、ISC BINDを使用して設定します。通常ISCを省略して「BIND」と呼ばれます。BINDに関する
情報、BINDのソースファイルなどは以下のようなサイトにより入手することが出来ます。
このドキュメントを作成したときにBINDのバージョンは9.3.1です。以下のサイトより新しいバージョン
を確認してください。
必要なファイル
- bind-9.3.1.tar.gz - http://www.isc.org/
 
インストール
- 最初に作業すること
上記のサイトよりソースファイルを手に入れる
$ wget ftp://ftp.isc.org/isc/bind9/9.3.1/bind-9.3.1.tar.gz
 
- BIND本体を解凍する。
$tar -zxvf bind-9.3.1.tar.gz
 
- ビルド
ここから展開したソースディレクトリに移動してconfigureを実行します。
$ ./configure --prefix=/usr/local --sysconfdir=/etc --local-statedir=/var
これ終わったらビルド実行する
$ make
$ su (rootになってください)
$ make install
ここでは、DNSサーバは/usr/local/sbin/namedへ、DNSサーバの設定ファイルは/etc/named.confに、
pidファイルは/var/run/named.pidへ設定するように指定しています。BINDはシステムにあらかじめ
インストールされている場合は多いため、それと区別するために、/usr/local/sbinにインストール
を行うことにしました。
ゾーンファイルを置くためのディレクトリ/var/namedを作成しておきます。
$ mkdir /var/named
リモート管理行うための鍵を作成します。dnssec-keygenを利用して作成します。
$ cd /var/named
$ /usr/local/sbin/dnssec-keygen -a hmac-md5 -r /dev/urandom -b 512 -n HOST bind
これでBINDのインストールは完了です。 
設定
- BINDの設定ファイル
BINDの設定ファイルは2種類あります。ひとつはnamed.confと呼ばれるDNSサーバの動作を制御する設定
ファイルです。もうひとつがゾーンファイルと呼ばれるレコード(ドメイン名とIPアドレスを対応させる
データ)のファイルです。
named.confの例は以下のようです。この例はキャッシュサーバとして動作させる設定例です。
キャッシュサーバとして動作させるには、BINDの設定ファイルnamed.confとルートネームサーバ
のIPアドレスを記述したroot.cacheです。また、リモート管理するためのrndc.keyも作成しておきます。
まず、設定ファイルnamed.confを作成します。
#
# named.conf : NameServer COnfiguration file
# 
key "rndc-key" {
  algorith hmac-md5;
  secret "hhgdfsdsakfhksafdf0359870275fa08696ga096g78ga76g876ag0a6dg6a9g76a0s6gas9876ga";
};
options {
  directory "/var/named";
};
zone "." {
  type hint;
  file "root.cache";
};
keyセクションのsecret部分には、公開鍵(*.keyファイル)の"bind.IN KEY 512 3157"よりあとの部分
を記述します。
ファイル/etc/rndc.key
key "rndc-key" {
  algorithm hmac-md5;
  secret "hhgdfsdsakfhksafdf0359870275fa08696ga096g78ga76g876ag0a6dg6a9g76a0s6gas9876ga";
};
secretの部分には、秘密鍵(*.privateファイル)の"Key:"より後の部分をコピーして貼り付けて起きます。
 
- root.cacheの作成
ルートネームサーバのIPアドレスファイルを作成します。
$ cd /var/named
$ /usr/local/bin/dig @a.root-servers.net ns > root.cache
 
- BINDの起動
$ /usr/local/sbin/named
psコマンドで確かめてください。 
設定ファイルの例
- プライマリネームサーバの設定
named.confのサンプル
#
# named.conf : NameServer COnfiguration file
#
key "rndc-key" {
  algorith hmac-md5;
  secret "hhgdfsdsakfhksafdf0359870275fa08696ga096g78ga76g876ag0a6dg6a9g76a0s6gas9876ga";
};
	
# ローカルネットワークの設定(192.168.1.x, 127.0.0.1, 172.26.3.118)
acl local {
  192.168.1.0/24;
  127.0.0.1;
  172.26.3.118;
};
options {
  directory "/var/named"l
  pid-file "/var/named/run/named.pid";
  allow-query { any; };
  allow-transfer { local; };
};
view local {
  match-clients { local; };
  allow-query { local; };
  allpw^transfer { local; };
  recursion yes;
  zone "." {
    type hint;
    file "local/root.cache";
  };
  
  zone "1.168.192.in-addr.arpa" {
    type master;
    file "192.168.1.rev";
    };
    
  zone "0.0.127.in-addr.arpa" {
    type master;
    file "local/127.0.0.1.rev";
  };
  
  zone "arclocal.com" {
    type master;
    file "arclocal.com.zone";
  };
};
view external {
  match-clients { any; };
  allow-query { any; };
  allow-transfer { none; };
  recursion no;
  
  zone "arcexternal.com" {
    type master;
    file "arcexternal.com.zone";
  };
 };
 
- ゾーンファイルの例
$TTL 86400
$ORIGIN xxxx.com.
;-----------------------------------------------------------------------
; .xxxx.COM zone  /var/named/xxxx.trefft
;-----------------------------------------------------------------------
@       604800  IN SOA  ns1.domainname.com. root.ns1.domainname.com. (
                             2003122506      ; serial
                             86400           ; refresh every 1 day
                             3600            ; retry every hour
                             86400           ; expire in 30 days
                             86400 )         ; default TTL of 1 day
;-----------------------------------------------------------------------
; name server for the domain
;-----------------------------------------------------------------------
                               IN      NS      ns1.domainname.com.
                               IN      NS      ns2.domainname.com.
;-----------------------------------------------------------------------
; hosts in the domain
;-----------------------------------------------------------------------
@                              IN      A       xxx.xxx.xxx.xxx
www                            IN      A       xxx.xxx.xxx.xxx
mail                           IN      A       xxx.xxx.xxx.xxx
ftp                            IN      A       xxx.xxx.xxx.xxx
michel                         IN      CNAME   outside.aaa.org.
;-----------------------------------------------------------------------
; .xxxx.com. default MX
;-----------------------------------------------------------------------
@                              IN      MX      10      mail
mail                           IN      MX      10      mail
;-----------------------------------------------------------------------
 
- 逆引きゾーンファイルの例
;
;; Domain for reverse in DION gateway.
;; The IP addresses xxx.xxx.xxx.xxx/255.255.255.248
;
$TTL 86400
@       IN      SOA     rev-dnspri.akmalida.com. admin.akmalida.com. (
                               2004120108      ; serial number
                               10800           ; refresh
                               3600            ; retry
                               604800          ; expire
                               86400           ; ttl
                               )
;
        IN      NS      rev-dnspri.akmalida.com.
        IN      NS      rev-dnssec.akmalida.com.
        IN      NS      rev-dnsbkp.akmalida.com.
;
xxx     IN      PTR     abc.akmalida.com.
xxx     IN      PTR     def.akmalida.com.
xxx     IN      PTR     ghi.akmalida.com.
xxx     IN      PTR     jkl.akmalida.com.
;
 
- セカンダリネームサーバの設定(named.conf)
プライマリサーバのoptionsの中に、セカンダリサーバのIPアドレスを記述しなければならない
allow-transfer { xxx.xxx.xxx.xxx; xxx.xxx.xxx.xxx; };
でセカンダリー/スレーブサーバには各ゾーンおよび逆引きゾーンを記述します。
zone "dynamrc.org" {
  type slave;
  file "dynmarc.org.bkp.zone";
  masters { xxx.xxx.xxx.xxx; };
};
 
終わりに
BINDを起動するには、あらかじめ専用のユーザで起動したほうがセキュリティ的に安全なのです。
まずBINDユーザを作成する
$ /usr/sbin/groupadd -g 53 bind
$ /usr/sbin/useradd -u 53 -g bind -d /var/named -M -c "DNS pseudo user" -s /sbin/nologin bind
$ chown bind:bind /var/named
$ ln -s /var/named/run/named.pid /var/run/named.pid
これで動作確認してみるとよい。
$ /usr/local/sbin/named -u bind
これでbindというユーザでデーモンを起動します。
またnslookupの利用方法ですが
$ nslookup target-host dns-server
で
$ nslookup www.akmalida.com dns-pri.akmalida.com
でチェックできます。またタイプ指定も可能です。
$ nslookup -type=mx domainr.com dns1.dion.ne.jp
以上。