UNIXマシンのDNSサーバ(BIND)設定方法

[BIND8, BIND9 の設定方法] (BIND4の説明はありません)[以下の内容のお客様を想定して設定例を掲載しています]
使用ドメイン example.com (お客様の使用ドメイン)
管理者メールアドレス admin@example.com
ルータ gw.example.com [192.168.0.1]
プライマリDNSサーバ ns1.example.com [192.168.0.2]
セカンダリDNSサーバ ns2.example.com [192.168.0.3]
使用IPネットワーク
(Cクラス未満)
192.168.0.0/29
(192.168.0.1 〜 192.168.0.6)
192.168.0.0 はネットワークアドレス
192.168.0.7 はブロードキャストアドレス
メールサーバ mail.example.com
(ns1.example.comに兼務させる)
WWWサーバ www.example.com [192.168.0.4]
※実際に設定される際には、弊社からお客様にご案内しているIPアドレス等に必ず読み変えてください。
○ブートファイル (named.conf(master), named.conf(slave)) DNSサーバ(=named)が起動するときに読み込む設定ファイルです。
○正引きゾーンファイル (example.com) ホスト名に対応したIPアドレスを設定するファイルです。
○逆引きループバックファイル (127.0.0) ローカルホストのループバックアドレスについて設定するファイルです。
○逆引きゾーンファイル (192.168.0.0-7) IPアドレスに対応したホスト名を設定するファイルです。
○キャッシュファイル (named.root) ルートネームサーバを設定するファイルです。
ftp://rs.internic.net/domain/named.root にて最新のファイルを取得してください。
○resolv.confファイル Unix, Linux におけるネームサーバーを指定するファイルです。

[マスターサーバー用 "/etc/named.conf"]
//// BIND Configuration File (Master Server)//
"//" から行末まで、"#" から行末まで、"/*" と "*/" で囲まれた範囲はコメントとして扱われ、ネームサーバの動作には影響を与えません。
options { directory "/var/named";};
ゾーンファイル等の設置場所を "/var/named" に設定。
zone "example.com" { type master; file "master/example.com"; allow-transfer { 192.168.0.3; };};
"example.com" ゾーンのマスターサーバとして設定。
マスターファイルは /var/named/master/example.com になります。
allow-transfer でゾーン転送を許可するサーバーを設定します。
この例では ns2.example.com [192.168.0.3] がスレーブサーバなのでそのアドレスを設定します。
複数のサーバーを設定する場合はセミコロン ";"で区切って列挙します。
マスターファイルの説明
zone "0/29.0.168.192.in-addr.arpa" { type master; file "master/192.168.0.0-7"; allow-transfer { 192.168.0.3; };};
"0/29.0.168.192.in-addr.arpa" ゾーンのマスターサーバとして設定。
ゾーンファイルは /var/named/master/192.168.0.0-7 になります。
逆引き委譲の解説[RFC 2317] Classless IN-ADDR-ARPA delegation
zone "0.0.127.in-addr.arpa" { type master; file "master/127.0.0";};
ループバックインターフェイス用のゾーン設定
zone "localhost" { type master; file "master/localhost";}
ループバックインターフェイス用のゾーン設定
zone "." { type hint; file "named.root";};
ルートサーバ情報の場所を指定
named.conf には他にも多くの設定項目があります。詳細は BIND のドキュメントを参照してください。


[スレーブサーバー用 "/etc/named.conf"]
//// BIND Configuration File (Slave Server)//options { directory "/var/named";};
ゾーンファイル等の設置場所を "/var/named" に設定。
zone "example.com" { type slave; file "slave/example.com";};
"example.com" ゾーンのスレーブサーバとして設定。マスターサーバーから取り寄せたゾーン情報は /var/named/slave/example.com に書き込まれます。マスター - スレーブ間の同期について
zone "0/29.0.168.192.in-addr.arpa" { type slave; file "slave/192.168.0.0-7";};
"0/29.0.168.192.in-addr.arpa" ゾーンのスレーブサーバーとして設定。マスターサーバーから取り寄せたゾーン情報は/var/named/slave/192.168.0.0-7 に書き込まれます。
zone "0.0.127.in-addr.arpa" { type master; file "master/127.0.0";};
ループバックインターフェイス用のゾーン設定
zone "localhost" { type master; file "master/localhost";}
ループバックインターフェイス用のゾーン設定
zone "." { type hint; file "named.root";};
ルートサーバ情報の場所を指定


[正引きゾーンファイル "/var/named/master/example.com"]
$TTL 86400
デフォルトの TTL (Time To Live) を設定。単位は秒です。キャッシュサーバは情報を TTL の時間だけキャッシュします。ホスト名の変更予定が予め判っている場合は、先にこの値を小さくしておきます。
$ORIGIN example.com.
名前の最後にドット "." を付けなかった場合にこの値がドット "." に続いて付加されます。
@ INSOAns1.example.com.admin.example.com. (2000110701 ; Serial10800; Refresh after 3 hours3600 ; Retry after 1 hours604800; Expire after 1 week86400; Minimum TTL of 1 day)
タイプ SOA (Start Of a zone of Authority)(SOA レコードの詳細)行頭の @ は $ORIGIN の値に置き換えられます。この例では example.com.になります。セミコロン ";" から行末まではコメントとして扱われ、DNSの設定には影響を与えません。
INNSns1.example.com. INNS ns2.example.com.
タイプ NS ではそのゾーンを管理するネームサーバを指定します。複数設定出来ます。行頭が空白の場合はその上の値を引き継ぎます。この場合は "@" で、 example.com. です。
INMX 100 ns1.example.com.
タイプ MX でメールサーバを指定します。この場合は @example.com 宛
メールを ns1.example.com が受け取るという設定です。
MX の次の数字はプライオリティです。
複数のメールサーバで受け取る場合は優先順位を付けられます。
値が小さい方が優先されます。同じ値にすると優先度は等しくなります。
gwINA 192.168.0.1ns1INA 192.168.0.2ns2INA 192.168.0.3wwwINA 192.168.0.4
タイプ A で各ホストのIPアドレスを設定します。gw や ns1 などはドット "." で終っていない為、$ORIGIN の値が
付加され、gw.example.com, ns1.example.com として扱われます。
mail INCNAME ns1.example.com.
タイプ CNAME で ns1.example.com に mail.example.com という別名を
設定します。設定した別名を各設定の右辺に使用することは出来ません。


[逆引きゾーンファイル "/var/named/master/192.168.0.0-7"]
$TTL 86400$ORIGIN 0/29.0.168.192.in-addr.arpa.@ INSOAns1.example.com.admin.example.com. (2000110701; Serial10800; Refresh after 3 hours3600; Retry after 1 hours604800 ; Expire after 1 week86400; Minimum TTL of 1 day) INNSns1.example.com. INNSns2.example.com.1 INPTRgw.example.com.2 INPTRns1.example.com.3 INPTRns2.example.com.4 INPTRwww.example.com.
1.0.168.192.in-addr.arpa は 上位のサーバで
1.0/29.0.168.192.in-addr.arpa への CNAME が設定されており、
ここで設定することで 192.168.0.1 の逆引きを gw.example.com に
設定することができます。


[ループバックアドレス逆引き用ファイル "/var/named/master/127.0.0"]
$TTL 86400$ORIGIN 0.0.127.in-addr.arpa.@ INSOAns1.example.com.admin.example.com. (2002121101 ; Serial10800; Refresh after 3 hours3600 ; Retry after 1 hours604800; Expire after 1 week86400; Minimum TTL of 1 day) INNSlocalhost.1 INPTRlocalhost.


[ループバックアドレス正引き用ファイル "/var/named/master/localhost"]
$TTL 86400$ORIGIN localhost.@ INSOAns1.example.com.admin.example.com. (2002121101 ; Serial10800; Refresh after 3 hours3600 ; Retry after 1 hours604800; Expire after 1 week86400; Minimum TTL of 1 day) INNSlocalhost.localhost.INA 127.0.0.1


[ルートキャッシュ "/var/named/named.root"]
※ 省略: ftp://rs.internic.net/domain/named.root から取得した最新のファイルを用いてください。<注意> named.root は不定期に変更される事があります。


[ネームサーバの指定 (master) "/etc/resolv.conf"]
domain example.comnameserver127.0.0.1nameserver192.168.0.3
マスターサーバ自身のループバックアドレスとスレーブサーバを指定します。127.0.0.1 からの応答がない場合に 192.168.0.3 へ問い合わせを行います。


[ネームサーバの指定 (slave) "/etc/resolv.conf"]
domain example.comnameserver127.0.0.1nameserver192.168.0.2
スレーブサーバ自身のループバックアドレスとマスターサーバを指定します。



マスターファイルの詳細
マスターファイルにはゾーンの情報をリソースレコード(Resource Records)と呼ばれる以下のようなフォーマットで記述していきます。

<ドメイン> [<ttl>] [<クラス>] <タイプ> <リソースデータ> [<コメント>](空白)[<ttl>] [<クラス>] <タイプ> <リソースデータ> [<コメント>]@ [<ttl>] [<クラス>] <タイプ> <リソースデータ> [<コメント>]行頭が空白の場合はその上のリソースレコードの<ドメイン>として扱われます。

行頭が "@" の場合は $ORIGIN の値として扱われます。

$ORIGIN を明示的に設定していない場合は named.conf で設定したゾーンの名前が使われます。

"[", "]" で囲まれた項目は省略可能です。

<ttl> については $TTL にてデフォルトの値を設定することができます。

<クラス>を省略した場合は named.conf の zone 設定で指定したクラスとして扱われます。

named.conf でも指定していない場合は IN (Internet) として扱われます。

タイプで代表的なものには次のものがあります。

A: ドメインのIP(v4)アドレス指定する。

(Address) AAAA : ドメインのIP(v6)アドレス指定する。

(Address) NS : ドメインのネームサーバを指定する。

(NameServer) CNAME : リソースデータにドメインという別名を設定する。

(Canonical NAME) SOA : ドメインの権威情報を設定する。

(Start Of a zone of Authority) PTR : IPアドレスにドメインを指定する。

(PoinTeR) MX : ドメイン宛メールの配送先を指定する。

(MailExchange)リソースデータはタイプに依存し、代表的なものは次のようになります。

A: IP(v4)アドレス (xxx.xxx.xxx.xxx) AAAA : IP(v6)アドレス (XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX) NS : ドメイン CNAME : ドメイン SOA : 別途説明 PTR : ドメイン MX : ドメインリソースデータのドメインには CNAME で設定した別名を指定することは出来ません。

エラーにはならないので設定されていることがありますが、良くない設定です。

ドメインがドット "." で終って終っていない場合は $ORIGIN の値が "." に続いて付加されます。

例えば $ORIGIN example.com. @ NS ns ns A 192.168.0.2 www A 192.168.0.3は example.com.IN NS ns.example.com. ns.example.com. IN A 192.168.0.2 www.example.com. IN A 192.168.0.3と同じです。

マスターファイルディレクティブすでに登場していますが $ORIGIN, $INCLUDE, $TTL というディレクティブが存在します。

$ORIGIN : <ドメイン> がドット "." で終っていない場合に補間するドメインを設定します。

書き方: $ORIGIN <ドメイン> [<コメント>] ("[", "]" で囲まれた部分は省略可能)$INCLUDE :書き方: $INCLUDE <ファイル名> [<origin>] [<コメント>] ("[", "]" で囲まれた部分は省略可能)$TTL: <ttl> が省略された場合のデフォルトの TTL を設定します。

設定可能な範囲は 0 〜 2147483647 です。

$TTL は RFC 2308 にて定義されています。

書き方: $TTL <秒数>
SOA レコード
SOA レコードは他のリソースレコードとは違い、ドメイン全体の情報を設定します。

フォーマットは <ドメイン> IN SOA <ネームサーバ(MNAME)> <管理者メールアドレス> (<SERIAL> <REFRESH> <RETRY> <EXPIRE> <MINIMUM>)で、わかりやすいように次のように書かれたりもします。

@ INSOAns.example.com. admin.example.com.(2002121101 ; SERIAL10800; REFRESH (3 hour)3600 ; RETRY (1 hour)604800; EXPIRE (1 week)60 ; MINIMUM (1 minute))ここで注意すべきは <管理者メールアドレス> の "@" を "." に置き換える必要があることです。

この例では admin@example.com が admin.example.com となっています。

"(", ")" で囲まれた中の SERIAL はゾーン情報のバージョンを管理するもので、設定を変更した場合はこの値を増やさないと他のサーバへ反映されません。

その他の値は単位が秒で、主にスレーブサーバ向けの情報です。

REFRESH : スレーブサーバがマスターサーバへ更新があったかどうかを確認する間隔。

RETRY : REFRESH でスレーブサーバがマスターサーバへ問い合わせを行った際に応答が得られなかった場合に再度問い合わせを試みるまでの時間。

EXPIRE : スレーブサーバがマスターサーバへ問い合わせが出来ない時間がこの値を超えるとスレーブサーバは古すぎて間違っているかも知れないデータは捨てた方が良いと判断し、持っていたデータを破棄します。

MINIMUM : キャッシュサーバが問い合わせを行い、このゾーンで未登録だったという情報をキャッシュ(ネガティブキャッシュ)しておく時間。

ネガティブキャシュの最大値は 10800 (3h, 3時間) です。

これらの値と $TTL は #w#d#h#m#s のように指定することで週、日、時間、分などの単位を使用することが可能です。

例えば 1w は 1週間。

5h30m は 5時間30分という具合です。

(注)BIND 8.2 より古いバージョンでは MINIMUM はゾーンのデフォルト TTL とネガティブキャッシュ TTL の両方を意味します。

逆引きの委譲
クラスC以下の逆引きの委譲には [RFC 2317] Classless IN-ADDR-ARPA delegationの CNAME を利用した方法をとります。

192.168.0.0/29 を ns1.example.com [192.168.0.2], ns2.example.com [192.168.0.3]に委譲する場合を例にとり説明します。

まず、 192.168.0.0/24 のゾーンを管理しているサーバにて$ORIGIN 0.168.192.in-addr.arpa.0/29 INNSns1.example.com.0/29 INNSns2.example.com.という設定で 0/29.0.168.192.in-addr.arpa というドメインのネームサーバーをns1.example.com と ns2.example.com へ振ります。

それから$ORIGIN 0.168.192.in-addr.arpa.0 IN CNAME 0.0/29.0.168.192.in-addr.arpa.1 IN CNAME 1.0/29.0.168.192.in-addr.arpa.2 IN CNAME 2.0/29.0.168.192.in-addr.arpa.3 IN CNAME 3.0/29.0.168.192.in-addr.arpa.4 IN CNAME 4.0/29.0.168.192.in-addr.arpa.5 IN CNAME 5.0/29.0.168.192.in-addr.arpa.6 IN CNAME 6.0/29.0.168.192.in-addr.arpa.7 IN CNAME 7.0/29.0.168.192.in-addr.arpa.という設定で 0.0.168.192.in-addr.arpa 〜 7.0.168.192.in-addr.arpa に0/29.0.168.192.in-addr.arpa ドメインの別名であると設定します。

ns1.exmpla.com, ns2.example.com にて$ORIGIN 0/29.0.168.192.in-addr.arpa.1 INPTRgw.example.com.2 INPTRns1.example.com.3 INPTRns2.example.com.4 INPTRwww.example.com.と設定します。

これで 192.168.0.1 というアドレスの逆引きを行うと、まず、0.168.192.in-addr.arpaを管理しているサーバへ 1.0.168.192.in-addr.arpa の問い合わせを行い、1.0/29.0.168.192.in-addr.arpa の別名になっているとの回答を受けるので、今度は 0/29.0.168.192.in-addr.arpa を管理しているサーバはどこかと問い合わせ、NS レコードに書かれている ns1.example.com, ns2.example.com だと回答を受けるのでそこへ 1.0/29.0.168.192.in-addr.arpa の問い合わせを行います。

ns1.example.com, ns2.example.com で 1.0/29.0.168.192.in-addr.arpa はgw.example.com であると設定してあるので 192.168.0.1 は gw.example.comであるという結果にだどりつきます。

このような CNAME を利用した委譲を行う場合、/25 だと委譲する側にサーバでは 128個もの CNAME レコードを書かなければなりません。

こういう場合に便利なように BINDには独自拡張の $GENERATE 設定があります。

上記の設定を $GENERATE を使って書くと次のようになります。

$ORIGIN 0.168.192.in-addr.arpa.$GENERATE 1-2 0 NS ns$.example.com.$GENERATE 0-7 $ CNAME $.0/29構文は $GENERATE <range> <lhs> <type> <rhs> [<comment>] <range> : start-stop もしくは start-stop/step で、 /step は省略すると 1 になります。

start, stop, step は自然数である必要があります。

<lhs> : $ は <range> で設定した値に置き換わります。

$ という文字を設定したい場合は \$ とバックスラッシュ(もしくは円記号) "\" でエスケープする必要があります。

ドット "." で終らない場合は $ORIGINの値が追加されます。

${offset,width,radix} というフォーマットでオフセットや 0 でのパディング、10進(d)、8進(o)、16進(x,X) が設定出来ます。

連番の後に "{" とう文字が設定したい場合は $\{ とします。

{offset,width,radix} が省略された場合は ${0,1,d} として扱われます。

${16,3} は 16 が足され、3桁になります。

${0,2,x} は2桁の16進数(a〜fは小文字)になります。

<type> : タイプを設定します。

A, AAAA, PTR, CNAME, NS がサポートされています。

<rhs> : リソースデータです。

設定方法は lhs と同じです。

マスター - スレーブ間の同期
マスターサーバーとスレーブサーバーを運用する場合、両者の同期について考える必要がありますが、BIND8 からは DNS NOTIFY([RFC 1996] A Mechanism for Prompt Notification of Zone Changes (DNS NOTIFY))がサポートされてるのでマスターサーバーのゾーンを更新すると、NS レコードに設定されていてかつ SOA レコードの MNAME に設定されていないサーバーへ更新通知が行われます。

通知を受け取ったスレーブサーバーは本当に更新されているかを自分の持っているシリアル値と比べて確認し、本当に更新されていればゾーン転送を行います。

更新通知を送る先は named.conf で設定することも可能です。

DNS 関連 RFC

[RFC 1035] DOMAIN NAMES - IMPLEMENTATION AND SPECIFICATION[RFC 2317] Classless IN-ADDR-ARPA delegation[RFC 2308] Negative Caching of DNS Queries (DNS NCACHE)
【ご注意】
BINDはセキュリティ対策上、最新版をダウンロードしてお使いください。

ルートネームサーバの IP アドレス変更についてのお知らせJPRSより標記のお知らせがありましたので、ご案内いたします。

2002年11月 5日にルートネームサーバの一つである J.root-servers.netの IP アドレスが変更されました。

ネームサーバ管理者の皆様におかれましては、各ネームサーバのルートヒントファイルの更新などの適切なご対応をお願いいたします。

詳しくは、下記URLをご確認くださいますようお願い致します。

  http://jpinfo.jp/topics/021119.html