ライン

ポイント:ネームサーバを普通に動作させる

ライン

 はじめに

bind9

 FreeBSD 7.1には BIND 9.4.2-P2が導入されています。設定さえ行えば動作を開始します。
ご存じの通り、1つのドメインに最低2つ以上のネームサーバへの登録がされている必要があります。

 その2つを一般的にプライマリ側とセカンダリ側という言い方やマスター側やスレーブ側といういい方がされます。
設定はマスター側だけを修正すれば、スレーブ側は変更されたかを定期的にチェックを行って、変更があればゾーン転送を行いシンクロするように動作します。また、マスターが倒れている間も有効期間内は、名前の解決を続けます。

 2つのネームサーバを設置するために、マスター側のネームサーバの構築についてメモを記述します。

 ネームサーバのに必要なファイルは、/etc/namedb 以下にあるファイルです。これはシンボリックリンクで参照されているだけで、このディレクトリの実体は /var/named/etc/namedb です。見ればすぐわかりますが、named.conf という設定ファイルと named.rootというファイル。そしてスレーブとの連動のためにあるキーファイルのrndc.key などのファイルです。

 インターネットには13個のrootサーバというのがあり、以下にすべてのドメインがツリー構造になっているような構図になっています。
その13のサーバのアドレスを記述しているのがnamed.rootであり、これは手動で変更修正するたぐいではありません。

# dig @j.root-servers.net . ns

などとすれば、同様の結果が参照できると思います。この13のサイトの1つでも変更になる場合には、ネットニュースなどで記事になるでしょうから、そのときにはリダイレクトで内容を更新するなどを行う程度のものです。

# dig @j.root-servers.net . ns > named.root

などのように。

 named.conf の設定ファイルが、ネームサーバ用の設定ファイルです。
 各ドメインの設定ファイルは、このファイルの中に設定が記述され、ゾーンファイルという設定ファイル名などが記述されるものになります。
ドメインの設定をするためには、named.conf に設定を数行の追加と、ゾーンファイル、そして逆引用のファイルに記述という3つの設定ファイルがあることを覚えておけば良いです。

 ゾーンファイルという言葉が出てきました。
これは、ドメインとIPアドレスを結びつけるための辞書的な内容を書いたテキストファイルのことをいいます。マスター側のサーバでこのファイルを記述し、スレーブ側のサーバは、これを定期的に参照し新しければダウンロードして反映してシンクロするのです。新旧の判断は、ゾーンファイルの中にあるSOAレコードのシリアルという数字を参照比較するのですが、これについては後述します。

 また、ゾーンファイルが ドメインごとのアドレスをIPアドレスに変換する記述を行うのに対して、IPアドレスからドメインのついたアドレスに変換する設定ファイルというものが別に1つ存在します。逆引用設定ファイルとか呼ばれているものです。これもrevというドメインのゾーンファイルということもいえると思いますが、このページの中では記述しません。

 とにかく、難しいことはほとんどなく、これらを設定するだけで、ネームサーバは勝手に動作しはじめるわけです。
FreeBSDでは、Bind 9が導入されていますので、設定だけで開始することができます。/etc/rc.conf に、まずは2行を追加するだけで動き出します。

named_enable="YES"
named_flags="-4 -c /etc/namedb/named.conf"

こんな感じです。-4 は個人的な設定で、IPv4だけで動作させるよ、ということを設定。

# ps -ax | grep named

などとすると、動作している状態かを確認することができます。

 以下に、その詳細な設定を記述することにしましょう。

 マスター側設定

導入

 OSで導入されているものの設定ファイルは /etc 以下にあります。BIND 9に関しては /etc/namedb 以下にあります。

# cd /etc/namedb/
# ll
total xx
drwxr-xr-x  3 root  wheel   2048 May 14 21:30 master
-rw-r--r--  1 root  wheel  18352 May 14 21:31 named.conf
-rw-r--r--  1 root  wheel   2970 Jan  1 20:53 named.root
-rw-------  1 bind  wheel     77 Jan 12 17:56 rndc.key
drwxr-xr-x  2 bind  wheel    512 May  2 17:51 slave

のように表示されると思います。左に dになっているのはディレクトリ。ここで唯一の設定ファイル named.conf が見つけることができます。
 masterというのは、今回設定するドメインごとに作成するゾーンファイルを置くためのディレクトリです。
眺めてみると、

# cd master/
# ll
total xx
-rw-r--r--  1 root  wheel  238 Jan  1 20:53 empty.db
-rw-r--r--  1 root  wheel  260 Jan  1 20:53 localhost-forward.db
-rw-r--r--  1 root  wheel  328 Jan  1 20:53 localhost-reverse.db

のような3つのファイルが準備されていました。

ついでなので、キーファイルの更新を先行してやっておきましょう。

# cd /etc/namedb
# rndc-confgen -a

とすることで デフォルトの rndc.key から自分用のものに更新されます。

named.confに1ドメイン分を追加

 では、named.conf を追加(修正)していきましょう。エディタはお好きなものでどうぞ。

 以前は ftpで転送して、編集後のものをアップロードして置き換えたりして使っていた時期もあります。
お好きな方法で実施してください。書籍や雑誌ではないし、この辺りの記述も割愛してしまいます。

 named.confは現状 273行の設定ファイルです。
コメントや例などが記述されているので、実際にはそんなに沢山の設定が必要なわけではありません。このままの状態でもセキュアです。
よりガチガチに設定したい場合にも対応できるので慣れてきたら追加行等を入れてオリジナルを作っていきましょう。

 まず、設定していたらおかしくなってしまいました…ということを避けるために、初期のものをコピーして残しておきます。

# cp -p named.conf named.conf.orig

を実行。

 その後は named.conf を触っていきます。

 この設定ファイルの中身では、
// で開始する行はコメント行。複数行のコメントは
/* 〜 */ で書かれた間は設定に影響のないコメントとして扱われます。

acl my-network {
                XXX.YYY.ZZZ.aaa/28;
};

options {
        directory       "/etc/namedb";
        pid-file        "/var/run/named/pid";
        dump-file       "/var/dump/named_dump.db";
        statistics-file "/var/stats/named.stats";

        recursion yes ;

        listen-on-v6 { none; };

        listen-on       {
                        192.168.0.0/24;
                        XXX.YYY.ZZZ.aaa/28;
                        127.0.0.1;
        };

        version "";

        allow-transfer {
                (ISP.xxx.yyy.zzz;
                XXX.YYY.ZZZ.aaa;
                XXX.YYY.ZZZ.bbb
        };

        allow-query {
                localhost ;
                my-network ;
        };
};

 まず、自分のネットワークについての記述を行います。
これは、後の行で Queryとして利用できるネットワークは、my-networkであると記述するために定義しているだけの行です。
XXX.YYY.ZZZ.aaa/nn については、利用中のネットワークの内容を記述してください。

 オプションの記述は、最初の部分はデフォルトのまま。
 recursion yesを指定をすると、他人から勝手にネームサーバを利用されないように限定できます。
(必要なゾーンファイルの参照はできます)

 IPv6は使わないので、その記述は noneに。
 ネームサーバとして回答することができるネットワークと、ゾーン転送を許すネットワークの記述を行います。
(ゾーンファイルの中で個別に記述することもできます)

 続いて、ログに関する記述を加えておきます。

logging {
        channel bind_log        {
        file    "/var/log/named.log" versions   3 size  2m;
        severity        dynamic;
        print-time      yes;
        print-category  yes;
        };
        category        xfer-out        {
                                bind_log;
                        };
        category        default {
                                default_syslog;
                        };
};

 細かいことは抜きで、私はこんなにしています…という程度で、記述しないで問題ありません。
以前のホームページには、詳細も書いていたかもしれませんが、この時代だし検索して出てくるでしょうから調べてみてください。

 さて、設定ファイルの最後の部分辺りに、自分で利用するドメインの記述を加えていきましょう。

zone "examle.co.jp" {
        type master;
        file "master/example.co.jp.zone";
        notify yes;
        allow-query { any ; };
};

 1つのドメインにつき、この程度です。
ドメイン名が出てくる部分の2カ所を変更してコピー&ペーストでいいでしょう。

 ここで見てわかるように、master というディレクトリの中に example.co.jp.zone という名前のファイルを記述、というものなので後でこれを加えればいいということがわかります。

ゾーンファイル を追加

 /etc/namedb/master (実際の /var/named/etc/namedb/master )以下に、ドメインごとのファイルを作成します。
1行に記述される内容をレコードと呼びます。Aレコードというのは、Aから始まる行で名前とIPアドレスの結び付けを行うものです。

■マスター
 マスターから記述していきましょう。スレーブは設定が少なく(named.confだけ)、マスター側だけにゾーンファイルの記述は行われます。

$TTL 86400
@       IN      SOA     ns.example.ne.jp. postmaster.example.jp.  (
                                2009050100 ; Serial
                                3600    ; Refresh
                                900     ; Retry
                                604800  ; Expire
                                1200 )  ; Minimum
                IN      NS      DNS1.example.ne.jp.
                IN      NS      DNS2.example.ne.jp.
                IN      A       (メールサーバのIPアドレス)
                IN      MX      10      ns.example.jp.
;
ns              IN      A       (メールサーバのIPアドレス)
                IN      MX      10      ns.example.jp.
;
www             IN      CNAME   ns
ftp             IN      CNAME   ns
mail            IN      CNAME   ns

などのように記述しておきます。上記の例では、ウェブサーバなどもメールサーバと同じIPアドレスなのでCNAMEとしています。
異なるのであれば、

www             IN      A       (ウェブサーバのIPアドレス)

のようにします。

 3行目のシリアルは、日付 YYYYMMDDnn のようにしていることが多いです。
変更があった場合には、より大きいシリアル値にしてあげる必要があるので、同じ日に修正を入れた場合には nn の部分を数値をあげて記述してあげます。
 9-10行目のNSは、明示的にネームサーバのFQDNを書いています。

■スレーブ
 スレーブは、マスターから転送して生成されるので、ゾーンファイルは作成しません。
named.conf に記述するだけで設定はしないで終わりです。

■ダイナミック

$ORIGIN .
$TTL 86400      ; 1 day
example.or.jp           IN SOA  ns.example.ne.jp. postmaster.example.or.jp. (
                                2009050100 ; serial
                                3600       ; refresh (1 hour)
                                900        ; retry (15 minutes)
                                604800     ; expire (1 week)
                                1800       ; minimum (30 minutes)
                                )
                        NS      DNS1.example.ne.jp.
                        NS      DNS2.example.ne.jp.
                        A       (メールサーバのIPアドレス)
                        MX      10 ns.example.or.jp.

$ORIGIN example.or.jp.
$TTL 60 ; 1 minute
remote                  A       192.168.255.0

$TTL 86400      ; 1 day
ftp                     CNAME   mail
mail                    A       (メールサーバのIPアドレス)
                        MX      10 mail
ns                      A       (メールサーバのIPアドレス)
                        MX      10 mail
www                     CNAME   mail

 マスターと同じつくりです。
スレーブ側のnamed.confにも1行設定があります。
 詳細は、dhisdの設定ページを参照ください。

resolv.conf

 折角、設定ファイルを作成しても、肝心な自分自身がどのネームサーバを参照するかを記述しなければなりません。
/etc/resolv.conf には

nameserver      127.0.0.1
nameserver      (スレーブ側のIPアドレス)
nameserver      (上記ISPのDNSのIPアドレス)

のように記述すればいいでしょう。スレーブ側のマシンだったら、2行目はマスター側のIPアドレスを記述すればいいですね。

 スレーブ側設定

設定

 /etc/namedb 以下にある named.conf のみの設定を加えます。

zone "example.or.jp" {
        type slave;
        file "slave/example.or.jp.bak";
        masters {
                (マスター側のIPアドレス)
        };
        allow-query { any ; } ;
};

 こんな程度で、マスター側のゾーンファイルを自動でコピーして動作する動きになります。
キーの作成や、ログの指定などについてはマスターと同様に設定しますが、この辺りは割愛しますので設定はしてください。

 resolv.conf の設定も忘れずに行ってください。

【改訂履歴】作成:2009/01/10
2009/06/05 … Namazu検索の窓を追加
【参考リンク】
ISC BIND … BINDのオフィシャルページ

デル株式会社

Copyright © 1996,1997-2006,2007- by F.Kimura,