BINDを使用してDNSサーバーを構築するためには、まず以下3つの設定ファイルを編集する必要があります。

  • BIND自体の基本設定ファイル(named.conf)
  • 正引き用設定ファイル
  • 逆引き用設定ファイル

今回はBIND自体の基本設定ファイル(named.conf)の編集方法について見ていきます。

DNSサーバー配置概要

設定方法について見ていく前に、今回構築していくDNSサーバーの配置概要図を以下に示します。
DNSサーバー構築概要図

今回は、上図の「内部DNSサーバー」を構築します。ポイントとしては、内部DNSサーバーからインターネット上のDNSサーバーに対して、DNS問い合わせは可能となるようにしますが、インターネット上から内部DNSサーバーに対して、DNSの問い合わせはできない構成となるようにします。

named.conf

named.confはDNSサーバー(BIND)全体の基本になる設定ファイルです。DNSサーバー自体の設定の他、正引き用設定ファイルや逆引き用設定ファイルのパスなどを指定します。

まず一度、設定済みのnamed.confを見てみましょう。

# cat /etc/named.conf
options {
    directory    "/var/named";
    dump-file    "/var/named/data/cache_dump.db";
    statistics-file "/var/named/data/named_stats.txt";
    memstatistics-file "/var/named/data/named_mem_stats.txt";
    allow-query     { 127.0.0.1;
                      172.16.0.0/24;
     };
//  allow-transfer{
//         127.0.0.1;
//  };
    forwarders{
            172.16.0.254;
    };

};

logging {
    category lame-servers { null; };
};

zone "webtest01.com" IN {
    type master;
    file "webtest01.com";
    allow-update { none; };
};
zone "0.16.172.in-addr.arpa" IN {
    type master;
    file "webtest01.com.rev";
    allow-update { none; };
};

named.confでは、3つのステートメントで構成されます。

ステートメント 概要
opions BIND全体にかかわる設定項目を定義する。optionsステートメントで設定した一部内容はzoneステートメントにも反映される。
logging DNSサーバーのログ出力に関する設定項目を定義する。
zone ゾーンを宣言し、ゾーンファイルへのパスを設定する。また、そのゾーン固有の各種オプション設定(リカーションの可否、クエリーやゾーン転送の許可など)を設定する。

zoneステートメントでは複数のゾーンを定義できますが、各ゾーンで同じ設定となる項目は、opionsステートメントでまとめて設定することができます。それにより、同じ設定項目を各ゾーンごとに記述する必要がなくなります。(ゾーンとはDNSサーバーがドメインを管理する範囲のことです。厳密には違いますが、ここでは「1ゾーン=1ドメイン」と考えてください。)

opionsステートメント

設定項目はたくさんありますが、ここでは必要最低限な項目のみ見ていきます。

options {
    directory    "/var/named";
    dump-file    "/var/named/data/cache_dump.db";
    statistics-file "/var/named/data/named_stats.txt";
    memstatistics-file "/var/named/data/named_mem_stats.txt";
    allow-query     { 127.0.0.1;
                      172.16.0.0/24;
     };
//  allow-transfer{
//         127.0.0.1;
//  };
    forwarders{
            172.16.0.254;
    };

};
設定項目 概要
directory zoneステートメントの中に出てくる設定ファイルのディレクトリパスやnamedデーモンのワークディレクトリを指定。
dump-file キャッシュ内容を保存するファイルのパスを指定(rndcで利用)。
statistics-file rndcを使ってステータス情報を要求した際に統計情報が追記されるファイルのパスを指定。
memstatistics-file サーバー終了時にメモリ使用統計について出力するファイルのパスを指定(rndcで利用)。
allow-query DNSクエリ(問い合わせ)を許可するホストもしくはネットワークを指定。
allow-transfer ゾーン転送を許可するホストを指定(通常はセカンダリDNSサーバーを指定)。
forwarders 自身で解決できない問い合わせを転送するフォワーダーを指定。

DNSサーバーは通常、プライマリとセカンダリの2つ以上必要となります。これは、DNSがドメインや各ホストに関する情報を管理する基本的なサービスであり、常に動作していないといけないからです。複数のDNSサーバーは同じ内容を持っていなければいけません。情報を管理し更新するDNSサーバーをプライマリDNSサーバーと呼び、プライマリDNSサーバーの内容を自動的にコピーして情報を管理するDNSサーバーをセカンダリDNSサーバーと呼びます。「allow-transfer」にはセカンダリDNSサーバーを指定しますが、今回はサンプルであり、DNSサーバーを1台しか構築しないため、コメントアウトしておきます。(行頭に「//」と記述することでその行はコメントとなります。)

また、上記サンプルではフォワーダ機能を使用し、自身のDNSで解決できない問い合わせを「forwarders」に指定したDNSサーバーに転送するようにしています。通常、ルーターやプロバイダのDNSサーバーをフォワーダとして指定します。

loggingステートメント

BINDはこれまで数々の脆弱性が発見され、その度に緊急のアップデートを繰り返しています。シェアが群を抜いて高いこともあり、ハッカーにも狙われやすく、当たり前のことですがセキュリティに関しては高い意識を持つ必要があります。

loggingステートメントでは、ロギング機能の設定を行ないます。

BINDで適切なログを収集、監視し、攻撃の意思を持つアクセスを特定できるようにしておくことは管理者として必須な作業です。

と、大げさに前振りしましたが今回構築するDNSサーバーは(アドレス変換を行なう)ルーター配下に配置するため、外部からアクセスされることはありません。そのためここではロギングに関する設定は特に行ないません。

ただし、IPアドレスからホスト名を逆引きできなかった場合に出力される「lame server resolving …」というログを出力しないように「category lame-servers」をnullで指定します。

logging {
    category lame-servers { null; };
};

zoneステートメント

zoneステートメントではゾーンの宣言を行ないます。

ホスト名からIPアドレスを取得するための正引き用のゾーン設定を以下で行なっています。

zone "webtest01.com" IN {
    type master;
    file "webtest01.com";
    allow-update { none; };
};

webtest01.comドメインのためのゾーンを設定します。

設定項目 概要
type マスター/スレーブの関係を指定。プライマリDNSサーバーの場合は「master」、セカンダリDNSサーバーの場合は「slave」を指定。
file 正引き用設定ファイルのパスを指定。
allow-update ゾーン情報の更新を許可するホストもしくはネットワークを指定。

次にIPアドレスからホスト名を取得するための逆引き用のゾーン設定を行ないます。

zone "0.16.172.in-addr.arpa" IN {    //ネットワークアドレスを逆にした数値を入力
    type master;
    file "webtest01.com.rev";
    allow-update { none; };
};

設定項目は正引き用の内容と同じです。
決まりではありませんが、逆引き用設定ファイルの名前は正引き用設定ファイルの後ろに「.rev」を付加するのが慣習となっています。

以上でBIND自体の基本設定ファイル(named.conf)の編集は完了です。ただ、完了といってもあくまで基本的な部分のみの設定のみです。named.confには他にも様々な設定項目があり、非常に奥が深いです。一度に全て覚えようとせず、まずは動くものを構築するのが大切でしょう。

次回は正引き用設定ファイルの編集方法について見ていきます。