*BIND [#r36f935d]
[[BIND>+http://www.isc.org/downloads/bind/]]
Linux上にDNSサーバ(名前解決)を構築する為のミドルウェア。
~
*インストール [#n8ab718e]
&size(16){&font(b){0. アンインストール};};
インストール済みのBINDが残ったまま新しいBINDを入れると、
後に起動問題とかで面倒くさい事になるので、事前にアンインストールをしておく。
 $ yum remove bind bind-libs bind-chroot bind-devel bind-devel
 $ ldconfig
~
&size(16){&font(b){1. ビルド・インストール};};
事前に最新版のBINDをダウンロードしておく事。
今回は[[OpenSSL:+http://www.ns-lab.org/wiki/?Linux%2FSource%2FOpenSSL]]をソースからインストールしてある事と、
BINDをchroot環境で動作させる事とする。
また、./configureかける時に、普通はオプションとかを直接打ち込むのだが、
今回は長めのオプションを指定するので、オプションコマンドを別ファイルにしておく。
 $ tar zxvf bind-9.10.1.tar.gz
 $ echo "--prefix=/usr/local/bind-9.10.1 --with-openssl=/usr/local/openssl --enable-threads --enable-ipv6 --with-pic --disable-static --disable-openssl-version-check --disable-isc-spnego --enable-largefile --enable-chroot" > ./configure.option
 $ cd bind-9.10.1
 $ ./configure `cat ../configure.option`
 $ make
 $ make install
 $ cd /usr/local
 $ ln -s /usr/local/bind-9.10.1 ./bind
~
&size(16){&font(b){2. ユーザとディレクトリの作成};};
ソースからインストールした場合、ユーザやchrootディレクトリも自作する必要がある。
さらに言うと、initファイルやnamed.confも1から自作する必要がある。
※コンフィグのひな形は"FAQ"に書いてあるが、完成形コンフィグではない点に注意。
~
今回は以下の設定にて設定を行う。
また、ディレクトリはchroot化しなかった場合と同じ構成とする。
 BIND(chroot)ディレクトリ:/var/named/chroot
 BIND実行ユーザ:named
 BIND実行グループ:named
 BIND設定ファイル:/var/named/chroot/etc/named.conf
~
 $ mkdir /var/named
 $ groupadd named
 $ useradd -g named -d /var/named -s /sbin/nologin named
 $ rm -rf /var/named/* && rm -rf /named/.*
 $ chmod 750 /var/named
 $ chown root.named /var/named

 $ cd /var/named
 $ mkdir -p ./chroot/dev ./chroot/etc ./chroot/var
 $ cd ./chroot/dev
 $ mknod -m 644 ./null c 1 3
 $ mknod -m 644 ./random c 1 8
 $ cd ../var
 $ mkdir -p ./cache/bind ./log ./named/data ./named/dynamic ./run/named
 $ chown named.named ./log ./run/named
 $ chown -R named.named ./named
~
&size(16){&font(b){3. 設定ファイル};};
基本的に1から作成する必要がある。BIND側でテンプレを入れてくれればいいのに...
 $ /usr/local/bind/bin/dig . ns @202.12.27.33 +bufsize=1024 > /var/named/chroot/var/named/named.ca

 $ vi /var/named/chroot/var/named/named.empty

 $TTL 3H
 @   IN SOA  @ rname.invalid. (
                                 0       ; serial
                                 1D      ; refresh
                                 1H      ; retry
                                 1W      ; expire
                                 3H )    ; minimum
     NS      @
     A       127.0.0.1
     AAAA    ::1

 $ vi /var/named/chroot/var/named/named.localhost

 $TTL 1D
 @   IN SOA  @ rname.invalid. (
                                 0       ; serial
                                 1D      ; refresh
                                 1H      ; retry
                                 1W      ; expire
                                 3H )    ; minimum
     NS      @
     A       127.0.0.1
     AAAA    ::1

  $ vi /var/named/chroot/var/named/named.loopback
 $ vi /var/named/chroot/var/named/named.loopback

 $TTL 1D
 @   IN SOA  @ rname.invalid. (
                                 0       ; serial
                                 1D      ; refresh
                                 1H      ; retry
                                 1W      ; expire
                                 3H )    ; minimum
     NS      @
     A       127.0.0.1
     AAAA    ::1
     PTR     localhost.

 $ vi /var/named/chroot/var/named/named.rfc1912.zones

 zone "localhost.localdomain" IN {
         type master;
         file "named.localhost";
         allow-update { none; };
 };
 
 zone "localhost" IN {
         type master;
         file "named.localhost";
         allow-update { none; };
 };
 
 zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
         type master;
         file "named.loopback";
         allow-update { none; };
 };
 
 zone "1.0.0.127.in-addr.arpa" IN {
         type master;
         file "named.loopback";
         allow-update { none; };
 };
 
 zone "0.in-addr.arpa" IN {
         type master;
         file "named.empty";
         allow-update { none; };
 };

 $ ln -s /etc/localtime /var/named/chroot/etc/localtime






 $ vi /etc/init.d/named

 #!/bin/sh
 #
 # named           This shell script takes care of starting and stopping
 #                 named (BIND DNS server).
 #
 # chkconfig: 345 55 45# description: named (BIND) is a Domain Name Server (DNS)
 # chkconfig: 345 55 45
 # description: named (BIND) is a Domain Name Server (DNS)
 # that is used to resolve host names to IP addresses.
 # probe: true
 
 # BIND configuration
 BIND_ROOT="/var/named/chroot"
 BIND_CONFIG="/etc/named.conf"
 BIND_USER="named"
 BIND_OPTIONS="-u ${BIND_USER} -c ${BIND_CONFIG} -t ${BIND_ROOT}"
 BIND_PIDFILE="${BIND_ROOT}/var/run/named/named.pid"
 
 # Source function library.
 . /etc/rc.d/init.d/functions
 
 # Source networking configuration.
 . /etc/sysconfig/network
 
 # Check that networking is up.
 [ ${NETWORKING} = "no" ] && exit 0
 [ -f /usr/local/bind/sbin/named ] || exit 0
 [ -f ${BIND_ROOT}${BIND_CONFIG} ] || exit 0
 
 # See how we were called.
 case "$1" in
     start)
         # Start BIND.
         echo -n "Starting bind: "
         if [ -e /var/lock/subsys/named ] ; then
             echo "BIND running"
             exit 0
         else
             daemon /usr/local/bind/sbin/named ${BIND_OPTIONS}
             echo
             touch /var/lock/subsys/named
         fi
         ;;
     stop)
         # Stop daemons.
         echo -n "Shutting down bind: "
         killproc -p ${BIND_PIDFILE}
         rm -f /var/lock/subsys/named
         echo
         ;;
     status)
         status named
         exit $?
         ;;
     restart)
         $0 stop
         $0 start
         exit $?
         ;;
     *)
         echo "Usage: named {start|stop|restart|status}"
         exit 1
 esac
 
 exit 0
~
&size(16){&font(b){4. 起動準備};};
起動する時にinitスクリプトからコンフィグを読み込む為に、シンボリックリンクとかを張る
 $ cd /etc
 $ ln -s /var/named/chroot/etc/named.conf .
 $ chmod 755 /etc/init.d/named
 $ chown root.root /etc/init.d/named
 $ chkconfig --add named
 $ chkconfig named on

 /usr/local/bind/sbin/rndc-confgen -a -b 512 -k rndc-key -r keyboard
 start typing:
 ひたすら、キーボードを叩き続ける
 stop typing.
 wrote key file "/usr/local/bind-9.10.1/etc/rndc.key"
 
 $ cd /var/named/chroot/etc/
 $ mv /usr/local/bind/etc/rndc.key .
 $ cp rndc.key rndc.conf
 $ chmod 640 ./rndc.key && chown root.named ./rndc.key
 $ chmod 600 ./rndc.conf && chown root.root ./rndc.conf
 $ ln -s /var/named/chroot/etc/rndc.key /etc/rndc.key
 $ ln -s /var/named/chroot/etc/rndc.conf /etc/rndc.conf
 
 $ vi ./rndc.conf
 ※ 以下を追記
 options {
        default-key "rndc-key";
        default-server localhost;
        default-port 953;
 };
~
&size(16){&font(b){4. logローテート};};
書きかけ