CentOS6 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

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする