CentOS サーバー管理・運用 ネームサーバー BIND

(最終更新日時:2012-01-12 23:07:01)
外向け(インターネット)用のプライマリーネームサーバー、および内向きネームサーバー(内部 LAN)を BIND で運用します。
内向きネームサーバーにより、LAN 内のクライアント PC から自サーバーへ FQDN でアクセスできるようになります。
なお、キャッシングネームサーバーとしても動作させ、さらに DHCP サーバーとの連携も行います。

設定ファイルの準備

サンプルが準備されていますので、それを chroot 環境にコピーして設定ファイルの準備を行います。
# cd /var/named/chroot
# cp /usr/share/doc/bind-*/sample/etc/*        etc/
# cp /usr/share/doc/bind-*/sample/var/named/*  var/named/
# rm var/named/my.*

RNDCキーの作成

rndc コマンド用の秘密鍵 rndc.key を作成します。
# rndc-confgen -a -b 512 -k rndckey
wrote key file "/etc/rndc.key"

# mv /etc/rndc.key /var/named/chroot/etc/rndc.key
# chown named /var/named/chroot/etc/rndc.key

TSIGキーの作成

DHCP サーバーとの連携のため、Dynamic DNS 用の TSIG(Transaction Signature) キーを作成します。
# cd /var/named/chroot/etc
# dnssec-keygen -a HMAC-MD5 -b 512 -n USER ddnskey
Kddnskey.+157+nnnnn                 nnnnn はハッシュ値です

# cp Kddnskey.+157+nnnnn.private ddns.key
# vi ddns.key
----------(vi ここから)----------
Private-key-format: v1.2
Algorithm: 157 (HMAC_MD5)
Key: ~(キー情報)~

となっていますので、以下に変更します。

key "ddnskey" {
        algorithm HMAC_MD5;
        secret    "~(キー情報)~";
};
----------(vi ここまで)----------

# chown named ddns.key
# chmod 400   ddns.key

# rm -f Kddnskey.+157+*

外部向けゾーンファイルの作成

外部向けの正引きゾーンファイルを作成します。
セカンダリネームサーバとして、マイハマネット さんのサービスを利用しています。
また、メールの SPF 認証用 TXT レコードを作成しています。

※定義内容は例示です。適宜読み替えてください。
# vi /var/named/chroot/var/named/system-act.com.zone.ext
----------(vi ここから)----------
$TTL            2D                                       キャッシュの有効期間
@               IN      SOA     ns1     root (
        2011020701      ; Serial
        1D              ; Refresh  1D                    ゾーン転送のリフレッシュ間隔
        20M             ; Retry    20M                   リフレッシュに失敗した時の再試行間隔
        1W              ; Expiry   1W                    ゾーンデータの有効期間
        1H              ; Minimum  1H                    ネガティブキャッシュの有効期間
)
                IN      NS      ns1
                IN      NS      ns.maihama-net.com.

                IN      A       203.189.48.125

                IN      MX 10   mail
                IN      TXT     "v=spf1 mx:system-act.com ~all"

ns1             IN      A       203.189.48.125

mail            IN      A       203.189.48.125
                IN      TXT     "v=spf1 a:mail.system-act.com -all"
smtp            IN      CNAME   mail
pop3            IN      CNAME   mail
imap            IN      CNAME   mail
smtps           IN      CNAME   mail
pop3s           IN      CNAME   mail
imaps           IN      CNAME   mail

www             IN      A       203.189.48.125
ssh             IN      A       203.189.48.125
ftp             IN      A       203.189.48.125
svn             IN      A       203.189.48.125
----------(vi ここまで)----------

# chown named.named /var/named/chroot/var/named/system-act.com.zone.ext
# ln    -sfv        /var/named/chroot/var/named/system-act.com.zone.ext /var/named/
※ドメインを取得している他のサーバーも同様の定義を作成しています。

内部向けゾーンファイルの作成

内部 LAN クライアント向けの正引きゾーンファイルを作成します。

※定義内容は例示です。適宜読み替えてください。
# vi /var/named/chroot/var/named/system-act.com.zone.int
----------(vi ここから)----------
$TTL            1W
@               IN      SOA     ns1     root (
        2011020701      ; Serial
        3D              ; Refresh  3D
        20M             ; Retry    20M
        2W              ; Expiry   2W
        1H              ; Minimum  1H
)
                IN      NS      ns1

                IN      A       192.168.11.11

                IN      MX 10   mail

ns1             IN      A       192.168.11.11

mail            IN      A       192.168.11.11
smtp            IN      CNAME   mail
pop3            IN      CNAME   mail
imap            IN      CNAME   mail
smtps           IN      CNAME   mail
pop3s           IN      CNAME   mail
imaps           IN      CNAME   mail

www             IN      A       192.168.11.11
ssh             IN      A       192.168.11.11
ftp             IN      A       192.168.11.11
ntp             IN      A       192.168.11.11
----------(vi ここまで)----------
※内部 LAN 用ですので SPF 用の TXT レコードは定義していません。
※ドメインを取得している他のサーバーも同様の定義を作成しています。

内部 LAN クライアント向けの逆引きゾーンファイルを作成します。

※定義内容は例示です。適宜読み替えてください。
# vi /var/named/chroot/var/named/11.168.192.rev
----------(vi ここから)----------
$TTL            1W
@               IN      SOA     ns1.system-act.com.     root.system-act.com. (
        2011020701      ; Serial
        1D              ; Refresh  1D
        20M             ; Retry    20M
        2W              ; Expiry   2W
        1H              ; Minimum  1H
)
                IN      NS      ns1.system-act.com.

11              IN      PTR     system-act.com.
----------(vi ここまで)----------

仮想サーバーセグメント用のゾーンファイルの作成

System House ACT では、仮想サーバー用のネットワークセグメント 192.168.101.0/24 を定義しています。
仮想サーバーセグメント用の正引きゾーンファイルを作成します。

※定義内容は例示です。適宜読み替えてください。
# vi /var/named/chroot/var/named/server.localnet
----------(vi ここから)----------
$TTL            2W
@               IN      SOA     ns1     root.system-act.com. (
        2011020701      ; Serial
        1W              ; Refresh  1W
        20M             ; Retry    20M
        4W              ; Expiry   4W
        1H              ; Minimum  1H
)
                IN      NS      ns1

                IN      A       192.168.101.11

ns1             IN      A       192.168.101.11
gateway         IN      A       192.168.101.11

actmysql          IN    A       192.168.101.101
actpgsql          IN    A       192.168.101.111
----------(vi ここまで)----------

仮想サーバーセグメント用の逆引きゾーンファイルを作成します。

※定義内容は例示です。適宜読み替えてください。
# vi /var/named/chroot/var/named/101.168.192.rev
----------(vi ここから)----------
$TTL            2W
@               IN      SOA     ns1.server.localnet.    root.system-act.com. (
        2011020701      ; Serial
        1W              ; Refresh  1W
        20M             ; Retry    20M
        4W              ; Expiry   4W
        1H              ; Minimum  1H
)
                IN      NS      ns1.server.localnet.

                IN      PTR     server.localnet.
                IN      A       255.255.255.0

11              IN      PTR     gateway.server.localnet.

101             IN      PTR     actmysql.server.localnet.
111             IN      PTR     actpgsql.server.localnet.
----------(vi ここまで)----------

クライアント PC セグメント用のゾーンファイルの作成

System House ACT は、サーバー機をゲートウェイサーバーとして運用しています。
そのため、クライアント PC を接続する LAN についてもネットワークセグメント 192.168.201.0/24 を定義しています。

クライアント PC セグメント用の正引きゾーンファイルを作成します。

※定義内容は例示です。適宜読み替えてください。
# vi /var/named/chroot/var/named/client.localnet

$TTL            1W
@               IN      SOA     ns1     root.system-act.com. (
        2011020701      ; Serial
        1D              ; Refresh  1D
        20M             ; Retry    20M
        2W              ; Expiry   2W
        1H              ; Minimum  1H
)
                IN      NS      ns1

                IN      A       192.168.201.11

ns1             IN      A       192.168.201.11
gateway         IN      A       192.168.201.11

ep-803a         IN      A       192.168.201.21
whr-ampg        IN      A       192.168.201.31

rd-xs40         IN      A       192.168.201.201
regza-32c3000   IN      A       192.168.201.211

nintendo-wii    IN      A       192.168.201.221
----------(vi ここまで)----------
クライアント PC セグメント用の逆引きゾーンファイルを作成します。

※定義内容は例示です。適宜読み替えてください。
# vi /var/named/chroot/var/named/201.168.192.rev
----------(vi ここから)----------
$TTL            1W
@               IN      SOA     ns1.client.localnet.    root.system-act.com. (
        2011020701      ; Serial
        1D              ; Refresh  1D
        20M             ; Retry    20M
        2W              ; Expiry   2W
        1H              ; Minimum  1H
)
                IN      NS      ns1.client.localnet.

                IN      PTR     client.localnet.
                IN      A       255.255.255.0

11              IN      PTR     gateway.client.localnet.

21              IN      PTR     ep-803a.client.localnet.
31              IN      PTR     whr-ampg.client.localnet.

201             IN      PTR     rd-xs40.client.localnet.
211             IN      PTR     regza-32c3000.client.localnet.

221             IN      PTR     nintendo-wii.client.localnet.
----------(vi ここまで)----------

定義ファイルの編集

定義ファイル named.conf を編集します。
# vi /var/named/chroot/etc/named.conf
----------(vi ここから)----------
       :
        // query-source-v6 port 53;

        allow-query     { localnets; };                        // 原則ローカルからの問合せを許可します
        allow-transfer  { none; };                             // 原則ゾーン転送は行いません
        notify          no;                                    // 原則ゾーンファイル情報の更新を通知しません

        forwarders      { 192.168.11.1; };                     // ひかり電話対応ルーターへ問合せを回送します

        // Put files that named is allowed to write in the data/ directory:
       :
        memstatistics-file      "data/named_mem_stats.txt";

        version                 "unknown";                     // バージョンを非表示にします
};
logging
       :
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
        category lame-servers { null; };                       // 逆引きエラーのログ出力を行わないようにします
};
controls                                                       // RNDCコマンドを localhost のみに許可し、暗号化鍵を指定します
{
        inet 127.0.0.1 allow { 127.0.0.1; } keys { "rndckey"; };
};
       :
view "localhost_resolver"
{
       :
        include "/etc/named.rfc1912.zones";

        zone "system-act.com" {                                // localhostで参照するゾーンファイルを指定します
                type master;
                file "system-act.com.zone.int";
                allow-update { none; };
        };

        zone "nekojara.com" {
                type master;
                file "nekojara.com.zone.int";
                allow-update { none; };
        };

        zone "11.168.192.in-addr.arpa" {
                type master;
                file "11.168.192.rev";
                allow-update { none; };
        };

        zone "server.localnet" {
                type master;
                file "server.localnet";
                allow-update { none; };
        };

        zone "101.168.192.in-addr.arpa" {
                type master;
                file "101.168.192.rev";
                allow-update { none; };
        };

        zone "client.localnet" {
                type master;
                file "client.localnet";
                allow-update { key ddnskey; };                 // DHCPによるゾーンファイルの更新を許可します
                check-names ignore;                            // Android端末のホスト名がエラーになるのを回避します
        };

        zone "201.168.192.in-addr.arpa" {
                type master;
                file "201.168.192.rev";
                allow-update { key ddnskey; };
                check-names ignore;                            // Android端末のホスト名がエラーになるのを回避します
        };
};
view "internal"
{
       :
//      zone "my.internal.zone" {                              // my.*ゾーンの定義を削除またはコメントアウトします
//              type master;
//              file "my.internal.zone.db";
//      };
//      zone "my.slave.internal.zone" {
//              type slave;
//              file "slaves/my.slave.internal.zone.db";
//              masters { /* put master nameserver IPs here */ 127.0.0.1; } ;
//              // put slave zones in the slaves/ directory so named can update them
//      };  
//      zone "my.ddns.internal.zone" {
//              type master;
//              allow-update { key ddns_key; };
//              file "slaves/my.ddns.internal.zone.db";
//             // put dynamically updateable zones in the slaves/ directory so named can update them
//      };      
        zone "system-act.com" {                                // 内部・仮想向けのゾーンファイルを指定します
                type master;
                file "system-act.com.zone.int";
                allow-update { none; };
        };

        zone "nekojara.com" {
                type master;
                file "nekojara.com.zone.int";
                allow-update { none; };
        };

        zone "11.168.192.in-addr.arpa" {
                type master;
                file "11.168.192.rev";
                allow-update { none; };
        };

        zone "server.localnet" {
                type master;
                file "server.localnet";
                allow-update { none; };
        };

        zone "101.168.192.in-addr.arpa" {
                type master;
                file "101.168.192.rev";
                allow-update { none; };
        };

        zone "client.localnet" {
                type master;
                file "client.localnet";
                allow-update { none; };
                check-names ignore;                            // Android端末のホスト名がエラーになるのを回避します
        };

        zone "201.168.192.in-addr.arpa" {
                type master;
                file "201.168.192.rev";
                allow-update { none; };
                check-names ignore;                            // Android端末のホスト名がエラーになるのを回避します
        };
};
//key ddns_key                                                 // key ddns_keyの定義を削除またはコメントアウトします
//{
//      algorithm hmac-md5;
//      secret "use /usr/sbin/dns-keygen to generate TSIG keys";
//};
        include "/etc/rndc.key";                               RNDC用の秘密鍵を取込みます
        include "/etc/ddns.key";                               DHCP用の秘密鍵を取込みます
view    "external"
{
       :
//        zone "my.external.zone" {                            // my.*ゾーンの定義を削除またはコメントアウトします
//                type master;
//                file "my.external.zone.db";
//        };
        zone "system-act.com" {                                // 外部向けのゾーンファイルを指定します
                type master;
                file "system-act.com.zone.ext";
                allow-query    { any;  };
                allow-update   { none; };
                allow-transfer { 123.50.202.226; 38.110.146.192; };    // 2nd DNSサービスへのゾーン転送を許可します
                notify yes;
        };

        zone "nekojara.com" {
                type master;
                file "nekojara.com.zone.ext";
                allow-query    { any;  };
                allow-update   { none; };
                allow-transfer { 123.50.202.226; 38.110.146.192; };
                notify yes;
        };
};
----------(vi ここまで)----------

resolv.conf の設定を置き換えます。
# vi /etc/resolv.conf
----------(vi ここから)----------
domain     system-act.com                                      # 補完ドメインを設定しています
nameserver 192.168.11.11                                      # ネームサーバーのIPアドレスを設定します
----------(vi ここまで)----------

ファイアーウォールの設定

ファイアーウォール iptables の設定スクリプトにルールを追加します。
# vi /usr/local/sbin/firewall.sh
----------(vi ここから)----------# --- (INPUTチェイン) ---# DNS問合せを許可
iptables -A INPUT -i $EXTIF -p udp --sport  53 -j ACCEPT
iptables -A INPUT -i $EXTIF -p udp --dport  53 -j ACCEPT
iptables -A INPUT -i $EXTIF -p tcp --dport  53 -j ACCEPT# --- (OUTPUTチェイン) ---# DNS問合せを許可
iptables -A OUTPUT -o $EXTIF -p udp --sport  53 -j ACCEPT
iptables -A OUTPUT -o $EXTIF -p tcp --sport  53 -j ACCEPT----------(vi ここまで)----------

# firewall.sh                                                 # 設定を反映させます

起動

ネームサーバーを起動します。
# (ファイルの所有者とパーミッションを設定します)
# chown -R named.named /var/named/chroot/var/named
# chmod -R 770         /var/named/chroot/var/named

# chkconfig named on
# service   named start

フィードバック

記事の内容についてのご質問、ご指摘、その他ご意見等は、Weblog/Twitter にて受け付けております。

System House ACT Weblog 内記事 : サーバー管理・運用 ネームサーバー BIND

トラックバックまたはコメントにてお寄せください。

Twitter では .@systemact 宛につぶやいてください。
また、こちら から、この記事についてつぶやくことができます。
a System House to build an Accounting system by the Computer Technology