2013年9月1日日曜日

DNSを構築してみる(CentOS6.4+Bind9.8)

自宅に仮想環境でたくさんOSを立て始めたので、DNSサーバを立ててみた。
やる内容は
 ・環境は、Hyper-V上で構築したCentOS6.4上に、BIND 9.8を使う。
 ・内部のネットワーク向けのDNSサーバ(公開はしない)
 ・IPv4のみを使う(IPv6は使わない)
 ・折角なので、キャッシュサーバ機能を持たせてみる
 ・折角なので、chroot環境にしてみる
を目的とする。

1.パッケージをインストールする

# yum -y install bind bind-utils bind-chroot caching-nameserver

としたところ、caching-nameserverについては、

Package 32:bind-9.8.2-0.17.rc1.el6_4.6.x86_64 already installed and latest version

というメッセージがでてインストールできないようです。bindに統合されたということ
ですかね。ここにも記載が。


2.設定変更する

# vi /etc/sysconfig/named ※全記載
>>
ROOTDIR=/var/named/chroot
OPTIONS="-4"
<<

この"-4"はIPv4のみ有効にしてbindを起動するという指定です(IPv6の無効化)。

# vi /etc/named.conf ※全記載
>>

options {
//      リスンするIPアドレスを指定する。指定なしの場合は全てのIPでリスンする
//      listen-on port 53 { 127.0.0.1; };
//      listen-on-v6 port 53 { ::1; };

        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";

//      同一セグメント上のマシンからの問い合わせを受ける
//      allow-query     { localhost; };
        allow-query             { localnets; };
        allow-query-cache       { localnets; };

//      不要なエラーを省く
        empty-zones-enable no;

//      IPv6を無効化するのでポートは閉鎖
        use-v6-udp-ports { };

//      再帰的問い合わせはデフォルト無効化
//      recursion yes;
        recursion no;

//      DNS SECを無効化する
//      dnssec-enable yes;
//      dnssec-validation yes;
        dnssec-enable no;
        dnssec-validation no;

        dnssec-lookaside auto;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";

//      forward先の設定
        forwarders {
                192.168.0.1;
        };
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

//viewを使っている場合は、zoneはview内で記載する必要がある
//zone "." IN {
//      type hint;
//      file "named.ca";
//};
//include "/etc/named.rfc1912.zones";

include "/etc/named.root.key";

//DNSキャッシュサーバ用設定
view localhost_resolver {
        match-clients      { localhost; };
        match-destinations { localhost; };
        recursion yes;
        include "/etc/named.rfc1912.zones";
        include "/etc/named/named.local.hayachi617.com.zone";
};

//LAN用設定
view "internal" {
        match-clients { localnets; };
        match-destinations { localnets; };
        recursion yes;
        include "/etc/named.root.hints";
        include "/etc/named/named.local.hayachi617.com.zone";
};

<<

# vi /etc/named.rfc1912.zones ※変更分を記載
>>


#IPv6は使わないので、コメントアウト
#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; };
#};

<<

ゾーンファイルを作成する
# vi /etc/named.local.hayachi617.com.zone ※全記載
>>
zone "hayachi617.com" {
                type master;
                file "hayachi617.com.db";
};

zone "0.168.192.in-addr.arpa" {
                type master;
                file "0.168.192.in-addr.arpa.db";
};
<<

正引きのゾーンファイルの作成
# vi /var/named/hayachi617.com.db ※全記載
>>
$TTL            86400
@               IN      SOA     ns.hayachi617.com.   root.hayachi617.com.(
                                2013083101     ; Serial
                                28800             ; Refresh
                                14400             ; Retry
                                3600000          ; Expire
                                86400 )           ; Minimum

                 IN      NS      ns.hayachi617.com.
router         IN      A       192.168.0.1
ns              IN      A       192.168.0.49
svr2           IN      A       192.168.0.50
svr3           IN      A       192.168.0.51
svr4           IN      A       192.168.0.52

svr1           IN      CNAME   ns
www           IN      CNAME   svr2
ntp             IN      CNAME   svr1
<<

逆引きのゾーンファイルの作成
# vi /var/named/0.168.192.in-addr.arpa.db ※全記載
>>
$TTL    86400
@       IN      SOA     ns.hayachi617.com.   root.hayachi617.com.(
                        2013083101   ; Serial
                        28800        ; Refresh
                        14400        ; Retry
                        3600000      ; Expire
                        86400 )      ; Minimum

        IN      NS      ns.hayachi617.com.
        IN      PTR     hayachi617.com.
        IN      A       255.255.255.0

1       IN      PTR     router.hayachi617.com.
49      IN      PTR     svr1.hayachi617.com.
50      IN      PTR     svr2.hayachi617.com.
51      IN      PTR     svr3.hayachi617.com.
52      IN      PTR     svr4.hayachi617.com.
<<

3.chroot対応として、rsyslogの設定変更(変更分を記載)

# vi /etc/rsyslog.conf
>>
$AddUnixListenSocket /var/named/chroot/dev/log
<<
# service rsyslog reload

4.サービスの起動

ここまでで設定は一通り完了しているはずなので、サービスを起動してみる。

# chkconfig named on

# service named start

ちなみに、chroot設定が有効か?チェックしてみると、

# df -ha

Filesystem            Size  Used Avail Use% マウント位置
/dev/mapper/VolGroup-lv_root
                      8.5G  2.8G  5.3G  35% /
proc                     0     0     0   -  /proc
sysfs                    0     0     0   -  /sys
devpts                   0     0     0   -  /dev/pts
tmpfs                 2.9G     0  2.9G   0% /dev/shm
/dev/sda1             485M   47M  414M  11% /boot
none                     0     0     0   -  /proc/sys/fs/binfmt_misc
/etc/named            8.5G  2.8G  5.3G  35% /var/named/chroot/etc/named
/var/named            8.5G  2.8G  5.3G  35% /var/named/chroot/var/named
/etc/named.conf       8.5G  2.8G  5.3G  35% /var/named/chroot/etc/named.conf
/etc/named.rfc1912.zones
                      8.5G  2.8G  5.3G  35% /var/named/chroot/etc/named.rfc1912.zones
/etc/rndc.key         8.5G  2.8G  5.3G  35% /var/named/chroot/etc/rndc.key
/usr/lib64/bind       8.5G  2.8G  5.3G  35% /var/named/chroot/usr/lib64/bind
/etc/named.iscdlv.key
                      8.5G  2.8G  5.3G  35% /var/named/chroot/etc/named.iscdlv.key
/etc/named.root.key   8.5G  2.8G  5.3G  35% /var/named/chroot/etc/named.root.key


となっており、いくつかのファイルやディレクトリがchroot下にマップされていることがわかる。

5.その他の設定

ルートヒントの情報を更新しておく。

# dig @a.root-servers.net . ns > /var/named/named.ca

設定再読み込みで完了。

# servivce named reload

最後に確認をする。

# dig router.hayachi617.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> router.hayachi617.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7432
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;router.hayachi617.com.         IN      A

;; ANSWER SECTION:
router.hayachi617.com.  86400   IN      A       192.168.0.1

;; AUTHORITY SECTION:
hayachi617.com.         86400   IN      NS      ns.hayachi617.com.

;; ADDITIONAL SECTION:
ns.hayachi617.com.      86400   IN      A       192.168.0.49

;; Query time: 0 msec
;; SERVER: 192.168.0.49#53(192.168.0.49)
;; WHEN: Sun Sep  1 07:38:59 2013
;; MSG SIZE  rcvd: 88

これにて終了。

6.外のDNS問い合わせが遅い

その後外向けのDNS解決が遅いことに気が付いた。
ということで、fowardersを、ISPのDNSに変更をしてみたところ速くなった。
よかった。


(2014/6/29)
オプションの説明を補足と、もう少しセキュアに構築するよう変更。

0 件のコメント:

コメントを投稿