トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

bind

[server] [linux]

summaryプラグインは存在しません。

参考リンク集

インストール

# apt-get install bind9 bind9-doc bind9-host

9.2.3+9.2.4-rc2-1をインストールしました。

ネットワーク構成

今回構築するDNSサーバは当然LAN内限定で使用するものです。うちのネットワーク構成は大体こんな感じになっています。notepc1, notepc2はdhcpでIPアドレスを割り振るので、ホスト名解決すれば良いマシンはjona, munky, kazzの合計3台です。こいつらをhostsファイルに書かずに名前解決できるように設定します。

                      +----------------+
                      |  The Internet  |
                      +----------------+
                               |
                               |
LAN(192.168.1.0/24) -----------------------------------
                       +----------------+
                       |    router      |
                       +----------------+
                           192.168.1.1
                               |
   +--------+--------+---------+-----------+----------+
   |        |        |                     |          |
  jona     munky    kazz                notepc1   notepc2
(Linux)   (Win)    (Linux)               (Win)     (Win)
   2        10       102                 ??         ??

ちなみにドメイン名は外部からも見える[1]kazz.homeunix.orgにします。つまり、jonaのFQDNは"jona.kazz.homeunix.org"になります。

設定

debianでのbindの設定ファイルは/etc/bind配下にまとめられています。通常はnamed.confを修正していくのですが、自前のzoneの定義はnamed.conf.localにまとめておくのがdebian流のようです(named.conf.localがnamed.confからincludeされている)。ちなみに、 options {}の定義はnamed.conf.optionsに書きます。

 まずはnamed.confから

自分で定義するzoneはnamed.conf.localに書くので、 zone "." 以外はすべてコメントアウトしました。

 named.conf.local

まずアクセス制御の設定です。LAN内のマシンと自分自身からのみ問い合わせ可能とします。

acl localnet {
  192.168.1.0/24;
  127.0.0.1;
};

次はループバックアドレス正引き、逆引き用の設定です。

zone "localhost" {
  type master;
  file "/etc/bind/local.zone";
};

zone "0.0.127.in-addr-arpa" {
  type master;
  file "/etc/bind/local.rev";
};

ここからはkazz.homeunix.org zoneの正引き、逆引きの設定です。

zone "kazz.homeunix.org" {
  type master;
  file "/etc/bind/kazz.homeunix.org.zone";
};
                                                                              
zone "1.168.192.in-addr.arpa" {
  type master;
  file "/etc/bind/kazz.homeunix.org.rev";
};

こいつらを記述し終わったら、各zoneのfileで指定したファイルを作成します。ここで作成するファイルの内容がzone内のマシンの名前解決に用いられます。

zoneファイルの作成

 zone localhost

/etc/bind配下にlocal.zoneというファイルを作成します。これはlocalhost->127.0.0.1の正引き情報を提供します。内容は下記そのままでOK。

$TTL    86400
@       IN      SOA     localhost. root.localhost. (
       2004052901      ; serial
       28800           ; refresh 8hr
       14400           ; retry 4hr
       604800          ; expire 1w
       86500           ; negative cache TTL 24hr
)
@       IN      NS      localhost.
@       IN      A       127.0.0.1

 zone 0.0.127.in-addr-arpa

/etc/bind配下にlocal.revというファイルを作成します。これは127.0.0.1->localhostの逆引き情報を提供します。これも内容はそのままでOK。

$TTL 86400
@    IN   SOA  localhost. root.localhost. (
       2004052901      ; serial
       28800           ; refresh 8hr
       14400           ; retry 4hr
       604800          ; expire 1w
       86500           ; negative cache TTL 24hr
)
     IN   NS   localhost.
1    IN   PTR  localhost.

 zone kazz.homeunix.org

kazz.homeunix.orgのzoneはLAN内で使用するドメインのzoneです。kazz.homeunix.org.zoneファイルを作成します。これはそれぞれのマシン環境によって異なります。1行目の括弧の前にはこのzoneの管理者のメールアドレスを記述します。ただし、 @ は . に置き換えるのと、最後にドットをつける必要があるので、メールアドレスが hoge@fuga.com の場合、 hoge.fuga.com. となります。詳しくは参考リンクの@ITの記事を読んでください。

@       IN      SOA     kazz.kazz.homeunix.org. kazuhiro.kazz.homeunix.org. (
       2004052902      ; serial
       3600            ; refresh 1hr
       900             ; retry 15min
       604800          ; expire 1w
       86500           ; negative cache TTL 24hr
)
                IN      NS      kazz.kazz.homeunix.org.
@               IN      A       192.168.1.102
kazz            IN      A       192.168.1.102
jona            IN      A       192.168.1.2
munky           IN      A       192.168.1.10

 zone 1.168.192.in-addr.arpa

次は定義するドメインの逆引き用の設定ファイル kazz.homeunix.org.rev を作成します。

$TTL 86400
@       IN      SOA     kazz.kazz.homeunix.org. kazuhiro.kazz.homeunix.org. (
       2004052901      ; serial
       3600            ; refresh 1hr
       900             ; retry 15min
       604800          ; expire 1w
       3600            ; negative cache TTL minimum
)
        IN      NS      kazz.kazz.homeunix.org.
102     IN      PTR     kazz.kazz.homeunix.org.
2       IN      PTR     jona.kazz.homeunix.org.
10      IN      PTR     munky.kazz.homeunix.org.

named.conf.optionsの修正

named.conf.optionsに options での定義を追加します。主にセキュリティ関連の設定です。localnetというのは acl で定義したものを使用します。(つまり192.168.1.0/24と127.0.0.1)

       // 内部マシンからの問い合わせを外部に対しても行う
       recursion yes;
       allow-recursion {
           localnet;
       };
                                                                             
       // ゾーン転送は行わない
       allow-transfer {
           none;
       };
                                                                             
       // 問い合わせは内部マシンからだけ
       allow-query {
           localnet;
       };

       // bindのバージョン番号を表示しない
       version "DNS Server";

起動してみよう

zoneファイルを全て作成したら、bindを起動してみます。debianでは/etc/init.d/bind9スクリプトを使用します。が、その前にnamedデーモンを bind ユーザで起動するように修正します。具体的には、/etc/init.d/bind9を下記のように修正します。

OPTIONS=""
   ↓
OPTIONS="-u bind"

では起動しましょう。

# /etc/init.d/bind9 start

起動後に、 # ps aux | grep named してみて、namedデーモンが起動していればOKです。起動してない場合は、/var/log/daemon.logを見て、うまくいかなった理由を調べてください。

あれ? デーモンが止められない

namedデーモンを止めようと思うと、下記のように怒られます。あんまり良くわかってないのですが、bind9はrndcという機構を使ってデーモンの制御を行うみたいです。んで、このrndcというやつが認証用の鍵を必要としているらしいのですが、その鍵が不正だよ〜んと言っているみたいです。

Stopping domain name service: namedrndc: connection to remote host closed
This may indicate that the remote server is using an older version of
the command protocol, this host is not authorized to connect,
or the key is invalid.

とりあえず、

# killall named

すれば回避出来るのですが、あまりにもアドホックなのでちゃんと設定してみます。まずは認証用の鍵を作成し、/etc/bind/rndc.confにその鍵を登録します。

# cd /etc/bind
# rndc-confgen -r /dev/random > rndc.conf

これを行うと、rndc.confというファイルができあがります。んで、このファイルの下の行はコメントアウトされているのですが、このコメント部分をそっくりnamed.conf.localにでもコピーして、コメントアウトを解除します。(# Use with ... から # End of named.conf の行まで)

終わったら、rndc.confの所有者とパーミッションを変更します。

# chown bind:bind rndc.conf
# chmod 600 rndc.conf

では気を取り直してnamedデーモンを立ち上げて、落としてみましょう。

# /etc/init.d/bind9 start
# /etc/init.d/bind9 stop

これで先ほどのエラーがでなければOKです。念のためログも確認してみましょう。

named[4198]: stopping command channel on 127.0.0.1#953
named[4198]: no longer listening on 127.0.0.1#53
named[4198]: no longer listening on 192.168.1.102#53
named[4196]: exiting

と出ていればOKです。

resolv.confの修正

bindが動いているマシンでは、下記のようにローカルドメインにDNSで作成したzoneのドメイン名を、自分自身をDNSサーバとして指定します。

domain kazz.homeunix.org
nameserver 127.0.0.1
nameserver プロバイダ提供のDNS

jonaなどのクライアントマシンは下記のように、bindが動いているサーバを第1のDNSサーバとします。

nameserver 192.168.1.102
nameserver プロバイダ提供のDNS

また、私はhostnameをFQDNにしました。

# echo "jona.kazz.homeunix.org" > /etc/hostname
# hostname jona.kazz.homeunix.org

動作確認

とりあえず、@ITの記事を参考にしてください、ということで...

  • [1]dyndnsにのDynamic DNSを利用している