8.9. その他のステートメント

基本的な /etc/named.conf の設定例については既に解説しましたが、ここでは、アクセス制御に関するステートメントや BIND9 で新たに実装された view ステートメントなど、その他の代表的なステートメントについて解説します。

8.9.1. acl

acl ステートメントでは、アクセス制御リストを定義します。例えば次のように定義します。

acl localnet {
  192.168.0.0/24;
  127.0.0.1;
};

このように定義された acl名 localnet はアクセス制御の設定をする場合などに他のステートメントで利用されます。また、以下にあげるいくつかのアクセス制御リストはあらかじめ定義されており、そのまま使用することができますので、acl ステートメントでこれらを定義する必要はありません。

表 8-5. BIND - named.conf の acl ステートメント

anyすべての IP アドレスと一致。
localhostローカルシステムによって使用されている IP アドレス(127.0.0.1)と一致。
localnetsローカルシステムがそのインターフェイスで接続するネットワークのIPアドレスと一致。
noneどの IP アドレスとも一致しない。

8.9.2. options

options ステートメントは /etc/named.conf 内に 1 つだけ指定でき、この DNS サーバーにおけるグローバルオプションを設定します。ここでの設定は、その他のステートメントにおける初期値となります。options ステートメントには非常に多くのサブステートメントを定義することができますが、ここでは特に重要と思われる代表的なサブステートメントを紹介します。

optionステートメント内に定義できる代表的なサブステートメントの書式は次の通りです([ ]は省略可能を意味します)。

options {
 [ directory path_name; ]
 [ dump-file path_name; ]
 [ statistics-file path_name; ]
 [ memstatistics-file path_name; ] 
 [ allow-query { address_match_list }; ]
 [ listen-on [port ip_port] { address_match_list }; ]
 [ notify yes|no; ]
 [ recursion yes|no; ]

};

上記のように

options {
  ...
};

で括られた箇所にサブステートメントを列挙していきます。

directory

ゾーンファイルを格納するディレクトリを指定します。

dump-file

SIGINT シグナルを受け取った際のダンプファイルの出力先パスを指定します。

statistics-file

SIGILL シグナルを受け取った際の統計を追加出力するパスを指定します。

memstatistics-file

deallocate-on-exit が yes になっている場合、サーバー終了時にメモリ使用の統計を出力するパス名を指定します。

allow-query

DNS サーバーへの問い合わせ要求に答えるホストを指定します。allow-query の既定値は any です。つまり、すべてのホストからの問い合わせを許可していますので必要に応じて要求に答えるホストを限定してください。アクセス制御リスト、IP アドレス、またはネットワークアドレスを指定することで、特定のホストだけに DNS サーバーへの問い合わせを許可することができます。

下記は、acl ステートメントで定義した acl 名 localnet のアクセス制御リストを指定した例です。

options {
    allow-query { localnet; };
};

また、allow-query サブステートメントは、zone ステートメントでも指定することができます。その場合、ここでの設定は上書きされます。

allow_transfer

allow-transfer サブステートメントは、この DNS サーバーがゾーン転送の要求に答える相手を限定します。ここで指定したアドレスリストを発信元アドレスとして持つ相手からの要求は許可されます。allow-query サブステートメントと同様にアドレスリストを指定できます。

allow-transfer のデフォルト値は any です。つまり、全てのゾーン転送要求に答えてしまいますので必要に応じて、ゾーン転送を許可するホストを限定してください。下記は、192.168.1.3 と localhost からのゾーン転送要求のみ許可するように設定した例です。

allow-transfer { 192.168.1.3; localhost; };

また、allow-trasfer サブステートメントは、zone ステートメントでも指定することができます。その場合、ここでの設定は上書きされます。

listen-on

DNS サーバーが問い合わせがあるかどうかを検査するインターフェース、およびポート番号を指定することができます。DNS サーバーは、アドレスリストで許可されたインターフェース全てで待機します。ポート番号を指定しない場合は、53 番ポートが使われます。よって、listen-on が指定されていない場合、サーバーは、すべてのインターフェースの53番ポートで待機します。

これは、ゲートウェイにおいて named を起動するコンピュータで複数のネットワークインターフェースが存在する場合に、DNS サーバーへの問い合わせを許可するクライアントを制限したい場合などに便利です。例えば、プライベートネットワークからの問い合わせ以外を拒否するには、listen-on サブステートメントに次のような定義を追加します(プライベートネットワークに接続されるネットワークカードの IP アドレスが 192.168.0.1 の場合)。

options {
  listen-on { 192.168.0.1; };
};
notify

yes である場合、プライマリネームサーバーのゾーンファイルが更新された場合、セカンダリネームサーバーに更新されたことを通知するメッセージを送信するかどうかを指定します。既定値は yes です。このメッセージを受け取ったセカンダリネームサーバーはプライマリネームサーバーに接続し、ゾーン転送を開始します。 また、notify サブステートメントは zone ステートメント内でも指定できます。その場合は、ここでの設定は上書きされます。

recursion

yes である場合、再帰問い合わせを許可、no である場合、不許可に設定します。

8.9.3. zone

すでに述べたように、zone ステートメントではこの DNS サーバーが権限を持つゾーン定義を設定します。zone ステートメントには非常に多くのサブステートメントを定義することができますが、ここではいくつかの代表的なサブステートメントを解説します。

代表的なサブステートメントの書式は次の通りです([ ]は省略可能を意味します)。

zone domain_name {
  type master;
  file path_name;
  [ allow-query { address_match_list }; ]
  [ allow-transfer { address_match_list }; ]
  [ notify yes|no; ]
};

zone domain_name {
  type slave;
  [ file path_name; ]
  masters [ port ip_port ] { ip_addr; [ ip_addr; ... ] };
  [ allow-query { address_match_list }; ]
  [ allow-transfer { address_match_list }; ]
  [ notify yes|no; ]
};

type

ゾーンのタイプを指定します。すでに述べたように以下のタイプが存在します。

表 8-6. BIND - named.confのzoneのtype

hintルートネームサーバーを指定するのに使用される特別なゾーンのタイプです。
masterこの DNS サーバーがプライマリネームサーバーとして権限を持つゾーン定義を行うことを表すタイプです。
slaveこの DNS サーバーがプライマリネームサーバーの複製(セカンダリネームサーバー)であることを表すタイプです。この場合には、プライマリネームサーバーからこのゾーンのファイルが転送されるように定義します。
masters

masters サブステートメントには、ゾーン情報の転送を要求するためにプライマリネームサーバーの IP アドレスを指定します。ゾーンタイプが slave として定義されている場合のみ指定可能です。

file

ゾーンファイルのファイル名を指定します。Turbolinux 11 Server の初期設定では /var/named ディレクトリ以下にゾーンファイルが格納されます。

allow-query

options ステートメントにおける allow-query と同じです。

allow-transfer

options ステートメントにおける allow-transfer と同じです。

notify

options ステートメントにおける notify と同じです。

8.9.4. view

BIND9 で新たに実装された便利な機能の 1 つに、view ステートメントの存在が挙げられます。view ステートメントは、参照元の IP アドレスによって、異なる名前解決を行う機能を提供します。以前は、外向け DNS サーバーと内向け DNS サーバーを構築するには、異なるコンピュータを用意して named を稼動させたり、1 つのシステムで 2 つの nemed を起動させるなどする必要がありました。しかし、view ステートメントを利用すれば、1 つの named を起動するだけで対処させることができます。

以下は、view ステートメントを利用した /etc/named.conf の設定例です。

acl localnet {
	192.168.0.0/24;
	127.0.0.1;
};

options {
	directory "/var/named";
	allow-transfer { localnet; };
	allow-query { localnet; };
};

view "internal" {
	match-clients { localnet; };
	recursion yes;

	zone "." {
		type hint;
		file "named.ca";
	};

	zone "turbolinux.co.jp" {
		type master;
		file "turbolinux.co.jp.internal";
	};

	zone "0.0.127.in-addr.arpa" {
		type master;
		file "named.local";
	};

	zone "0.168.192.in-addr.arpa" {
		type master;
		file "0.168.192.in-addr.arpa";
	};
};

view "external" {
	match-clients { any; };
	allow-query { any; };
	recursion no;

	zone "turbolinux.co.jp" {
		type master;
		file "turbolinux.co.jp.external";
		allow-transfer { localnet; aaa.bbb.ccc.ddd; };
	};

view 機能を使用した /etc/named.conf の特徴的な設定は、先頭の acl ステートメントと、2 つの view ステートメントの存在です。

acl ステートメントでは、プライベートアドレスを持つホストとマッチするアドレスリスト localnet を定義しています。ここで定義したアドレスリストは、internal と定義された view ステートメントの match-clients サブステートメントで使用されています。view ステートメントの名前は任意に定義することが可能です。これにより、localnet で定義された IP アドレスを参照元 IP アドレスとするクライアントからの要求は internal の view ステートメントにより処理されます。つまり、LAN 上に存在するクライアントからの問い合わせには答えますが、外部からの問い合わせには答えません。

次に、external と定義された view ステートメントの match-clients および allow-query サブステートメントには any が指定されています。これらのサブステートメントは options ステートメントにおいても標準設定として定義されていますが、view ステートメントにも記述することができます。その場合には、options ステートメントでの記述は無効となり上書きされます。つまり、ここでは、いかなるクライアントからの問い合わせにも応答するように設定が上書きされています。こちらの view ステートメントは、インターネット上に公開するサーバーの名前解決のために動作します。なお、allow-transfer サブステートメントでは、ゾーン転送を許可するセカンダリネームサーバー(グローバル IP アドレスが aaa.bbb.ccc.ddd のホスト)を指定しています。

このように、view ステートメントを利用することで、取得したドメイン名を外部と内部とに分けて利用することができるようになります。turbolinux.co.jp のゾーンファイルの定義が 2 つ存在するのはこのためです。