2018/4/21 CentOS7 build1708





キャッシュサーバを構成する(DNSSEC対応)

DNSSEC対応のキャッシュサーバを構成します。

DNSSEC対応といっても、実際にはDNSSEC対応の上位DNSサーバと会話するためのサーバです。
注意すべき点は、この設定ではDNSSEC非対応の上位DNSとは正しく通信できない点です。
つまり上位DNSサーバに、ルータやFWのDNSプロキシーを指定している場合、正しく運用できません。

上位DNSサーバに、DNSEC非対応のネットワーク機器を指定すると様々な挙動をします。

・まったく名前解決が働かない。
・最初は正常に動作しているように見えるが、30日ほどするとBINDを再起動しないと名前解決できなくなる。
・上位DNSサーバと通信できず、デフォルトのforward firstが働いて、タイムアウトを待ってからルートDNSを使用して名前解決をしている。だから初回の名前解決が非常に遅い、もしくは名前解決を成功したり失敗したりする。

などがあります。

上位DNSとしてFWやルータを指定したいのなら
キャッシュサーバを構成する(DNSSEC非対応)」を参照してください。




1.DNSのインストール

#yum install bind-chroot bind

bind本体とbind-chroot環境をインストールします。
過去のバージョンではbind-chrootだけでbindが動作したものですが。
ここではbinr-chroot 9.9.4が入りました。



2.IPv6の問い合わせを無効にする場合

 環境によりますが、もしネットワーク内にIPv4クライアントしかなく、IPv4のネットワークしか使わない予定なら、DNSのIPv6問い合わせを無効にすることで、解決速度を高めることができます。

#vi /etc/sysconfig/named

(追加)
OPTIONS="-4"




3.起動

以下のコマンドで起動します。

#systemctl start named

正常に起動すると、/etc/rndc.keyというファイルが生成されます。
これはBINDの管理ツール rndc に必要なファイルです。



※ちなみに正常に起動しない場合、なんらかの理由でrndc.keyファイルが生成されないためです。
 その場合、messagesにrndc,confもしくはrndc.keyが存在しないというエラーメッセージが出力されます。
 rndc.keyを手作業で生成したい場合は以下の手順で行います。
#rndc-confgen -a
#chmod 640 /etc/rndc.key
#chgrp named /etc/rndc.key

再度namedを起動してみます。
正常に起動できたら
#rndc status

で動作確認します。




4.コンフィグの調整

/etc/named.confを調整します。
コンフィグはバージョンによって動作が微妙に変わってくるのがクセものです。
これはBIND9.9.4(CentOS)ですから。
デフォルトのコンフィグに、赤色で追記します。

options {

      
//DNSサービスを提供する自IPアドレスを追加
        listen-on port 53 { 127.0.0.1; 192.168.1.10; };

       //IPv6問い合わせを無効jにしたいので、コメントアウト
       //
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; };

        //オープンリゾルバを意図的に禁止します
        //recursion yes;

       //「recursion yes」の代わりに名前解決を受け付けるクライアント範囲を指定
       allow-recursion {
          10.0.0.0/8;
          192.168.1.0/24;
         };


       //名前問い合わせに使用する上位DNSサーバ
      
//forwardersが指定されていなければルートDNSを使用します
       forwarders  {
            10.1.1.10;
            10.1.1.11;
         ] ;

         //上位DNSへの問い合わせ挙動を指定します
       forward only;
        //「forwarders only」 forwardersで指定した上位DNSが回答してくれなければ諦めます
        //「forwarders first」 forwardersで指定した上位DNSが回答してくれなければ
      //                        ルートDNSへ問い合わせます
  
        dnssec-enable yes;
        dnssec-validation yes;

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

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

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
             file "data/named.run" versions 10 size 10M;  //10世代10MBまでログを保存
                severity dynamic;
 

             print-time yes;
//ログに時刻を出力
             print-query yes; //名前解決を求めたクライアントアドレスを出力
        };

       category lame-servers { null; };   //名前解決エラーのログは出力しない
       //category queries { "default_debug"; };   クエリログを取得する場合はこちらを使用

};

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

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




4.サービスの再起動・自動起動

#rndc stop
#systemctl start named
#systemctl enable named

名前解決を許可した(allow-recursion)クライアントからnslookupなどで問い合わせを行ってみます。
正常にインターネット上の名前解決ができたでしょうか。
名前解決ができない場合、サーバ上のファイアウォールでUDP53が開放されているか、上位DNSサーバとは正常に通信できるかを確認します。




パラメータの説明

dnssec-validation    yes | no | auto

DNSSECでは、トラストアンカーと呼ばれる、世界中で使われているDNSの公開鍵が必要です。
BIND 9.7以前ではtrusted-keysなどを用いて、鍵ファイルを指定する必要があります。
BIND 9.8以降では鍵ファイルはBIND built-inと呼ばれて、内蔵してます。

dnssec-validation yes;を指定しておけば、trusted-keysが指定されていればそれを用い、指定されてなければ内蔵されたBIND built-inが使用されます。
dnssec-validation autoを指定すると、常にBIND built-inが使用されます。
yesを指定しておけばよいでしょう。


allow-query

DNSのゾーンを有してないので、指定する必要はありません。


allow-recursion

誰からのDNS要求にも回答をするオープンリゾルバとならないよう、通常はクライアントのセグメントを制限します。


forwarders

問い合わせを転送する上位DNSサーバを指定します。
複数指定できます。


forward  only | first

onlyは、上位DNSサーバへ転送するだけです。そこで名前解決に失敗すると、問い合わせを諦めます。
DNSサーバが直接インターネットに通信できない場合は、onlyを指定します。
firstは、上位DNSサーバへ問い合わせを転送しますが、そこで名前解決に失敗すると今度はルートDNSサーバへ問い合わせを試みます。
より確実に問い合わせが成功しますが、存在しないドメイン名などを問い合わせた場合は、問い合わせ失敗までの時間が長くなります。
なにも指定しないと、firstが指定されたものとされます。





prev.gif