(作成:2006/03)
OSSのDNSサーバとしては有名過ぎるくらい有名なので特に紹介する事も無く。
とはいえ、ホームユースでネームサーバ立てて楽しい事ってあまり無いかも。小規模LANでも構築していればそれなりにアレかも知んないけど、おそらくは趣味の問題。 でも、キャッシュサーバとして動作させればDNS問い合わせとかが多少高速になるし、使い所はあるという事で。
Install on Debian
特にセキュアな実装が必要なものでもないんで、 apt-get
でサクッとインストール。
# apt-get install bind
インストール後、サーバに問題があれば /var/log/syslog
にログとして残るのでそちらを参照のこと。
設定
Bindに直接関わるものではないけれど、内外のDNSが引けるよう /etc/resolv.conf
を設定し直しておく。
#### /etc/resolv.conf
search isp.no.domain
search hyakki.local
nameserver 192.168.1.1
nameserver ***.***.***.*** # ISPのns
全般
まずは設定全体に関わるオプション。詳細は順に。
//// /etc/bind/named.conf
options {
directory "/var/named";
auth-nxdomain yes;
version "";
allow-transfer { none; };
recursion yes;
};
options
この鴎括弧で括られた内容がBIND全体の設定に適用される。directory
正引き/逆引き設定ファイルの設置場所。auth-nxdomain
旧いDNSサーバへの互換性のため。指定されたドメインが無い場合にAuthoritativeAnswer
ビットというのを立てるらしい。version
BINDのバージョン。空欄にしとけばバージョンがばれないんで、ちょっとセキュア。allow-transfer
名前解決データの転送制限。ここに転送を許可するIP/ネットワークアドレスを指定してやれば、そこにしか名前解決データを転送しないので、やっぱりちょっとセキュア。recursion
名前解決が自己解決出来ない場合、他のネームサーバへ問い合わせるかどうか。no
にすれば外部に問い合わせしない。yes
なら問い合わせるが、forwarder
で設定したサーバに問い合わせる。ホームユースで使わないなら設定不要。
ローカル用DNSサーバとしての設定
以下はホームユースでPC管理をするようなローカル設定なので、グローバルなDNSを立てる場合には殆ど必要無いかと。
ネームサーバを使用できるネットワークを制限するには以下のように設定する。 ローカルでのみ使用、ネットワークアドレス 192.168.1.0/24
、自分自身 127.0.0.1
なら、この二つを定義してやる。 acl
に続く文字列は宣言名なので任意。例えばネットワークのドメイン名にしとくのも良いかも。
//// /etc/bind/named.conf
acl hyakki {
192.168.1.0/24;
127.0.0.1;
};
ローカルなサーバの場合はDNS問い合わせに対し自己解決出来ない場合が生じるんで、その時に優先して問い合わせるDNSを以下のように設定する。
ホームユースなんかだとトラフィック軽減のためにDNSキャッシュとして一元化させて動作させるんだけど、当然の事ながらマトモに問い合わせの出来るトコ知らなきゃ意味無い。普通はISPから提供されているNSのアドレスを記述する。
//// /etc/bind/named.conf
forwarders {
xxx.xxx.xxx.xxx;
yyy.yyy.yyy.yyy;
};
ルートサーバのキャッシュ
DNSのルートサーバも、あんまし頻繁にアクセスするのも嫌がられるので、キャッシュするように設定しとく。
//// /etc/bind/named.conf
zone "." IN {
type hint;
file "named.root";
};
/var/named/named.root
については以下から最新版を入手すれば良い。
ローカルアドレスの名前解決
そんなに重要なモンでもないと思うけど、サーバ自身のローカルな名前解決もしとく。
/// /etc/bind/named.conf
zone "localhost" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.127.0.0";
allow-update { none; };
};
/var/named/named.localhost
、 /var/named/named.127.0.0
はローカルホスト用のゾーンファイルで、以下の内容でOK。
;;;; /var/named/named.localhost
$TTL 86400
$ORIGIN localhost.
@ 1D IN SOA @ root (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
1D IN NS @
1D IN A 127.0.0.1
;;;; /var/named/named.127.0.0
$TTL 86400
@ IN SOA localhost. root.localhost. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS localhost.
1 IN PTR localhost.
設定(キャッシュサーバとして)
キャッシュサーバとして設定を行なうには、Debianの場合だと基本的にはデフォルト設定のまま何もしなくて良い。いやぁ便利だねぇ。
設定(メインサーバとして)
ものすごく当り前な話だが、自分のネットワークを表現するためのメインネームサーバとして設定する事もできる。出来なきゃ何のためのBINDだよって話だけどさ。
正引きDNS設定
ホスト名/ドメイン名からIPアドレスを問い合わせるための設定。メインのネームサーバとして主要な設定。
named.conf
ではまず、利用したいドメイン名についてのゾーン宣言をする。 zone
に続く文字列は利用したいドメイン名で、この括弧内で宣言されている正引き用ゾーンファイル内でのデフォルトのドメイン名として用いられる。 type
は、このドメイン名についてのメインのネームサーバである事を表す。 file
は、正引き用ゾーンファイルのファイル名を指定する。このファイルは、 option
内の directory
で指定されたパスに置くこと。
//// /etc/bind/named.conf
zone "hyakki.local" {
type master;
file "named.hyakki";
};
で、その正引き用ゾーンファイルの中身について。
ファイル中の記述では、FQDNの後には必ず .
を付ける必要があり、メールアドレスの @
も .
に置き換える必要がある。
;;;; /etc/bind/named.hyakki
$TTL 604800
@ IN SOA oni.hyakki.local. root.hyakki.local. (
2003101001 ; Serial
10800 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ; Minimum
)
$TTL
Time To Live値を指定する。簡単に言えばクライアント側の持つDNS情報の賞味期限みたいなもので、これが短いとクライアントは頻繁にDNS問い合わせ結果を更新してレスポンスが悪くなるし、長いとクライアントは古い情報を保持するようになる。ドメイン情報の更新頻度にも依るが、大体この程度の値で良いんでないかな。@
以降
SOAレコード。ゾーン管理情報を記述する。@
はnamed.conf
で設定したドメイン名に置き換えられる。5つ目のroot.hyakki.local.
は、管理者のメールアドレスを指す。- SOAレコードの中身
順に「ゾーンファイルのバージョン」「ゾーン情報をリフレッシュするまでの時間」「リフレッシュ失敗時の再試行間隔」「リフレッシュが出来ない場合の、セカンダリサーバの持つゾーンデータ使用期限」「存在しないドメイン名についてのTTL」の意。メインのネームサーバとしては1つ目と5つ目の数値しか意味無いが、セカンダリサーバも構築するつもりであれば2~4つ目も重要となる。
ゾーンファイルのバージョンについては、ゾーンファイルの変更があった場合に必ず変更すること。書式は任意だが、通例は変更した日付とその日の変更回数を使ったYYYYMMDDnn
。 なお「存在しないドメイン名」というのは、そういう風に敢えてゾーン宣言出来るらしいのだが、使い道についてはよく判らない。。。敢えて指定して嬉しい事って何かあるのかしらん。
ゾーン定義。最初にネームサーバやメールサーバがある場合(もちろん自分自身も含む)、それぞれNSレコードとMXレコードで指定してやる。
;;;; /etc/bind/named.hyakki
@ IN NS oni.hyakki.local.
@ IN MX 10 oni.hyakki.local.
各マシンのゾーン定義はAレコードで行なう。
;;;; /etc/bind/named.hyakki
;; Servers
oni IN A 192.168.1.1
funayurei IN A 192.168.1.100
;; Clients
kappa IN A 192.168.1.2
tengu IN A 192.168.1.3
ホスト名とは別にエイリアスが欲しいなー、という場合は CNAME
レコードで行なう。エイリアスってーのはつまり「別名」って事で、例えばここでは www.hyakki.local
と oni.hyakki.local
が同一。 この利点は、見れば判ると思うけれど、Webアドレスやメールアドレスなんか用だね。まぁぶっちゃけ利用可能ポートの問題で我が家では無意味なんだが。。。
;;;; /etc/bind/named.hyakki
;; Aliases
gateway IN CNAME funayurei
ns IN CNAME oni
mail IN CNAME oni
www IN CNAME oni
ftp IN CNAME oni
逆引きDNS設定
IPアドレスからホスト名/ドメイン名を問い合わせるための設定。メインのネームサーバとして2番目に主要な設定。
named.conf
で利用したいIPアドレスについてのゾーン宣言をする。内容は大体正引きの設定と同じ。 zone
に続く文字列は利用したいネットワークIPで、この括弧内で宣言されている逆引き用ゾーンファイル内でのデフォルトのネットワークIPとして用いられる。
//// /etc/bind/named.conf
zone "1.168.192.in-addr.arpa" {
type master;
file "named.192.168.1";
};
逆引き用ゾーンファイルの中身について。
ファイル中の記述では、FQDNの後には必ず .
を付ける必要があり、メールアドレスの @
も .
に置き換える必要がある。
TTL
や SOA
レコードについては正引き用と同様。NSレコードも同様。でもMXレコードは要らない。 各マシンのゾーン定義は PTR
レコードで行なう。アドレスは下1桁のみで良い。
;;;; /etc/bind/named.192.168.1
$TTL 604800
@ IN SOA oni.hyakki.local. root.hyakki.local. (
2003101001 ; Serial
10800 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ; Minimum
)
@ IN NS oni.hyakki.local.
;; Servers
1 IN PTR oni.hyakki.local.
100 IN PTR funayurei.hyakki.local.
;; Clients
2 IN PTR kappa.hyakki.local.
3 IN PTR tengu.hyakki.local.
設定(セカンダリサーバとして)
メインサーバが落ちた時とかの予備サーバとして設定する事もできる。 ホームユースだと更に必要無さ気ではあるけれど。。。
方法は簡単。 named.conf
で、 zone
の type
を slave
に変更し、 masters
でメインサーバを指定してやれば良い。正/逆引きゾーンファイルは用意する必要は無い。つーかセカンダリなんだから用意しちゃいかん。
メインサーバからのゾーン情報は /var/cache/bind/
以下に保持されるため、 zone
の file
をフルパスで設定しないのであれば directory
設定も変更する必要がある。
//// /etc/bind/named.conf
zone "hyakki.local" {
type slave;
file "named.hyakki";
masters { 192.168.1.1; };
};
zone "1.168.192.in-addr.arpa" {
type slave;
file "named.192.168.1";
masters { 192.168.1.1; };
};
起動と動作チェック
起動。
# /etc/init.d/bind start
/var/log/message
にて起動ログのチェックができる。エラーが出ていなければ、実際に設定したサーバに接続可能な端末から dig
コマンドで参照してみる。
$ dig @ns.hyakki.local -x 192.168.1.3
...
;; ANSWER SECTION:
1.1.168.192.in-addr.arpa. 84471 IN CNAME ***.0/128.1.168.192.in-addr.arpa.
***.0/128.1.168.192.in-addr.arpa. 0 IN PTR tengu.hyakki.local.
...
$ dig @ns.hyakki.local tengu.hyakki.local
...
;; ANSWER SECTION:
tengu.hyakki.local. 86400 IN A 192.168.1.3
...
$
正引き/逆引き共に問題無ければ成功。