権威DNSサーバーにおける設定の基本を教えてください(BIND編)DNS Tips

BIND 9.8系を例にとり、Linux(RHEL 6、CentOS 6)上における権威DNSサーバーのインストール、環境設定とゾーンの設定方法を解説する。

» 2015年04月13日 05時00分 公開

 権威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のインストール

 以下のようにコマンドを実行し、BINDをインストールする。

# /usr/bin/yum install bind

 bind-utils(注1)が入っていない場合は、同時にインストールしておくとよい。

注1:digコマンドやhostコマンドが入っているパッケージ。


 次に、ゾーンファイルの設定方法を説明する。BIND 9におけるDNSサーバーの設定ファイルは「named.conf」であり、上記方法でインストールした場合/etcディレクトリ配下に置かれる。

named.confの設定

 環境設定ファイルである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" ; // ゾーンファイル名を指定する

         };

リスト1 named.confの設定例(“//”から行末までコメント扱いとなる。また、“#”からの行末までと“/*”と“*/”で挟まれたテキストもコメント扱いとなる)

ゾーンファイルの設定

 ゾーンファイルには、リスト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

リスト2 ゾーンファイルの設定例

rndcコマンドのための設定

 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へ接続する

};

リスト3 rndc.confに記述する内容例

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"と同じ内容が記述されている

リスト4 named.confに追加する内容例

 設定ファイルを準備できたら、named-checkconfコマンドとnamed-checkzoneコマンドで記述にミスがないことを確認する。

named.confの設定確認

 以下のように、named-checkconfコマンドを引数なしで実行し、/etc/named.confの内容を確認する。

$ /usr/sbin/named-checkconf

ゾーンファイルの設定確認

named-checkzoneコマンドを用い以下のように実行し、ゾーンファイルの内容を確認する。

$ /usr/sbin/named-checkzone <ゾーン名> <ファイル名>

BIND 9を起動する

 起動は、以下のコマンドで実行できる。

# /sbin/service named start

 BINDを起動したら、digコマンドなどで設定した内容が反映されていることを確認する。このときの応答に、AAビットがセットされている(flagsにaaが含まれる)ことに注目。

namedの動作確認

 以下のように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

リスト5 digコマンドの実行例

春名 光一(はるな こういち)

所属:株式会社日本レジストリサービス(JPRS) システム部

学生時代に、学内ネットワークの管理のサポートなどを行う。2006年にJPRS入社。データベースを中心にレジストリシステムや社内ネットワークの構築、運用に従事。

著書・執筆:2009年〜2010年「月刊ASCII.technologies」(アスキーメディアワークス)の連載記事「正しく学ぶDNS」の一部執筆を担当。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。