DNSサーバ bind の設定

・ bindについて

DNSサーバとしては bind が多く利用されています。FreeBSDでも 標準でインストールされます。ここでは基本的な名前解決の方法と, 複数のドメインサーバとしての設定,セカンダリネームサーバとしての 設定などを説明します。

最新の bind は、ipv6 にも対応している(らしい?) のですが、TOMOsan には 全く未知の領域ですので、ここでは一切ノータッチです。

・ bind の設定ファイル

bindを動かすためには下記ファイルの設定が必要です。ここではドメイン名を mydomain.com、IPアドレスを[192.168.123.0/255.255.255.0]、 ホスト名を ns.mydomain.com と仮定しています。

/etc/namedb/named.root       (変更する必要はありません)
/etc/namedb/named.conf
/etc/namedb/localhost.rev
/etc/namedb/s/mydomain.zone
/etc/namedb/s/mydomain.rev

/etc/namedb/s ディレクトリは,セキュリティの確保のため 所有者は bind.bind,パーミッション 750とするように推奨されています。
ユーザ bind [UID:53],グループ bind [GID:53] は,FreeBSDでは デフォルトで登録されています。

mkdir /etc/namedb/s
chown bind.bind /etc/namedb/s
chmod 750 /etc/namedb/s

としてください。


・ bind 全体の設定

bind の基本設定は、/etc/namedb/named.conf ファイルで行います。 名前解決をするドメインの指定、さらに上位の DNSサーバへの問い合わせ、 セカンダリDNSサーバの指定などをここで設定します。
以下、named.conf の内容です。


options {
    directory "/etc/namedb";
//  forward only;      // スレーブ DNSにする場合コメントアウト
    forwarders {
        172.34.56.1;   // 利用できる上位 DNSサーバを指定
    };
};

最初の一行は named が使用するディレクトリを指定します。
名前解決をする際に、より上位のDNSサーバが利用できる場合は、 forwarders {...} に記載します。 この行が無くても DNSサーバとして動作しますが、起動してかなり時間が 経過して学習しないと、なかなか使い物になりません。
なお、自前では一切名前解決を行わずに、スレーブ DNSサーバとして設定 する場合には、forward only のコメントをはずしてください。

zone "." {
    type hint;
    file "named.root";
};

一般ドメイン(自ドメインでない)の名前解決の指定を行います。上記のとおりで 特に変更の必要は無いと思います。

// localhost に対する逆引きを設定します
zone "0.0.127.IN-ADDR.ARPA" {
    type master;
    file "localhost.rev";
};

localhost 127.0.0.1 に対する逆引きの設定ファイルを指定します。
ここの記述も特に変更する必要はありません。localhost.rev については 以下で詳述します。


*続いて独自ドメインの設定を行います

正引き(ホスト名からIPアドレスに変換)、と逆引き(IPアドレスからホスト名に変換) の設定を行います。
バーチャルドメインを構築するときは、正引きファイルをドメインの数だけ 用意します。逆引きは 同じIPアドレスに対しては正規のファイルひとつだけで 構いません。

// 正引きファイル
zone "mydomain.com" {
    type master;
    file "s/mydomain.zone";
};
// 逆引きファイル
zone "123.168.192.in-addr.arpa" {
    type master;
    file "s/mydomain.rev";
};

もし他に名前解決を行うドメインがある場合は以下の内容を追加します (オプショナル)

// 他ドメイン(バーチャルドメイン等) ... 必要があれば!
zone "anotherdomain.org" {
    type master;
    file "s/anotherdomain.zone";
};

他ドメインのセカンダリーDNSサーバとして設定する場合は以下の行を加えます (オプショナル)

zone "myfriends.org" {
    type slave;                // ここを slave に変えます
    file "s/myfriends.zone";   // ファイル名のみを指定します
    masters {
      192.168.100.1;           // プライマリサーバのアドレスです
    }
};

セカンダリーDNSにする場合は、担当するドメイン名と'type slave' を記述 します。これらの設定ファイルは、名前を指定しておけば、次の起動時に masters で指定した プライマリーDNSサーバから自動的に設定を読み込んできて 作成されます。
上記ファイルがきちんと作成されていれば、セカンダリーDNSサーバとして 正しく動作していることになります。

以上の内容は全て /etc/namedb/named.conf に記述してください。

ちなみにスレーブDNS とセカンダリーDNS は全く別物ですので間違えないように してください。
インターネットに公開するサーバではDNSの構成上 セカンダリーDNS 設置が義務付けられています。


・ 個々のゾーンファイルの設定

まず、localhost(127.0.0.1)に対する逆引きファイルの設定を行います。

これは、システムインストール時に付属するファイルから簡単に作成することが 出来ます。これら設定ファイルの中で、個々のホスト名を記述するときは、 必ず最後にピリオド '.' を付加する必要が あります。 bind は他のアプリケーションとは異なり、このピリオドでホスト名が FDQN であることを認識します。ピリオドが無い場合は、ホスト名が単独で記述 されているものとして後にドメイン名を補いますので、混乱を避けるためにも 必ず最後に ピリオド をつけておきましょう。


まずlocalhostに対する逆引きファイル(localhost.rev) の設定です。 このファイルは、端末のネットワークの設定がうまく出来ている場合、 付属するスクリプトで自動的に作成することが出来ます。

 cd /etc/namedb
 ./make-localhost

localhost.rev の内容です

; /etc/namedb/localhost.rev
;       From: @(#)localhost.rev 5.1 (Berkeley) 6/30/90
; $FreeBSD: src/etc/namedb/PROTO.localhost.rev,v 1.4.2.1
;      1999/08/29 14:19:29 peter Exp $
;
; This file is automatically edited by the `make-localhost' script in
; the /etc/namedb directory.
;
@     IN    SOA     ns.mydomain.com.  postmaster.mydomain.com. (
                            2001082501      ; Serial
                            7200            ; Refresh 2 hours
                            1800            ; Retry 30 min
                            1209600         ; Expire
                            86400 )         ; Minimum
              IN    NS      ns.mydomain.com.
1             IN    PTR     localhost.mydomain.com.

このファイルでは、127.0.0.1に対する設定1つだけです。


・ 独自ドメイン(mydomain.com)の設定

1つのドメインに付き 正引きファイルと逆引きファイルを一つずつ用意します。 named.conf で指定したファイル名に用意します。ここでは、mydomain.zone と mydomain.rev とします。


まずは、正引きファイル mydomain.zone の内容です

;   /etc/namedb/s/mydomain.zone
;   2001 August 25  by TOMOsan
;
@     IN    SOA     ns.mydomain.com.  postmaster.mydomain.com. (
                            2001082501      ; Serial
                            7200            ; Refresh 2 hours
                            1800            ; Retry  30 minutes
                            1209600         ; Expire 14 days
                            86400 )         ; Minimum TTL 1day
              IN    NS      ns.mydomain.com.

localhost     IN    A       127.0.0.1

@             IN    MX      10 mail.mydomain.com.

ns            IN    A       192.168.123.2
desktop       IN    A       192.168.123.3
notepc        IN    A       192.168.123.5
mail          IN    CNAME   ns.mydomain.com.
proxy         IN    CNAME   ns.mydomain.com.
www           IN    CNAME   desktop.mydomain.com.
....

続いて、逆引きファイル mydomain.rev の設定です

;   /etc/namedb/s/mydomain.rev
;   2001 August 25  by TOMOsan
;
@     IN    SOA     ns.mydomain.com.  postmaster.mydomain.com. (
                             2001082501      ; Serial
                             7200            ; Refresh 2 hours
                             1800            ; Retry  30 minutes
                             1209600         ; Expire 14 days
                             86400 )         ; Minimum TTL 1day
              IN    NS      ns.mydomain.com.

@             IN    A       255.255.255.0

2             IN    PTR     ns.mydomain.com.
3             IN    PTR     desktop.mydomain.com.
5             IN    PTR     notepc.mydomain.com.
....

@ は そのファイルが設定するドメイン名を示します。 この例では mydomain.com を意味します。

SOA (Start of Authority) が記述されている部分は、そのドメインに 関する情報を記述します。ドメイン名、そのドメインの責任者のメールアドレス を @ でなく ドットで区切って記載します。その後の数字は、DNS の有効期間等 を示すもので、このまま記載して構いません。ただし、内容を更新した場合には 最初の設定項目(シリアル値)を、より大きな値に直す必要があります。通常 シリアル値は (日付 + 数値) とすることで、大小の一貫性を保つように します。

NS このドメインを管理する ネームサーバの名称を指定します。

MX この行で、@ 宛てのメール つまりこのドメイン宛てのメールは MX で指定するホストが配送することを示します。 xxxx@mydomain.com という メールは、mail.mydomain.com が処理することを意味します。それ以外の ホスト名を指定した xxxx@desktop.mydomain.com 形式のメールは、 ホスト desktop.mydomain.com が受け取ることができるなら、直接 desktop へ 送られます。

A この行で 左に記載されたホスト名の実際のIPアドレスを指定します。 ホストが増えた場合やIPアドレスが変更になった場合は、この部分を変更すれば いいことになります。

CNAME (Cannonical Name) ここでホストの別名を定義します。上記設定 ファイルで、wwww の行は、desktop というホストに wwwという別名を与える ことを意味します。つまり www.mydomain.com でアクセスされた場合、desktop が指定されたことになります。

PTR この行には 逆引きを記述することを示します。このゾーンが受け持つ アドレスの中で、IPアドレスの末尾の値から、対応するホスト名を指定します。

・ bind の起動

DNSサーバとして動かすため、/usr/sbin/named を起動させます。
直接コマンドから起動しても構いませんが、システムの起動時に自動的に実行 されるように、/etc/rc.conf ファイルに以下の内容を追加します。

/etc/rc.conf
named_enable="YES"                      # Run named
named_program="named"
named_flags="-u bind -g bind"           # Flags for named

既に named が起動している場合は、ps -axでプロセス番号を確認してください。 以下のように表示されていれば namedデーモンは起動しています。

 ps -ax
  PID  TT  STAT      TIME COMMAND
    0  ??  DLs    0:01.47  (swapper)
    1  ??  Is     0:00.06 /sbin/init --
  .....
  121  ??  Ss     0:30.64 syslogd
  126  ??  Is     4:16.48 named -u bind -g bind

この場合、/etc/namedb/ 以下の設定ファイルを変更した場合、 kill -HUP pid するか、システムを再起動してください。


・ DNSサーバの動作チェック

bind が起動したら、正しく名前解決が出来ているかどうかチェックする必要が あります。チェックには nslookup コマンドを使用します。

 nslookup [server DNSサーバ]   (サーバ名はオプション)

サーバ名を指定しなかった場合は、resolv.confで指定されているデフォルトの DNSサーバが使用されます。プロンプト '>' に続いて調べたい ホスト or IPアドレスを入力します。終了は exit です。


nslookup                             # コマンドを起動
Default Server:  ns.mydomain.com     # -> DNSサーバ名
Address:  192.168.123.2              # -> DNSサーバアドレス

> desktop                            # 調べたいホストを入力
Server:  ns.mydomain.com
Address:  192.168.123.2

Name:    desktop.mydomain.com        # -> FQDN で表示される
Address:  192.168.123.3              # -> 解決したアドレスを表示

> www.mydomain.com                   # FQDN で入力してみる
Server:  ns.mydomain.com
Address:  192.168.123.2

Name:    desktop.mydomain.com        # -> 実名のFQDNが返される
Address:  192.168.123.3              # -> 解決したアドレス
Aliases:  www.mydomain.com           # -> CNAMEで指定されたエイリアス

> 192.168.123.5                      # IPアドレスから調べる
Server:  ns.mydomain.com
Address:  192.168.123.2

Name:    notepc.mydomain.com         # -> 正しく逆引きが出来ている
Address:  192.168.123.5

> 192.168.123.10                     # 存在しないIPを指定してみる
Server:  ns.mydomain.com
Address:  192.168.123.2

*** Request to ns.mydomain.com timed-out  # -> 見つからなかった

自ドメインでの名前解決ができたら、ひととおり DNSサーバとして 機能していることになります。 ここで、念のため外部アドレスの名前解決 を行っておくといいでしょう。

> www.tomosan.org                    # tomosan.org を調べてみる
Server:  ns.mydomain.com
Address:  192.168.123.2

Name:    ns.tomosan.org              # -> 実マシン名が返される
Address:  211.8.153.123              # -> 解決したIPアドレス
Aliases:  www.tomosan.org

> 150.46.30.11                       # 岡山大学のアドレスを調べる
Server:  ns.mydomain.com
Address:  192.168.123.2

Name:    scalar.cc.okayama-u.ac.jp   # -> 正しく逆引きできた
Address:  150.46.30.11

> exit                               # 終了する

ここまでのチェックが正しくできていれば、以上で DNSサーバの設定は終わりです。
余裕があれば、他ドメインの名前解決や、セカンダリDNSサーバの設定を行って みてください。


(参考) nslookup コマンドは 直接調べたいホストを引数にすることが出来ます。

nslookup www.nhk.or.jp               # 直接ホスト名を指定して起動
Server:  ns.mydomain.com
Address:  192.168.123.2

Name:    www.nhk.or.jp
Address:  202.214.202.101            # 結果を表示して終了します

TOMOsan Top Page に戻る
パソコン・プログラミングに戻る


Copyright(c) 2001 Tomohiko Saito. All rights reserved.
last update :