UnixPower on Networking
  http://www.unix-power.net/

 
 Top - Linux - CentOS BIND




■DNSサーバ BIND


CentOS6.4 ( 64bit ) を用いてDNSサーバ ( BIND ) を構築する方法を御紹介致します。まず、yumで必要なソフ トをインストールします。


# yum install bind bind-chroot
# rpm -qa | grep bind
bind-utils-9.8.2-0.17.rc1.el6_4.6.x86_64
bind-libs-9.8.2-0.17.rc1.el6_4.6.x86_64
bind-chroot-9.8.2-0.17.rc1.el6_4.6.x86_64
bind-9.8.2-0.17.rc1.el6_4.6.x86_64 

以前はcaching-nameserverというパッケージがありましたが、BIND9.7からこれは上記パッケージに含まれるようになりました。また、ファイルの配置自体は以前と同一なのですが、namedを起動していない状態では/var/named/chroot配下には何もファイルはない状態です。

おそらく仕様変更だと思いますが、bindが起動する際にモジュールを読み込み /var/named/chroot配下にファイルがマウントされるのだと思います。ですのでbindをrestartする際などは/var/named/chroot配下にいない状態でrestartをかけたほうが無難なように思います。以下はnamedを起動した状態でdfコマンドを実行した結果です。namedを起動していなければ下記は表示さ れません。

# df -ha

/etc/named 50G 3.3G 44G 7% /var/named/chroot/etc/named
/var/named 50G 3.3G 44G 7% /var/named/chroot/var/named
/etc/named.conf 50G 3.3G 44G 7% /var/named/chroot/etc/named.conf
/etc/named.rfc1912.zones
50G 3.3G 44G 7% /var/named/chroot/etc/named.rfc1912.zones
/etc/rndc.key 50G 3.3G 44G 7% /var/named/chroot/etc/rndc.key
/usr/lib/bind 50G 3.3G 44G 7% /var/named/chroot/usr/lib/bind
/etc/named.iscdlv.key
50G 3.3G 44G 7% /var/named/chroot/etc/named.iscdlv.key
/etc/named.root.key 50G 3.3G 44G 7% /var/named/chroot/etc/named.root.key


初期状態では色々と不要な設定が入っているので少し編集します。以下は編集部分のみ記載しております。まず、/etc/sysconfig/namedに以下のオプションを追記してIPv4のみ有効にします。

# vi /etc/sysconfig/named
OPTIONS="-4"


デフォルト状態でnamedを起動すると「automatic empty zone: XXXXXXX」という起動ログが多数出力されてうざったいのでempty-zones-enable no;を入れることで出力されなくなりました。また、listenポートが自分自身に限定される、IPv6のポートを無効にする、DNSSECを無効にするといった処理を上記で行なっています。


# vi /etc/named.conf

options {
# リッスンするIPアドレスを限定しない
#listen-on port 53 { 127.0.0.1; };
#listen-on-v6 port 53 { ::1; };

# 任意からのqueryに対応
allow-query { any; };

# DNS SECを無効にする
dnssec-enable no;
dnssec-validation no;

# automatic empty zone: XXXXXのログ出力を停止
empty-zones-enable no;
# IPv6のポートを開放しない
use-v6-udp-ports { };
}

logging {
# 不要なログを出力しない
category resolver { null; };
category database { null; };
category lame-servers { null; };
};


初期状態で用意されているゾーンファイルの中でIPv6に関する部分をコメントアウトしています。


# vi /etc/named.rfc1912.zones

#zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
# type master;
# file "named.loopback";
# allow-update { none; };
#};


ここまできたら一旦bindを起動させてみます。

# /etc/rc.d/init.d/named start
Generating /etc/rndc.key:


デフォルト状態ですと上記のようにGeneratingのところで止まったままになってしまいます。このままですとBINDが正常に起動しませんので以下のコマンドを実行して解消します。

# rndc-confgen -a -r /dev/urandom -t /var/named/chroot
wrote key file "/etc/rndc.key"
wrote key file "/var/named/chroot/etc/rndc.key"

# chwon named.named /etc/rndc.key


再度bindを起動させてみます。

# /etc/rc.d/init.d/named start
named を起動中:                                            [  OK  ]


正常に起動しました。


■正引きの設定


各組織で取得したドメイン名をDNSサーバに登録します。まず、named.confから追記します。

# vi /etc/named.conf

[ 以下の内容を追記する ]


zone "unix-power.local" {
# マスターサーバとして定義
type master;
# ゾーンファイル名を定義
file "unix-power.local.zone";
# ゾーン転送を許可するIPを定義
allow-transfer { xx.yy.xx.yy; };
# ゾーン情報を更新した際にそれを通知するIPを定義
notify yes;
also-notify {
xx.yy.xx.yy;
};
};


続いて上記で定義したゾーンファイル「unix-power.local.zone」を作成します。


# vi /var/named/chroot/var/named/unix-power.local.zone

[ 以下の内容で作成する ]


$TTL 1800
@ IN SOA ns1.unix-power.local. postmaster.ns1.unix-power.local. (
2012112100 ;Serial
10800 ;Refresh 3 hours
3600 ;Retry 1 hour
86400 ;Expire 1 day
3600 ) ;Minimum 24 hours

IN A 192.168.1.1
IN NS ns1.unix-power.local.
IN NS ns2.unix-power.local.


ns1.unix-power.local. IN A 192.168.1.1
ns2.unix-power.local. IN A 192.168.1.2
mail1.unix-power.local. IN A 192.168.1.1
mail2.unix-power.local. IN A 192.168.1.2

$INCLUDE sub/sub1
$INCLUDE sub/sub2
$INCLUDE sub/sub3

各レコードの意味を下記に示します。

$TTL ( DefaultCache ) 正引き逆引きに成功した情報をキャッシュする期間
MNAME ( ns1.unix-power.local ) ゾーンファイルの基となるデータを持つネームサーバの名前
RNAME ( postmaster.ns1.unix-power.local ) このドメインの管理者のメールアドレス。メールアドレスをそのまま書くのではなく、「@」記号を「.」に置き換えて記載
Serial ( 2012112100 ) ゾーンファイルのバージョンを表す数字。ゾーンファイルの更新時には必ず数字を上げなければいけない。
Refresh ( 10800 ) セカンダリネームサーバはゾーン転送をした後、この時間がたつとゾーンの更新がされたかを問い合わせ、必要に応じて再度データを手に入れようとする
Retry ( 3600 ) REFRESHでゾーン情報の更新ができなかった場合に、RETRYで指定された時間後に再度リフレッシュを試みる
Expire ( 86400 ) 何らかの理由でゾーン情報のリフレッシュができない状態が続いた場合、セカンダリネームサーバが持っているデータをどれだけの時間利用してもよいかを示す
Minimum ( NegativeCache )( 3600 ) ネガティブキャッシュとは存在しないドメイン名であるという情報のキャッシュを意味する(ネガティブキャッシュの維持する時間)

NSレコード、Aレコード等の説明は割愛します。

下のほうにINCLUDEというキーワードを指定して設定しております。これはこのファイル以外に指定したファイルの内容を取り込みますという指定で個人的にはサブドメインごとにファイルを分割するような場合に便利だと思われ ます。上記の例ではサブドメインとしてsub1, sub2, sub3を指定してそれぞれsubディレクトリ配下にそれぞれのファイルを定義しております。以下、sub1のファイルの内容です。


# cat /var/named/sub/sub1

$ORIGIN sub1.unix-power.local.
@ IN MX 0 mail1.unix-power.local.
IN MX 10 mail2.unix-power.local.

mail1 IN A 111.111.111.111
mail2 IN A 222.222.222.222

最初にORIGINというキーワードを使用してsub1.unix-power.localと指定しています。ORIGINを定義した後はその指定したドメイ ン名を省略することが可能であり、@と明記することが可能です。sub2およびsub3についても同様です。

■逆引きの設定

続いて逆引きの設定を行います。基本的な設定方法は正引きとほぼ同様です。

# vi /etc/named.conf

[ 以下の内容を追記する ]


zone "1.168.192.IN-ADDR.ARPA" {
type master;
file "unix-power.local.zone.rev";
allow-transfer { xx.yy.xx.yy; };
notify yes;
also-notify {
xx.yy.xx.yy;
};
};


続いて逆引きゾーンファイルを作成します。


# vi /var/named/xxyy.zone.rev

[ 以下の内容で作成する ]


$TTL 1800
@ IN SOA ns1.unix-power.local. postmaster.ns1.unix-power.local. (
2012112100 ;Serial
10800 ;Refresh 3 hours
3600 ;Retry 1 hour
86400 ;Expire 1 day
3600 ) ;Minimum 24 hours

IN A 192.168.1.1
IN NS ns1.unix-power.local.
IN NS ns2.unix-power.local.


1 IN PTR ns1.unix-power.local.
2 IN PTR ns2.unix-power.local.


■起動前のチェック


実際にBINDを起動する前にnamed.confやゾーンファイルが文法的に間違っていないかチェックすることが可能です。named.confのチェックの際には以下のコマンドで実行します。


# /usr/sbin/named-checkconf


何も出力がなければ文法的にOKです。間違いがあればその旨メッセージが表示されます。オプションとして以下があります。

オプション  説明 
-h  ヘルプを表示 
-t [directory]  指定したディレクトリをchrootとして設定 
-v  バージョンを表示 
-p  エラーがなければnamed.confとインクルードファイルの内容を表示 
-z  全てのマスターゾーンをロードしてみるテスト 
-j  ゾーンファイルを読み込むときにジャーナルファイルを読み込む 


続いてゾーンファイルのチェックを行います。

# /usr/sbin/named-checkzone "unix-power.local" unix-power.local.zone
zone unix-power.local/IN: loaded serial 2012112100
OK


OKであれば上記のように表示されます。エラーの場合はエラーメッセージが表示される。
最後に以下のようにしてnamedをスタートさせます。それにより/var/named/chroot以下にファイルがマウントされます。

# /etc/rc.d/init.d/named start

■動作確認コマンド

digコマンドにより動作確認を行います。

・正引きチェック
# dig @localhost www.yahoo.co.jp A
・逆引きチェック
# dig @localhost -x xx.yy.xx.yy
・MXチェック
# dig @localhost yahoo.co.jp MX
・DNSトレース
# dig @localhost www.yahoo.co.jp A +trace


 関連記事
 DNSSECの動作確認
 Copyright(C) 2003-2015 UnixPower on Networking All rights reserved.