ゾーン定義を行います。今回は、localhost, ループバックインタフェイス、ブロードキャストアドレスなどの特殊なアドレスに関するゾーン定義です
Contents
BIND9のゾーン定義の基礎
BIND9でのゾーン定義は、以下の2箇所で行います。
- named.conf
ゾーンを宣言し、ゾーンファイルへのパス、そのゾーン固有の各種オプション設定(例えば、クエリーやゾーン転送の許可など)を記述します。 - ゾーンファイル
所定の文法で、そのゾーンの情報を定義します。一般に、正引きゾーンでは、ホスト名とIPアドレスのペアやそのドメインのメールサーバなどを定義します。逆引きゾーンは、IPアドレスをホスト名に変換するための定義を記述します。
ルートゾーン
DNSの名前空間は木構造になっており、その一番大元の根っこは「.(ドット)]です(ゾーンファイルの記述で、FQDNの最後に「.」をつけるのを忘れ誤動作した経験は誰でもあるはずです。「.」が必要なのは、これが根っこだからです)。
「根っこ」の管理をしているDNSサーバはルートサーバと呼ばれています。ルートゾーンの定義は、リカーションを許可してキャッシュサーバとして利用する場合にのみ必要となります。リカーションを許可しない場合は不要です。
以下は、named.confに記載する宣言部です。
1 2 3 4 5 |
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に合致する逆引きゾーン。ブロードキャストアドレスのためのものです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
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します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
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
1 2 3 4 5 6 7 8 9 10 |
$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
1 2 3 4 5 6 7 8 9 |
$TTL 1D @ IN SOA @ rname.invalid. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum IN NS @ IN PTR localhost. |
named.empty
1 2 3 4 5 6 7 8 |
$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を使 い、エンプティゾーンとして定義してしまえば、グローバル参照から除外することができます。