BIND 9.8系を例にとり、Linux(RHEL 6、CentOS 6)上における権威DNSサーバーのインストール、環境設定とゾーンの設定方法を解説する。
権威DNSサーバーにおける設定の基本は、DNSサーバーそのものの設定とゾーンファイルの設定の2つにある。
そのポイントには、例えば再帰検索要求を無効にするかどうか、どこからの接続を許可するかなどがある。設定を誤ると、場合によってはオープンリゾルバーなど好ましくない状態になってしまうため、設定内容には注意が必要だ。
ゾーンファイルは、権威DNSサーバーが管理するゾーンの情報を記述するファイルである。ゾーンファイルに誤った内容が記述されていると、その内容がそのまま公開されてしまうことになるため、こちらについても十分な注意が必要だ。
ここでは、Linux(RHEL 6、CentOS 6)上における権威DNSサーバーの構成方法を、権威DNSサーバーの実装としてBIND 9.8系を例にとり、インストール、環境設定とゾーンの設定までを説明する。
BIND 9は、ISCが開発したDNSソフトウェアの実装である。ここでは、権威DNSサーバーとキャッシュDNSサーバーの機能を分離することを前提とし、権威DNSサーバーとしてのみ動作させる手順で説明する。
設定に当たっての前提は以下の通りである。
1. 管理対象とするゾーン(ドメイン名)は、「example.jp」
2. 権威DNSサーバーとWebサーバーを設置する
ホスト名とIPアドレスは以下とする。
権威DNSサーバー:ns1.example.jp→192.0.2.10
Webサーバー :www.example.jp→192.0.2.80
3. 正引きのみを設定し、逆引きは設定しない
4. キャッシュDNSサーバーの機能は無効にする
5. ゾーン転送の設定はしない
BIND 9のインストールは、yumコマンドで実行できる。
以下のようにコマンドを実行し、BINDをインストールする。
# /usr/bin/yum install bind
bind-utils(注1)が入っていない場合は、同時にインストールしておくとよい。
注1:digコマンドやhostコマンドが入っているパッケージ。
次に、ゾーンファイルの設定方法を説明する。BIND 9におけるDNSサーバーの設定ファイルは「named.conf」であり、上記方法でインストールした場合/etcディレクトリ配下に置かれる。
環境設定ファイルであるnamed.confには、リスト1で示すような設定を記述する。
options {
directory "/var/named" ; // ゾーンファイルの配置場所を設定する。相対パスで記述したときはここが基点となる
recursion no ; // キャッシュDNSサーバー/再帰検索要求の受け付けを無効にする
pid-file "/var/run/named/named.pid" ; // PIDファイルの指定
allow-transfer { none; } ; // ゾーン転送を許可しない
};
zone "example.jp" {
type master ;
file "example.jp.zone" ; // ゾーンファイル名を指定する
};
ゾーンファイルには、リスト2のような形で管理対象とするゾーンの情報を記述する。“;”以降は、行末までコメント扱いとなる。
$ORIGIN example.jp. ; 設定するドメイン名を指定
$TTL 86400 ; デフォルトのTTLを1日にする(“1D”のようにも記述可能)
@ IN SOA ns1.example.jp. postmaster.example.jp. (
2014120901 ; Serial, YYYYMMDDNN
3600 ; Refresh
900 ; Retry
1814400 ; Expire
900 ) ; Minimum
IN NS ns1.example.jp.
ns1 IN A 192.0.2.10
www IN A 192.0.2.80
BIND 9をローカルやリモートから管理するためのツールとして、rndcコマンドがある。その設定も併せて行う。rndcコマンドを利用するためには通信路の暗号化と認証のため、共有鍵の作成および設定の追加が必要になる。
・共有鍵の作成と設定の追加
以下のように、コマンドを実行する。
# /usr/sbin/rndc-confgen -a
これにより、共有鍵の情報が/etc/rndc.keyに出力される。また、画面にrndc.confファイルとnamed.confファイルに記述すべき内容が出力される。設定ミスを防止するため、実際の設定の際には、この内容をコピー&ペーストするとよい。リスト3にrndc.confファイルに記述する内容例を、リスト4にnamed.confファイルに追加する内容例を示す。
key "rndc-key" {
algorithm hmac-md5;
secret "Eq+S5RgOZB9CfZAOpfYJJQ=="; // 共有鍵は出力例であり、実際に利用しないこと
};
options {
default-key "rndc-key"; // rndc利用時に使うkeyで指定した名前を書く
default-server 127.0.0.1; // ローカルホストへ接続する
default-port 953; // port 953へ接続する
};
controls {
inet 127.0.0.1 port 953 // ローカルホストのport 953で待ち受ける
allow { 127.0.0.1; } keys { "rndc-key"; }; // "rndc-key"を利用したローカルホストの接続のみを許可
};
include "/etc/rndc.key"; // rndcが利用する鍵の情報を読み込む。rndc.confのkey "rndc-key"と同じ内容が記述されている
設定ファイルを準備できたら、named-checkconfコマンドとnamed-checkzoneコマンドで記述にミスがないことを確認する。
以下のように、named-checkconfコマンドを引数なしで実行し、/etc/named.confの内容を確認する。
$ /usr/sbin/named-checkconf
named-checkzoneコマンドを用い以下のように実行し、ゾーンファイルの内容を確認する。
$ /usr/sbin/named-checkzone <ゾーン名> <ファイル名>
起動は、以下のコマンドで実行できる。
# /sbin/service named start
BINDを起動したら、digコマンドなどで設定した内容が反映されていることを確認する。このときの応答に、AAビットがセットされている(flagsにaaが含まれる)ことに注目。
以下のようにdigコマンドなどを使い、設定が正しく行われているかを確認する。
$ /usr/bin/dig @localhost example.jp soa +norec
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6_6.1 <<>> @localhost example.jp soa +norec
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33328
;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;example.jp. IN SOA
;; ANSWER SECTION:
example.jp. 86400 IN SOA ns1.example.jp. postmaster.example.jp. 2014120901 3600 900 1814400 900
;; AUTHORITY SECTION:
example.jp. 86400 IN NS ns1.example.jp.
;; ADDITIONAL SECTION:
ns1.example.jp. 86400 IN A 192.0.2.10
;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: Thu Dec 25 18:56:00 2014
;; MSG SIZE rcvd: 109
$ /usr/bin/dig @localhost www.example.jp +norec
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6_6.1 <<>> @localhost www.example.jp +norec
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46130
;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;www.example.jp. IN A
;; ANSWER SECTION:
www.example.jp. 86400 IN A 192.0.2.80
;; AUTHORITY SECTION:
example.jp. 86400 IN NS ns1.example.jp.
;; ADDITIONAL SECTION:
ns1.example.jp. 86400 IN A 192.0.2.10
;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: Thu Dec 25 18:56:29 2014
;; MSG SIZE rcvd: 82
Copyright © ITmedia, Inc. All Rights Reserved.