» Linux ディストリビューション » CentOS » DNS

DNS サーバーを構築する

 DNS サーバーを構築するときによく使用される bind パッケージは、デファクトスタンダード的な存在であり、マスターサーバー・スレーブサーバーのいずれでも動作させることができます。


インストール時に設定した DNS サーバーの IP アドレスを変更する場合には、ネットワークの設定と変更の設定と変更を参照して下さい。

DHCP サーバーを構築している場合には、DNS サーバーの IP アドレスを変更して下さい。

パッケージのインストール

 DNS サーバーパッケージは、yum コマンドを使用してインストールします。 なお、bind パッケージをより安全な DNS サーバーとして構築するために bind-chroot パッケージもインストールします。

[root@web ~]# yum install bind

[root@web ~]# yum install bind-chroot

[ CentOS 6 ]

パッケージインストール後の設定

 DNS に関する設定は、パッケージをインストールした段階では、オプション設定ファイル(以下、初期設定ファイルとする)がないため、サンプルファイルを使用して初期設定ファイルを作成します。 また、初期設定ファイルで指定するマスタサーバーゾーン定義ファイルも作成します。

 なお、DNS サーバーを構築する際、必ずマスターサーバーの存在が必要になります。 マスターサーバーとして動作させるためには、初期設定ファイルとルートサーバーリストファイル以外に、サーバーが権威を持つゾーンすべてに対してのデータベースファイルとなる正引きゾーンマスタファイルおよび逆引きゾーンマスタファイルを準備する必要があります。

(サンプルファイル : /usr/share/doc/bind-x.x.x/sample/etc/named.conf )

初期設定ファイルを作成する

[root@web ~]# vi /etc/named.conf

//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

options {
        listen-on port 53 { localnets; };
        //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; localnets; }; [ 内部ネットワークのみ許可する ]


        // 外部 DNS サーバーにクエリーを送信する場合(設定すると名前解決が遅くなる場合がある)
        forwarders {
                192.168.0.1; [ ルーター経由の場合(ルーターの IP アドレス) ]
                // プロバイダから通知を受けた DNS サーバーがある場合
                xxx.xxx.xxx.xxx; [ プライマリ DNS サーバー ]
                xxx.xxx.xxx.xxx; [ セカンダリ DNS サーバー ]
        };
        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;
        dnssec-lookaside auto;

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

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

zone "." IN {
        type hint;
        file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
// 内部ネットワーク向け
include "/etc/named.i2kt.com.zone.lan";

マスタサーバーゾーン定義ファイルを作成する

[root@web ~]# vi /var/named/chroot/etc/named.i2kt.com.zone.lan

zone "i2kt.com" IN {
        type master;
        // 正引きゾーンマスターファイルの指定
        file "i2kt.com.db";
        allow-update { none; };
};

zone "0.168.192.in-addr.arpa" IN {
        type master;
        // 逆引きゾーンマスターファイルの指定
        file "0.168.192.in-addr.arpa.db";
        allow-update { none; };
};

正引きゾーンマスターファイルを作成する

[root@web ~]# vi /var/named/chroot/var/named/i2kt.com.db

$TTL    86400
@       IN      SOA     i2kt.com. root.i2kt.com. (
                        2012010101      ; serial
                        3600            ; refresh
                        3600            ; retry
                        604800          ; expire
                        86400           ; minimum
)
                        IN NS           i2kt.com.
                        IN MX 0         i2kt.com.
;
@                       IN A            192.168.0.201
www                     IN A            192.168.0.201
smtp                    IN A            192.168.0.201
pop3                    IN A            192.168.0.201

逆引きゾーンマスターファイルを作成する

[root@web ~]# vi /var/named/chroot/var/named/0.168.192.in-addr.arpa.db

$TTL    86400
@       IN      SOA     i2kt.com. root.i2kt.com. (
                        2012010101      ; serial
                        3600            ; refresh
                        3600            ; retry
                        604800          ; expire
                        86400           ; nagative
)
                        IN NS           i2kt.com.
;
201                     IN PTR          i2kt.com.

オプション設定ファイルを作成する

[root@web ~]# cp -p /usr/share/doc/bind-x.x.x/sample/var/named/named.ca /var/named/chroot/var/named

[root@web ~]# cp -p /usr/share/doc/bind-x.x.x/sample/var/named/named.empty /var/named/chroot/var/named

[root@web ~]# cp -p /usr/share/doc/bind-x.x.x/sample/var/named/named.localhost /var/named/chroot/var/named

[root@web ~]# cp -p /usr/share/doc/bind-x.x.x/sample/var/named/named.loopback /var/named/chroot/var/named


ファイルの所有者グループを変更する

[root@web ~]# chgrp named /var/named/chroot/etc/named.conf

[root@web ~]# chgrp named /var/named/chroot/etc/named.i2kt.com.zone.lan

[root@web ~]# chgrp named /var/named/chroot/var/named/i2kt.com.db

[root@web ~]# chgrp named /var/named/chroot/var/named/0.168.192.in-addr.arpa.db

[root@web ~]# chgrp named /var/named/chroot/var/named/named.ca

[root@web ~]# chgrp named /var/named/chroot/var/named/named.empty

[root@web ~]# chgrp named /var/named/chroot/var/named/named.localhost

[root@web ~]# chgrp named /var/named/chroot/var/named/named.loopback

[ CentOS 6 ]

DNS サーバーの起動

 パッケージをインストールした段階では、セキュリティを考慮しているため自動起動されません。 システムの再起動後に DNS サーバーを自動起動するための設定を行います。

DNS サーバーを起動する

[root@web ~]# /etc/rc.d/init.d/named start

named を起動中:                                            [  OK  ]

DNS サーバーの自動起動を設定する

[root@web ~]# chkconfig named on

[root@web ~]# chkconfig --list named

named           0:off   1:off   2:on    3:on    4:on    5:on    6:off

[ CentOS 6 ]

DNS サーバー起動時のエラー対応

【エラー内容】
・error (network unreachable) resolving './NS/IN': 2001:503:ba3e::2:30#53

【エラー対処】
・DNS サーバーの IPv6 対応。

[root@web ~]# vi /etc/sysconfig/named

# IPv6 での DNS サーバー機能を無効化
OPTIONS="-4"

[ CentOS 6 ]


【エラー内容】
・none:0: open: /etc/rndc.key: file not found

【エラー対処】
・パッケージのインストール後、/etc/rndc.key が作成されていない場合、rndc.key を作成します。

[root@web ~]# rndc-confgen -a

# -a オプション : 鍵を生成して /etc/rndc.key(に書き込み)作成する
wrote key file "/etc/rndc.key"

ファイルの所有者グループ、アクセス権限を変更する

[root@web ~]# chgrp named /etc/rndc.key

[root@web ~]# chmod 640 /etc/rndc.key

[ CentOS 6 ]


【エラー内容】
・logging channel 'default_debug' file 'data/named.run': file not found
・managed-keys-zone ./IN: loading from master file dynamic/managed-keys.bind failed: file not found
・dynamic/managed-keys.bind.jnl: create: file not found
・managed-keys-zone ./IN: keyfetch_done:dns_journal_open -> unexpected error
・dumping master file: dynamic/tmp-uNeSWVbEcD: open: file not found

【エラー対処】
・bind-chroot パッケージのインストール後、各種ディレクトリが作成されていない場合、各種ディレクトリを作成します。

/var/named/chroot/var/named 配下のディレクトリを作成する

[root@web ~]# mkdir /var/named/chroot/var/named/data/

[root@web ~]# mkdir /var/named/chroot/var/named/dynamic/

[root@web ~]# mkdir /var/named/chroot/var/named/slaves/


ディレクトリの所有者グループ、アクセス権限を変更する

[root@web ~]# chgrp named /var/named/chroot/var/named/data/

[root@web ~]# chgrp named /var/named/chroot/var/named/dynamic/

[root@web ~]# chgrp named /var/named/chroot/var/named/slaves/

[root@web ~]# chmod 770 /var/named/chroot/var/named/data/

[root@web ~]# chmod 770 /var/named/chroot/var/named/dynamic/

[root@web ~]# chmod 770 /var/named/chroot/var/named/slaves/

[ CentOS 6 ]