連載
» 2003年01月25日 00時00分 公開

実用 BIND 9で作るDNSサーバ(2):すべての基礎、マスター・ゾーンサーバの設定 (2/3)

[鶴長鎮一,@IT]

ゾーンファイルの作成

 次に、/var/named下に/etc/named.confで記述したすべてのゾーンファイルを作成します。

named.ca

 キャッシュサーバとして動作するためには、ルートサーバがどこにあるのかを正しく知っておく必要があります。そのためのゾーンファイルをftp://ftp.rs.internic.net/domain/named.rootから入手し、/var/named/named.caとして保存します。

 ルートサーバは不変であると思われがちですが、頻繁でないにしろ更新されることがあります。2002年11月にはDoS攻撃への対策から、5年ぶりにルートサーバに変更が加えられました。BINDはnamed起動時にルートサーバに接続し、自動的に最新のルートサーバ一覧情報に置き換えますが、たまには最新のファイルが公開されていないか確認しましょう。

example.zone

 example.zoneは、自身で管理しているドメインの正引き用ゾーンファイルになります。ここは皆さんの環境に合わせて修正を加えてください。

$TTL 86400 (1)
@            IN      SOA dns.example.jp. root.example.jp. ( (2)
                     2002122001 ; serial (3)
                     3600       ; refresh 1hr (3)
                     900        ; retry 15min (3)
                     604800     ; expire 1w (3)
                     86400      ; min 24hr (3)
) (4)
             IN      NS     dns.example.jp. (5)
dns          IN      A      192.168.10.1 (6)
pc1          IN      A      192.168.10.11
pc2          IN      A      192.168.10.12
pc3          IN      A      192.168.10.13
pc4          IN      A      192.168.10.14
pc5          IN      A      192.168.10.15
(以下省略)
/var/named/example.zone

(1) TTLに86400秒(1日)を指定
(2) ここからSOAレコード
(3) これらの値はマスター・ゾーンサーバとスレーブ・ゾーンサーバ間でやりとりする際に使用される。次回以降に説明
(4) ここまでがSOAレコード
(5) NSレコード
(6) Aレコード

 example.zoneには、SOA、NS、Aなどの「レコード」と呼ばれる記述が見られます。それぞれのレコードには「主なDNSレコードの種類」のような意味があります。

 ここで、1行目に記述されている「$TTL」に注目します。TTLは、外部のDNSがあなたのドメイン情報を参照してキャッシュする際に、どれくらいの期間情報を保持するかを指定するものです。しかし、2行目から始まるSOAレコードと呼ばれるブロックにもTTLの記述があります。一見無駄な設定のように思えるかもしれませんが、大変重要な意味を持っています。これについては、後述の「TTLとネガティブキャッシュ」を参照してください。

 次に、SOAレコードの先頭行を見てみましょう。

@            IN      SOA dns.example.jp. root.example.jp. (......)

 「dns.example.jp.」はプライマリゾーンサーバ名、「root.example.jp.」はドメイン管理者のメールアドレスです。適宜自分の環境に合わせて置き換えてください。その際、メールアドレス中の「@」を「.」に置き換えることと、最後に「.」を付けることに注意しましょう。なお、管理者の情報はRP(Responsible Person)情報として公開されます。

example.rev

 example.revは逆引き用ゾーンファイルです。IPアドレスに対するホスト名を記述する際は、PTRレコードを用います。

$TTL 86400
@            IN      SOA    dns.example.jp. root.example.jp.  (
                     2002122001      ; Serial
                     3600            ; Refresh
                     900             ; Retry
                     604800          ; Expire
                     3600 )          ; Minimum
             IN      NS    dns.example.jp.
1            IN      PTR   dns.example.jp.
11           IN      PTR   pc1.example.jp.
12           IN      PTR   pc2.example.jp.
13           IN      PTR   pc3.example.jp.
14           IN      PTR   pc4.example.jp.
15           IN      PTR   pc5.example.jp.
(以下略)
/var/named/example.rev

local.zone

 local.zoneはループバックアドレスの名前解決に使用します。具体的には、localhost→127.0.0.1正引き情報を提供します。一度設定すれば、以降は変更する必要はありません。local.zoneのTTLは長めに設定しても構いません。

$TTL 86400
@               IN      SOA     localhost.      root.localhost. (
  2002122001 ; serial
  28800  ; refresh 8hr
  14400  ; retry 4hr
  604800 ; expire 1w
  86400  ; default_ttl 24hr
)

              IN      NS      localhost.
              IN      A       127.0.0.1
/var/named/local.zone

local.rev

 local.revは、ループバックアドレスの逆引き用に使用されます(127.0.0.1→localhost)。これも一度設定してしまえば、ほとんど修正を加えることがありません。

$TTL 86400
@               IN      SOA     localhost.      root.localhost. (
  2002122001 ; serial
  28800  ; refresh 8hr
  14400  ; retry 4hr
  604800 ; expire 1w
  86400  ; default_ttl 24hr
)

              IN      NS      localhost.
1             IN      PTR     localhost.
/var/named/local.rev

/var/run/named/named.pid

 最後に、/var/run/named/named.pidが作成されるように、/var/run/namedディレクトリをnamedユーザー/namedグループで作成します。

# mkdir /var/run/named/
# chown named.named /var/run/named/

 カーネル2.4.xを採用している環境であれば/var/run/named.pidを作ることが可能ですが、カーネル2.2.x環境ではnamedデーモンをnamedユーザーで起動すると/var/run直下にpidファイルを作れずエラーとなります。ここでは、どちらの環境でもうまくいくように/var/run/named/named.pidとしています。

TTLとネガティブキャッシュ

 TTLはデフォルトのキャッシュ有効期限(Time To Live:TTL)を指定するものですが、SOAレコードの中にもTTLの値を見つけることができます。これを理解するには、キャッシュの機能を理解しておく必要があります。

 通常、キャッシュサーバはDNS問い合わせに成功したもの、すなわち「www.atmarkit.co.jp→211.4.250.170(または211.4.250.170→www.atmarkit.co.jp)」の結果をー時的に蓄えます。その一方で、「dummy.atmarkit.co.jp→NXDOMAIN(ドメインが存在しない)」といった、失敗した結果をキャッシュする「ネガティブキャッシュ」も併せ持っています。

 2つのキャッシュの性質を考えると、同じTTLの値を使用するのはあまり有効ではありません。そこで、RFC 2308(http://www.ietf.org/rfc/rfc2308.txt?number=2308)で新たにネガティブキャッシュが定義されました。

 これを受けて、BIND 8.2以降ではいままでのSOAレコードにあるデフォルトTTLの値をネガティブキャッシュ用のTTLとし、新たに$TTL行を設けてゾーンデータのデフォルトTTLの値を指定するようにしました。また、ゾーン全体に対してTTLを設定する以外に、レコードごとの指定もできます。これにより、変更を予定しているホストのレコードは個別にTTLを短くする、といったことが可能になります。

(略)
;通常
temporary1.example.jp  IN  A 192.168.0.30

;TTLに3時間を指定した場合
temporary2.example.jp  10800  IN  A 192.168.0.30
(略)
/var/named/example.zone(TTL設定例)

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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