強いBIND DNSサーバを構築する 第三回 基本的なゾーン設定


前回にひきつづき、キャッシュDNSサーバを前提にBIND9の設定を解説します。今回から、ゾーン定義を行います。今回は、localhost, ループバックインタフェイス、ブロードキャストアドレスなどの特殊なアドレスに関するゾーン定義です 

BIND9のゾーン定義の基礎

BIND9でのゾーン定義は、以下の2箇所で行います。

  • named.conf
    ゾーンを宣言し、ゾーンファイルへのパス、そのゾーン固有の各種オプション設定(例えば、クエリーやゾーン転送の許可など)を記述します。
  • ゾーンファイル
    所定の文法で、そのゾーンの情報を定義します。一般に、正引きゾーンでは、ホスト名とIPアドレスのペアやそのドメインのメールサーバなどを定義します。逆引きゾーンは、IPアドレスをホスト名に変換するための定義を記述します。

ルートゾーン

DNSの名前空間は木構造になっており、その一番大元の根っこは「.(ドット)]です(ゾーンファイルの記述で、FQDNの最後に「.」をつけるのを忘れ誤動作した経験は誰でもあるはずです。「.」が必要なのは、これが根っこだからです)。

「根っこ」の管理をしているDNSサーバはルートサーバと呼ばれています。ルートゾーンの定義は、リカーションを許可してキャッシュサーバとして利用する場合にのみ必要となります。リカーションを許可しない場合は不要です。

以下は、前回作り始めたnamed.confに記載する宣言部です。

zone “.” IN {
        type hint;
        file “named.root”;
        allow-update { none; };
};

ルートゾーンの定義を改竄されると致命的ですので、明示的に「allow-update { none; };」で、アップデートを禁止しておきます(named.confのoptions部の定義で同じ設定がしてあれば省略可能ですが、念のため)。

 次に、named.confの宣言部で指定したファイル名「named.root」にて、ゾーン定義ファイルを作成します。

 ルートサーバは時々変更されます、ですからルートゾーンの定義内容は、本来、INTERNICが公開している最新のものを使用するべきです。既成のものを何年も流用していると思わぬトラブルを招くこともあります。

ルートゾーンのゾーンファイルは、以下のリンク(INTERNICのFTPサーバ)からダウンロードできます。

ftp://ftp.rs.internic.net/domain/named.root

named.rootファイルの置き場所は、私たちの例では、/var/named直下となります(前回、つくりはじめたnamed.confの「directory  “/var/named”」宣言によるもの)。

 

ローカルゾーン、エンプティゾーン

DNS名やIPアドレスには、グローバルなDNS参照をしても意味がない、あるいは害になるものがあります。グローバルなDNS参照を発生させないために、キャッシュDNSサーバ(リカーションを許可するDNSサーバ)では、これらのゾーンを定義しておく必要があります。これらの特殊なアドレスの例は以下のとおりです。

  • localhost, localdomain
  • ループバックアドレス(例:127.0.0.1)
  • ブロードキャストアドレス(例:255.255.255.255, 0.0.0.0)
  • プライベートネットワーク(例:192.168.xx, 172.16.xx)

このようなアドレスは、RFC1918, RFC3330に定義され、多数ありますが、DNSサーバのゾーン定義としては以下の設定例で定義したもので実用上十分です。

name.confのゾーン宣言

まず、これらの特殊なゾーンの宣言をnamed.confに追加します。

  • localhost
    localhostを定義する正引きゾーン
  • localhost.localdomain
    localhostのFQDNを定義する正引きゾーン
  • 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
    IPv6のループバックアドレスを定義する逆引きゾーン。
  • 127.in-addr.arpa
    IPv4のループバックアドレス127.0.0.1を定義する逆引きゾーン。
  • 0.in-addr.arpa.
    0.x.x.xに合致する逆引きゾーン(「(大昔の)Sun OSでは0.0.0.0がブロードキャストアドレスだった」とウチの社長が感慨深げに言ってます)。
  • 255.in-addr.arpa.
    255.x.x.xに合致する逆引きゾーン。ブロードキャストアドレスのためのものです。

zone “localhost.localdomain” IN {
        type master;
        file “zones_common/named.localhost”;
        allow-update { none; };
};
zone “localhost” IN {
        type master;
        file “zones_common/named.localhost”;
        allow-update { none; };
};
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 “zones_common/named.loopback”;
        allow-update { none; };
};
zone “1.0.0.127.in-addr.arpa” IN {
        type master;
        file “zones_common/named.loopback”;
        allow-update { none; };
};
zone “0.in-addr.arpa” IN {
        type master;
        file “zones_common/named.empty”;
        allow-update { none; };
};
zone “255.in-addr.arpa” IN {
        type master;
        file “zones_common/named.empty”;
        allow-update { none; };
};

多数のゾーン定義が加わるとnamed.confはどんどん長くなり、読みにくくなります。named.confでは、include <ファイル名>の書式で、他のファイルの内容を挿入することができます。上記の基本的なゾーン宣言はDNSサーバを設定する際によく使いますので、専用のファイル(例: named.common.zones等、任意のファイル名)にその設定をまとめ、include文で読み込むようにしておけば、named.conf本体の行数が大幅に減り、見やすくなります。Fedora LinuxのBIND設定でも、この方法が採用されています(namedrfc1912.zones)。include文は、named.confファイルの内容の整理に便利です。今回他でも多用します。

上記の設定をファイル(例: /etc/named.special.zones)にしたら、named.confで以下のようにincludeします。

acl  “internalnet “{ 192.168.0.0/16;  };
options {
      version “unknown”;
      hostname “somehost.some.domain”;
      directory “/var/named/”; 
[省略]
     //
      recursion yes;
      allow-recursion {  localnets;  localhost; internalnet; };
};
zone “.” IN {
      type hint;
      file “named.root”;
      allow-update { none; };
};
include “/etc/named.special.zones”;

ゾーンファイル

各ゾーン定義ファイルの内容は以下のとおりです。localhostとループバックアドレスについては、IPv4, IPv6で共用しています。

named.localhost

$TTL 1D
@       IN SOA  @ rname.invalid. (
      0       ; serial
     1D      ; refresh
     1H      ; retry
     1W      ; expire
     3H )    ; minimum
     IN     NS      @
     IN     A       127.0.0.1
     IN     AAAA    ::1

named.loopback

$TTL 1D
@       IN SOA  @ rname.invalid. (
        0       ; serial
       1D      ; refresh
        1H      ; retry
        1W      ; expire
        3H )    ; minimum
        IN  NS      @
        IN  PTR     localhost.

named.empty

$TTL 1D
@       IN SOA  @ rname.invalid. (
             0       ; serial
             1D      ; refresh
              1H      ; retry
              1W      ; expire
              3H )    ; minimum
        IN  NS      @

この例にない、RFC1918、RFC3330に定義された特殊なアドレスについてグローバル参照が発生するなどの不都合が発生した場合、対応するゾーン宣言をnamed.confまたは、この例のnamed.special.zonesに追加して、ゾーン定義ファイルにnamed.emptyを使い、エンプティゾーンとして定義してしまえば、グローバル参照から除外することができます。

 次回から、一般的なドメイン(ゾーン)、ホスト等の定義を行います。

2010年6月27日 | カテゴリー : DNS, BIND | 投稿者 : eurotec