8.6. プライマリネームサーバーの設定

DNS サーバーを新規に構築する上で、最低限必要になるのがこのプライマリネームサーバーです。ここでは、以下の条件をもとにプライマリネームサーバーの設定方法を解説します。

表 8-3. BIND - プライマリネームサーバーの設定例

IP アドレス192.168.0.0〜192.168.0.255
サブネットマスク255.255.255.0
ドメイン名turbolinux.co.jp
プライマリネームサーバーns.turbolinux.co.jp(192.168.0.1)
セカンダリネームサーバーns2.turbolinux.co.jp(192.168.0.2)

セカンダリネームサーバーは、障害時に備えて物理的に別のネットワークに配置することが推奨されています。よって、実際には、ご利用のプロバイダが提供するセカンダリネームサーバーの引き受けサービスなどにより設置したセカンダリネームサーバーを指定することになりますが、本ガイドでは上記例をもとに解説します。

プライマリネームサーバーを構築するために必要な設定ファイルは以下の通りです。ゾーンファイル名は任意につけることが可能です。管理者がわかりやすいファイル名をつけてください。また、named.ca と named.localhost ファイルは標準で用意されています。

表 8-4. BIND - プライマリネームサーバーの設定ファイル

基本設定ファイル/var/named/chroot/etc/named.conf
ルートサーバーリストファイル/var/named/chroot/var/named/named.ca
正引きゾーンファイル/var/named/chroot/var/named/turbolinux.co.jp
逆引きゾーンファイル/var/named/chroot/var/named/0.168.192.in-addr.arpa
逆引きループバックファイル/var/named/chroot/var/named/named.localhost

ティップクラス C 未満の逆引きに関する補足事項
 

クラス C 未満のクラスレスなネットワーク環境においてIPアドレスが割り当てられる OCN などの専用線サービスで逆引きを正常に動作させるためには、一度上位の DNS サーバーに問い合わせをする必要があります。よって、クラス C 未満のネットワークを管理する DNS サーバーを構築したが逆引きがうまくいかない場合は、上位 DNS サーバーに関する設定が登録されていないか、上位 DNS サーバーに該当アドレスを管理する設定が登録されていないことなどが原因として考えられます。ご利用のプロバイダがゾーンファイルの設定方法を指示している場合もありますので、詳しくはご利用のプロバイダに確認してください。

8.6.1. プライマリネームサーバーの /etc/named.conf

/etc/named.conf の文法は C 言語に類似しています。1 つのステートメントは、{...} で括られ、1 つのステートメントが終了したら、最後に必ず ; を記述します。そしてこのステートメント内にオプションを列挙して記述していきます。また、/*...*/(C言語形式)、//...(C++言語形式)、#...(スクリプト形式)はいずれもコメントと見なされます。

プライマリネームサーバーを構築する最も基本的な /etc/named.conf の設定例を以下に示します。

   |acl corpnets { 192.168.4.0/24; 192.168.7.0/24;};
(1)|options {
   |        listen-on port 53 { corpnets; };       
   |        listen-on-v6 port 53 { ::1; };       
   |        directory "/var/named";        
   |        dump-file       "/var/named/data/cache_dump.db";
   |        statistics-file "/var/named/data/named_stats.txt";
   |        memstatistics-file "/var/named/data/named_mem_stats.txt";
   |        allow-query     { corpnets; };
   |       recursion yes;
   |};
   |
   |
(2)|logging {
   |        channel default_debug {
   |        file "data/named.run";
   |        severity dynamic;
   |        };
   |
   |
(3)|zone "." {
   |        type hint;
   |        file "named.ca";
   |};
   |
(4)|zone "turbolinux.co.jp" {
   |        type master;
   |        file "turbolinux.co.jp";
   |};
   |
(5)|zone "0.168.192.in-addr.arpa" {
   |        type master;
   |        file "0.168.192.in-addr.arpa";
   |};
   |
(6)|zone "0.0.127.in-addr.arpa" IN {
   |        type master;
   |        file "named.loopback";
   |};
   |

(1) の options ステートメントは、/etc/named.conf 内に 1 つだけ指定でき、この DNS サーバーにおけるグローバルオプションを設定します。ここでの設定は、その他のステートメントにおける初期値となります。directory サブステートメントは、ゾーンファイルを格納するディレクトリを絶対パスで指定します。冒頭の acl は、IP アドレスのマッチングリストの指定です。以降、アクセス制御で利用します。(2) の logging ステートメントは、/etc/named.conf 内に 1 つだけ指定が可能で、ログに関する出力先とレベルの設定を行います。(3)〜(6) でいくつかのゾーンファイルを定義していますが、すべてこのディレクトリに格納する必要があります。Turbolinux 11 Server の初期設定は、/var/named/chroot/var/named ディレクトリです。通常、この設定を変更する必要はありません。

zone ステートメントは次に続く、" " で括られたゾーンに対する設定を記述します。つまり、(3) では、zone "."と指定されていますのでルートゾーンに対する設定を行うことを意味します。type サブステートメントで指定している hint は、ルートネームサーバーを指定するために使用される特別なゾーンのタイプです。file サブステートメントで指定された named.ca は、ルートサーバーの情報が記述されたリストファイルで、Turbolinux 11 Server では標準で用意されています。

(4) の zone "turbolinux.co.jp" では、turbolinux.co.jp ゾーンに対する設定を行います。type サブステートメントで指定している master は、プライマリネームサーバーであることを意味します。次に file サブステートメントで正引きゾーンファイルである turbolinux.co.jp を指定しています。先に options ステートメントでゾーンファイルの格納ディレクトリを指定しましたので、このファイルもこのディレクトリに格納する必要があります。

(5) の zone "0.168.192.in-addr.arpa" では、0.168.192.in-addr.arpa ゾーンに対する設定を行います。(4) と同じようにプライマリネームサーバーとして設定するため master を指定し、file サブステートメントで逆引きゾーンファイルである 0.168.192.in-addr.arpa を指定しています。

(6) の zone "0.0.127.in-addr.arpa" では 0.0.127.in-addr.arpa ゾーンに対する設定を行います。。(4) と同じようにプライマリネームサーバーとして設定するため master を指定し、file サブステートメントでは、ローカルループバックを処理するための逆引きゾーンファイルである named.loopback を指定しています。Turbolinux 11 Server では標準で named.loopback ファイルは用意されています。

注意

/var/named/chroot/var/named ディレクトリへ作成するゾーンファイルは、所有者を root、グループを named とし、アクセス権限を 644 または 640 へ設定する必要があります。

8.6.2. 正引きゾーンファイル

正引きゾーンファイルは、ホスト名(FQDN)から IP アドレスを割り出す際に参照されるゾーンファイルです。ここでは、/var/named/turbolinux.co.jp が正引きゾーンファイルになります。正引きゾーンファイルの設定例は、以下の通りです。

(1)| $TTL 1D ; 1 day
(2)| @          IN  SOA    ns.turbolinux.co.jp. root.ns.turbolinux.co.jp. (
   |                       20070829 ; Serial
   |                       3H       ; Refresh after 3 hours
   |                       1H       ; Retry after 1 hour
   |                       1W       ; Expire after 1 week
   |                       3H    )  ; Minimum TTL of 3 hours
(3)|            IN  NS     ns.turbolinux.co.jp.
   |            IN  NS     ns2.turbolinux.co.jp.
(4)|            IN  MX     10  mail.turbolinux.co.jp.
   |            IN  MX     20  mail2.turbolinux.co.jp.
(5)| ns         IN  A      192.168.0.1
   | ns2        IN  A      192.168.0.2
   | mail       IN  A      192.168.0.3
   | mail2      IN  A      192.168.0.4
   | web        IN  A      192.168.0.5
(6)| www        IN  CNAME  web.turbolinux.co.jp.
   | ftp        IN  CNAME  web.turbolinux.co.jp.
(7)| localhost  IN  A      127.0.0.1

正引き、逆引きを問わず、ゾーンファイルは必要な数だけ資源レコード(Resoure Record)を記述していきます。1 つのレコードは以下のフィールドで構成されています。

domain opt_ttl opt_class type resource_record_data

domainは、定義するゾーンのドメイン名やホスト名を記述します。次の行で記述する資源レコードの domain も同じ場合は省略することができます。

opt_ttl は、ほとんど設定されることはありません。省略時には、先頭の $TTL の値がデフォルトになります。

opt_class には、IN 以外の指定が使われることはありません。ちなみに IN は INternet の意味です。

type には、SOA、NS、MX、A、PTR、CNAME などのタイプがあり、指定したタイプにより resource_record_data の定義は異なります。これらの詳細については、上記例をもとに以下より解説します。

(1)TTL 値

外部の DNS サーバーが、この DNS サーバーのドメイン情報を保持し続けることが可能なキャッシュ時間を指定します。単位を指定しない場合のデフォルトは秒です。例は日(D)単位で指定しています。BIND9 では必ず $TTL を指定しなければなりません。また、SOA レコードにも TTL の設定がありますが、こちらの TTL では名前解決に失敗した結果を保持するネガティブキャッシュの時間を指定します。

(2)SOA(Start Of Authority)レコード

このゾーンにおけるネームサーバーの権威定義の始まりを意味します。先頭の @ は、自ドメイン(turbolinux.co.jp.)に置き換わります。ここでもその法則に従い @ を利用しています。そのため、ゾーンファイルにドメイン名を記述する場合は、最後に必ず .(ピリオド)を記述するのを忘れないでください。ピリオドがない場合はドメインが自動的に補完されてしまいます。つまり、www と記述すれば、ドメイン名が自動的に補完され www.turbolinux.co.jp となりますが、www.turbolinux.co.jp と記述すると、www.turbolinux.co.jp.turbolinux.co.jp と解釈されてしまいます。ドメイン名を記述する場合は、www.turbolinux.co.jp. と最後にピリオドを記述することに注意してください。

次の IN は、クラスの定義です。すでに述べた通り、現在では IN 以外の指定が使われることはありません。

続けてプライマリネームサーバーの FQDN(ns.turbolinux.co.jp.)を記述し、その後にサーバー管理者のメールアドレス(root.ns.turbolinux.co.jp.)を記述します。メールアドレスを記述する際は、ユーザー名とドメイン名を区切る @ を . に置き換えて記述することに注意してください。これは、前述の @ と混乱しないようにするためです。

2 行目以降は、セカンダリネームサーバーに対する様々な付加情報を定義しています。2 行目には、シリアルナンバーを指定します。数値であればどんな数字でもかまいません。通常は日付を指定する場合が多いようです。ゾーンファイルに変更を加えた場合は、他の DNS サーバーが変更されたことを知るために必ずこのシリアル値を増やす必要があります。

3 行目は、セカンダリネームサーバーがプライマリネームサーバーのゾーンファイルが変更されているかどうかをチェックする間隔を指定します。ここでは 3 時間に設定されています。

4 行目は、セカンダリネームサーバーがプライマリネームサーバーの情報更新に失敗した際に、再度チェックを行う間隔を指定します。ここでは1時間に設定されています。

5 行目は、セカンダリネームサーバーがプライマリネームサーバーからの情報更新に成功しないまま、情報を保持し続ける時間を秒単位で指定します。これ以上の時間が過ぎると、セカンダリネームサーバーの保持する情報は破棄されます。ここでは1週間に設定されています。

6 行目は、名前解決に失敗した結果を保持するネガティブキャッシュの時間を秒単位で指定します。ここでは、3 時間に設定されています。

(3)NS(Name Server)レコード

DNS サーバーの情報を定義します。DNS サーバーの FQDN を指定することで、ゾーンに対応する DNS サーバーを指定します。DNS サーバーが複数ある場合は、この例のようにその数だけ列挙します。ドメイン名の最後にピリオドを記述することを忘れないでください。また、所有者名が省略されている場合は、直前の値が適用されますので、ここでは @、つまり turbolinux.co.jp. が補完されます。よって、ここでは、turbolinux.co.jp ゾーンに対応するネームサーバーは、ns.turbolinux.co.jp であることを定義しています。

(4)MX(Mail Exchange)レコード

メールサーバーの情報を定義します。メールサーバーのFQDNを指定することで、ゾーンに対応するメールサーバーを指定します。メールサーバーの前の数値は優先順位を表します。数値の低い方が優先順位が高くなります。

(5)A(Address)レコード

ホスト名に対してIPアドレスのマッピングを定義します。例えば、ホスト名 mail2.turbolinux.co.jp の IP アドレスを 192.168.0.4 にマッピングしています。

(6)CNAME(Canonical NAME)レコード

ホスト名の別名(エイリアス)を定義します。この例では、web.turbolinux.co.jp というホストは、www.turbolinux.co.jp および ftp.turbolinux.co.jp という 2 つの別名を持つことになります。なお、別名の別名は設定できませんので注意してください。A レコードで設定したホストである必要があります。

(7)localhostの設定

ここでは、ローカルホストと IP アドレスとのマッピングを定義しています。この部分は正引きローカルループバックファイルとして別ファイルを用意する場合もありますが、正引きゾーンファイルに含めてしまってもかまいません。

8.6.3. 逆引きゾーンファイル

逆引きゾーンファイルは、IP アドレスからホスト名(FQDN 名)を割り出す際に参照されるゾーンファイルです。ここでは、/var/named/0.168.192.in-addr.arpa が逆引きゾーンファイルになります。書式は、正引きゾーンファイルと同じです。

逆引きゾーンファイルの設定例は、以下の通りです

(1)| $TTL 1D ; 1 day
(2)| @     IN SOA  ns.turbolinux.co.jp. root.ns.turbolinux.co.jp. (
   |               20070829 ; Serial
   |               3H       ; Refresh after 3 hours
   |               1H       ; Retry after 1 hours
   |               1W       ; Expire after 1 week
   |               3H )     ; Minimum TTL of 3 hours
(3)|       IN  NS   ns.turbolinux.co.jp.
   |       IN  NS   ns2.turbolinux.co.jp.
(4)|       IN  PTR  turbolinux.co.jp.
(5)|       IN  A    255.255.255.0
(6)| 1     IN  PTR  ns.turbolinux.co.jp.
   | 2     IN  PTR  ns2.turbolinux.co.jp.
   | 3     IN  PTR  mail.turbolinux.co.jp.
   | 4     IN  PTR  mail2.turbolinux.co.jp.
   | 5     IN  PTR  web.turbolinux.co.jp.

(1)TTL 値

外部の DNS サーバーが、この DNS サーバーのドメイン情報を保持し続けることが可能なキャッシュ時間を秒単位で指定します。BIND9 では必ず $TTL を指定しなければなりません。また、SOA レコードにも TTL の設定がありますが、こちらの TTL では名前解決に失敗した結果を保持するネガティブキャッシュの時間を指定します。

(2)SOA レコード

このゾーンにおけるネームサーバーの権威定義の始まりを表します。正引きゾーンファイルと同様に、先頭の @ は自ドメイン(0.168.192.in-addr.arpa.)に置き換わります。

(3)NS レコード

正引きゾーンファイルと同様に、DNS サーバーの情報を定義します。

(4)PTR レコード

ここでは、ネットワークアドレスに対応するドメイン名が turbolinux.co.jp であることを定義しています。所有者が省略されていますので 0.168.192.in-addr.arpa が補完されます。

(5)A レコード

ここでは、サブネットマスクを定義します。

注意

逆引きゾーンファイルで使用される A レコードは、正引きゾーンファイルで使用される A レコードとは意味合いが異なりますので注意してください。

(6)PTR(PoinTeR)レコード

IP アドレスに対してホスト名のマッピングを定義します。正引きゾーンファイルの A レコードでマッピングしたものと逆になります。例えば、IP アドレス 192.168.0.4 のホスト名は mail2.turbolinux.co.jp ということになります。

8.6.4. 逆引きループバックファイル

逆引きループバックファイルは、IP アドレス 127.0.0.1 からループバックホスト名である localhost を割り出すゾーンファイルです。ここでは、/var/named/loopback が逆引きループバックファイルになります。

逆引きループバックファイルの設定例は、以下の通りです。

(1)| $TTL 1D
(2)| @     IN SOA  localhost. root.localhost. (
   |               20070829 ; serial
   |               3H       ; refresh
   |               1H       ; retry
   |               1W       ; expire
   |               3H    )  ; minimum 
   | 1     IN  NS   localhost.
(3)| 1     IN  PTR  localhost.

(1)TTL 値

外部の DNS サーバーが、この DNS サーバーのドメイン情報を保持し続けることが可能なキャッシュ時間を秒単位で指定します。BIND9 では必ず $TTL を指定しなければなりません。また、SOA レコードにも TTL の設定がありますが、こちらの TTL では名前解決に失敗した結果を保持するネガティブキャッシュの時間を指定します。

(2)SOA レコード

このゾーンにおけるネームサーバーの権威定義の始まりを表します。正引きゾーンファイルと同様に、先頭の @ は 0.0.127.in-addr.arpa. に置き換わります。

(3)PTR レコード

ここでは、IP アドレスと localhost とのマッピングを行います。正引きゾーンファイルで定義したlocalhost の設定と逆のものになります。