2009年6月15日月曜日

FreeBSD でサーバ構築 #9 BIND の設定

林檎生活100: FreeBSD でサーバ構築 #8の続き.BIND の設定ファイルである /etc/namedb/named.conf とドメインのゾーンファイルの書き方を説明する.

まずは,named.conf の書き方.といっても,デフォルトにちょっと追加するだけなので,詳しい文法は知らなくてもいいと思う.

1. 21行目の listen-on サブステートメントを次のようにコメントアウトする.
// If named is being used only as a local resolver, this is a safe dafault.
// For named to be accessible to the network, comment this option, spedify
// the proper IP address, or delete this option.
// listen-on { 127.0.0.1; };

これが記述されていると,BIND は localhost インタフェースに来た問い合わせ,つまり,ローカルからの問い合わせにしか応答しなくなる.なので,外からの自分が所有するドメイン(僕の場合は,legna.org だね.)への問い合わせを受け付ける必要があるので,インタフェースを限定しないようにコメントアウトする.

2. 自分が所有するドメインのゾーンファイルの場所などをファイル末尾に追記する.
zone "legna.org" {
type master;
file "master/legna.org";
allow-transfer {
71.6.202.218;
};
};

zone のあとの名前は起点名というもので,あとから重要になるのでドメイン名をそのまま使おう.マスタを示す type master; を記述して,ゾーンファイルへのパスを記述する.ゾーンファイルの名前は何でもいいが,ドメイン名が無難だろう.allow-transfer サブステートメントは,ゾーンの転送を許可するスレーブの IP アドレスを記述している.一応,everydns.net のを調べて記述しているが,不明な場合は次のように記述してもいい.allow-transfer のデフォルトは any だからだ.
zone "legna.org" {
type master;
file "master/legna.org";
};


named.conf の変更はこれだけだ.固定 IP 1つだけを取得していることを前提にしているので,逆引きゾーンなどの設定は省略させてもらう.

さて,それではゾーンファイルを書くことにしよう.僕の場合は,/etc/namedb/master/legna.org がゾーンファイルになる.今回はテンプレートがないので,スクラッチから記述していこう.

1. TTL(Time To Live: 生存期間)の記述
$TTL 3h

このゾーンへの問い合わせに対しての応答で,TTL に記述した時間だけ問い合わせもとサーバにキャッシュしておくように指示するという意味がある.まああまり気にしなくてもいい.3h は 3時間の意味.

2. SOA レコードの記述
まずは,次のような SOA (Start Of Authority) レコードを記述する.(ドメイン名のあとのドットを忘れないように.)
@ SOA lucifer.legna.org. hostmaster.legna.org. 2009061500 3h 1h 1w 1h

@は起点名 legna.org に置き換えられる.lucifer.legna.org. はネームサーバの記述で,hostmaster.legna.org. は hostmaster@legna.org ということでメールアドレスの記述で,ネームサーバの管理者の問い合わせ先ということだ.2009061500 はシリアル番号で,スレーブがゾーンデータを更新するときに参照するため,ゾーンファイルを更新したら必ず増加させよう.YYYYMMDDNN(年月日当日更新回数)で記述することで更新するたびにシリアル番号を確実に増加させることができる.

残りの4つの時間は,先頭からリフレッシュ,リトライ,期限切れ,ネガティブキャッシュ TTL を表す.それぞれ,スレーブがゾーンデータをチェックする間隔,リフレッシュ間隔が過ぎてもマスタにアクセスできなかった場合のリトライ間隔,ゾーンデータが無効になる期限,ネガティブキャッシュ(資源レコード集合やドメイン名の非存在をキャッシュする機能.)の生存期間を表す.

3. NS レコードの記述
NS(ネームサーバ)の前には,@が省略されている.つまり,legna.org. というものが省略されていると考える.僕の環境の場合は,次のように ネームサーバの情報を記述する.
          NS    lucifer.legna.org.
NS ns1.everydns.net.
NS ns2.everydns.net.
NS ns3.everydns.net.
NS ns4.everydns.net.

4. MX レコードの記述
MX(メールエクスチェンジャ)はメールサーバの構築のときに説明する.とりあえず,こんな感じに書いておく.
lucifer   MX 10 lucifer.legna.org.

5. A レコードの記述
A(ホスト)の前には lucifer と記述されている.末尾にドットがないので,起点名が付与されるので,lucifer.legna.org. になる.このレオードで IP とホスト名を関連づける.
lucifer   A     203.152.220.151

6. CNAME レコードの記述
賛否両論あるが,localhost と www はここで記述するのが好き.別名みたいなもの.
localhost CNAME localhost.
www CNAME lucifer.legna.org.

全部まとめるとこうなる.
$TTL 3h
@ SOA lucifer.legna.org. hostmaster.legna.org. 2009061500 3h 1h 1w 1h

NS lucifer.legna.org.
NS ns1.everydns.net.
NS ns2.everydns.net.
NS ns3.everydns.net.
NS ns4.everydns.net.

MX 10 lucifer.legna.org.

lucifer A 203.152.220.151

localhost CNAME localhost.
www CNAME lucifer.legna.org.

これで,ゾーンファイルの記述も完了.設定の反映と確認作業をつぎのようなかんじで行おう.
# /etc/rc.d/named restart
Stopping named.
Starting named.
# exit
$ nslookup lucifer.legna.org 0.0.0.0
Server: 0.0.0.0
Address: 0.0.0.0#53

Name: lucifer.legna.org
Address: 203.152.220.151
$ nslookup www.legna.org 0.0.0.0
(省略)
$ nslookup localhost.legna.org 0.0.0.0
(省略)

以上で,BIND の設定は完了.次回は,ルータのポート解放とゾーン転送,逆引き設定(インターリンクの場合のみ.)について書いて,BIND 編の最終回としたいと思う.そのあとは,メールサーバをやるぞ☆

参考文献:
DNS & BINDクックブック―ネームサーバ管理者のためのレシピ集
BIND 9 Administrator Reference Manual
RFC2308(日本語訳)
西村大介の KTYY でのページ: localhost 問題

追記(2009年6月22日):
MX レコードの表記を変更.Sendmail の回での説明のため.

追記(2009年10月13日):
DNS の回送について.ローカルで答えられない問い合わせをほかのネームサーバ(例えば,プロバイダのネームサーバ.)に回送する方法.僕のサーバでは,この設定をすることにした.プロバイダのサーバに任せた方が,キャッシュとか効いていいかなぁってw

その設定は,named.conf の該当箇所を次のように修正するだけ.forward ステートメントは,ローカルで答えられない問い合わせは回送して,再起的問い合わせをしないために only にする.forwarders ステートメントは,うちのブロードバンドルータの IP アドレスを指定し,ブロードバンドルータに解決を任せる.(そして,そのブロードバンドルータがプロバイダのネームサーバに回送するわけなんだけどねw)

// In addition to the "forwarders" clause, you can force your name
// server to never initiate queries of its own, but always ask its
// forwarders only, by enabling the following line:
//
forward only;

// If you've got a DNS server around at your upstream provider, enter
// its IP address here, and enable the line below. This will make you
// benefit from its cache, thus reduce overall DNS traffic in the Internet.
forwarders {
192.168.1.1;
};

0 件のコメント: