DNSサーバー(BIND)のインストール


DNSサーバーのインストールです。

 今回DNSを導入する目的は外部に公開する為ではありません、ローカルで使うだけです。従って公開を目的としている場合はあまり参考にならないと思います。
僕のサーバーはダイナミックDNSのサービスを使っている為、xxx.ryouto.jpの名前解決はそこで運用されるDNSサーバーで行われています。従って、仮にDNSサーバーを公開しても、意味がありません。

インストールの流れは次のようになります。
作業は全てrootで行います。
  1. ソースコードのダウンロード
  2. make及びインストール
  3. BINDサービス用ユーザー作成
  4. named.confファイルの設定
  5. ゾーンファイルの設定
  6. resolv.conf、hostsファイルの設定
  7. サーバー管理ツール(rndc)の鍵の生成
  8. 起動スクリプトの作成
  1. ダウンロード
    http://www.isc.org/products/BIND/より最新のソースコードをダウンロードします。
    現在のバージョンでは、bind-9.2.2.tar.gzです。
  2. make及びインストール
    ダウンロードしたアーカイブは/usr/local/srcにある事として手順を説明します。
    まずはアーカイブを解凍します。
    [
    root src]# tar zxvf bind-9.2.2.tar.gz
    [root src]# cd bind-9.2.2
    configureを行います。prefixや、sysconfdirはデフォルト(指定しない)でもよいです。
    [root bind-9.2.2]# ./configure --prefix=/usr/local/bind-9.2.2 --sysconfdir=/etc
    makeして、インストールです。
    [
    root bind-9.2.2]# make depend
    [
    root bind-9.2.2]# make all
    [
    root bind-9.2.2]# make install
    インストールしたディレクトリにシンボリックリンクを張ります。
    [
    root bind-9.2.2]# cd /usr/local
    [
    root local]# ln -s bind-9.2.2 bind

  3. BINDサービス用ユーザー作成
    BIND用のユーザーを作成します。
    これは不正アクセス時の被害を最小限に押さえるためです。
    [root /root]# groupadd -g 709 named
    [
    root /root]# useradd -u709 -g 709 -d /var/named -s /bin/false named
    グループID、ユーザーIDは特に指定する必要はありません。
    指定しないと気が済まないだけです。(-_-;)
    -d /var/named オプションを指定し、ホームディレクトリを指定します。
    このユーザーでログインする事はないので、-s /bin/falseオプションを指定します。/bin/falseを指定するとログインや、コマンドを使えなくなります。
  4. named.confファイルの設定
    設定ファイルの一つnamed.confを作成します。
    このファイルは/var/named/ディレクトリに作成して下さい。
    key,controlsのセクションは後で説明しますが、管理ツールで使用します。
    optionsのdirectoryはゾーンファイルの配置するディレクトリで、pid-fileはpidファイルを指定します。
    実際にはゾーンファイルの配置ディレクトリは/var/namedですが、起動時に-tオプション(チェンジ・ルート・ディレクトリオプション)を指定するため、/var/namedディレクトリが/として扱われます。そのため、/var/namedをルートディレクトリとして、ディレクトリを指定します。起動時に-tオプションを指定しない場合は、そのまま/var/namedと指定します。
    key "rndc-key" {
        algorithm hmac-md5;
        secret "qpBt4e8VSpFLWdVkD0AlRRq=";
    };

    controls {
        inet 127.0.0.1 port 953
        allow { 127.0.0.1; } keys { "rndc-key"; };
    };

    options {
        directory "/";
        pid-file "run/named.pid";
        allow-transfer { 
            192.168.0/24;
            127.0.0.1;
        };
        allow-query {
    ここで、ローカルネットワークのみ問い合わせを許可します。ちなみにanyを指定すると制限が無くなります。
            192.168.0/24;
            127.0.0.1;
        };
        forwarders {
            202.224.32.1;  
    自分自身で解決できない場合にここで指定したサーバーに問い合わせます。プロバイダのDNSサーバーを指定します。
        };
        forward only; 上
    のサーバーに問い合わせして回答を得られなくてもルートサーバーには問い合わせしません。従って、zone"."は意味ないかも...。
    }
    ;
    zone "." {
        type hint;
        file "root.cache";
    };

    zone "ryouto.jp" {   
    本ドメインの正引き用
        type master;
        file "ryouto.jp";
        notify no;
    };

    zone "0.168.192.IN-ADDR.ARPA" {    
    逆引き用です。
        type master;
        file "192.168.0";
        notify no;
    };

    zone "0.0.127.IN-ADDR.ARPA" {
        type master;
        file "named.local";
    };

    作成したらnamed-checkconfを使って誤りがないかチェックします。
    エラーがあるとこのように表示されます。
    [root /root]# cd /var/named
    [
    root named]# /usr/local/bind/sbin/named-checkconf
    /etc/named.conf:24: parse error near }


  5. ゾーンファイルの設定
    今回、192.168.0.100上にnamedサーバーを立ち上げます。
    また、このマシンはwww.ryouto.jpとして登録し、smtp.ryouto.jpやpop.ryouto.jpなどの別名も設定します。
    要するには、この1台でwww、smtp、popのサービスを起動します。


    次にゾーンファイルを作成します。
    作成すべきファイルはnamed.conf内でzoneセクションで指定された項目です。
    /var/named/root.cache
    /var/named/ryouto.jp
    /var/named/192.168.0
    /var/named/named.local

    ■/var/named/root.cache
    ルートのキャッシュはftp://rs.internic.net/domain/named.root(ここはPASVモードだとつながりませんでした。)や、ftp://ftp.rs.internic.net/domain/named.rootより取得可能です。
    取得したものをそのまま/var/named/root.cacheとします。

    ■/var/named/ryouto.jp

    @ IN SOA www.ryouto.jp. root.www.ryouto.jp. (
             2003021101 ;Serial
             3600           ;Refresh
             900            ;Retry
             3600000      ;Expire
             3600           ;Minimum
            )

            IN     NS      www.ryouto.jp.

    www         IN            A           192.168.0.100
    @             IN          MX   10     www.ryouto.jp.
    @             IN          NS           www.ryouto.jp.
    smtp         IN          CNAME     www.ryouto.jp.
    pop           IN          CNAME     www.ryouto.jp.
    localhost    IN          A             127.0.0.1

    ■/var/named/192.168.0

    @ IN SOA www.ryouto.jp. root.www.ryouto.jp. (
                  2003021101 ;Serial
                  3600 ;Refresh
                  900 ;Retry
                  3600000 ;Expire
                  3600 ;default ttl
                  )
    100        IN       PTR     www.ryouto.jp.
    @           IN       NS       www.ryouto.jp.

    ■/var/named/named.local
    @ IN SOA www.ryouto.jp. root.www.ryouto.jp. (
                   2003021101 ;Serial
                   3600 ;Refresh
                   900 ;Retry
                  3600000 ;Expire
                   3600 ;default ttl
                   )
    1         IN      PTR        www.ryouto.jp.
    @         IN       NS        www.ryouto.jp.
    ゾーンファイルを全て作成したら誤りがないかチェックします。
    エラー表示がなければOKです。
    [root named]# /usr/local/bind/sbin/named-checkzone ryouto.jp /var/named/ryouto.jp

  6. resolv.conf、hostsファイルの設定
    /etc/resolv.confにDNSサーバーの設定をします。
    nameserver 192.168.0.100
    /etc/hostsファイルに検索順序を指定します
    order hosts, bind

  7. サーバー管理ツール(rndc)の鍵の生成
    [root named]# /usr/local/bind/sbin/rndc-confgen -a
    [
    root named]# /usr/local/bind/sbin/rndc-confgen > rndc.conf
    rndc.confの中の設定をnamed.confにコピーします。
    # Start of rndc.conf
            key "rndc-key" {
            algorithm hmac-md5;
            secret "qpBt4e8VSpFLWdVkD0AlRRq=";
    };

    options {
            default-key "rndc-key";
            default-server 127.0.0.1;
            default-port 953;
    };
    # End of rndc.conf

    # Use with the following in named.conf, adjusting the allow list as needed:
    ↓ここから下の設定をnamed.confファイルの先頭にコピーします。コピーする際に#は消してください。コピーした例を先のnamed.confに記載しています。
    # key "rndc-key" {
    #         algorithm hmac-md5;
    #         secret "qpBt4e8VSpFLWdVkD0AlRRq=";
    # };
    #
    # controls {
    #         inet 127.0.0.1 port 953
    #         allow { 127.0.0.1; } keys { "rndc-key"; };
    # };

    ↑ここまで
    # End of named.conf
    これでrndcが使用可能になります。
    サービス起動後に試して下さい。以下にステータスを取得する例を挙げておきます。
    [root named]# /usr/local/bind/sbin/rndc -c /var/named/rndc.conf status      
    number of zones: 5
    debug level: 0
    xfers running: 0
    xfers deferred: 0
    soa queries in progress: 0
    query logging is OFF
    server is up and running

  8. 起動スクリプトの作成

    namedの起動ですが、セキュリティーを考え、実行時に/var/namedにチェンジルートディレクトリして実行します。その為、namedの起動に必要なファイルは/var/namedディレクトリ以下にある必要があります。

    以下、簡単にオプションの説明です。
    -t オプションはchrootです。
    この場合/ディレクトリが/var/namedになるため、それ以外のディレクトリは参照できません。
    named.conf内で指定するディレクトリなどもこの設定に従うため directory "/var/named"などの項目は/var/named/var/namedと解釈されますので注意して下さい。
    したがって、全ての設定ファイルで使用するディレクトリは-tオプションのディレクトリから考えます。
    -c はnamed.confの指定です。ファイルパスや、ファイル内の設定値は-tオプションに依存します。
    -u 起動ユーザーです。
    -i pidファイルの指定です。-tオプションに依存します。

    起動する前に、/var/named/runディレクトリは作成しておいて下さい。
    また、rootユーザーで作業をしていた為、/var/namedディレクトリ以下にあるファイルがroot所有になっていると思うので、全てnamedユーザー所有に変更して下さい。(忘れるとnamedを起動出来ません!)
    PIDファイルの保存先用に/var/named/runディレクトリを作成します。
    [
    root named]# mkdir /var/named/run
    /var/namedディレクトリ以下のファイルの所有者をnamedに変更します。
    [
    root named]# chown -R named:named *
    ここまでで/var/namedディレクトリ以下にあるファイルは以下の通りです。全てそろってますか?また、全てnamedユーザー/グループ所有になっていますか?
    root.cache   ルートキャッシュファイル
    ryouto.jp   正引きファイル
    192.168.0    逆引きファイル
    named.local  ローカルアドレス用
    named.conf  namedのコンフィグレーションファイル
    rndc.conf     rndcツールのコンフィグレーションファイル
    run/           runディレクトリ(named.pidファイル用)

    /etc/rc.d/init.d/namedを作成します。
    作成したファイルには実行権限を与えておく必要があります。
    #!/bin/sh

    # Source function library.
    . /etc/init.d/functions


    ARGS="-t /var/named -c named.conf -u named -i /run/named.pid"
    SBINDIR=/usr/local/bind/sbin

    [ -f ${SBINDIR}/named ] || exit 0

    case "$1" in
        start)
            echo -n "Starting Bind ..."
            daemon ${SBINDIR}/named ${ARGS}
            touch /var/lock/subsys/named
            echo done.
            ;;
        stop)
            echo -n "Shutdown Bind ..."
            killproc named
            rm -f /var/lock/subsys/named
            echo done.
            ;;
        status)
            status named
            ;;
        restart)
            $0 stop
            $0 start
            ;;
        *)
            echo "Usage: $0 { start | stop | restart }"
            exit 1
        ;;
    esac
    exit 0

    最後にrunlevelの設定です。
    [root init.d]#cd ../rc3.d/
    [
    root rc3.d]# ln -s ../init.d/named S83named
    [
    root rc3.d]# cd ../rc5.d/
    [
    root rc5.d]# ln -s ../init.d/named S83named
    [
    root rc5.d]# cd ../rc6.d/
    [
    root rc6.d]# ln -s ../init.d/named K07named
    [
    root rc6.d]# cd ../rc0.d/
    [
    root rc0.d]# ln -s ../init.d/named K07named
以上で終了です。(^_^)v

お問い合わせはwebmaster@ryouto.jpまで。
Copyright (C)2003 ryouto.jp. All Rights Reserved.