2018/4/21 CentOS7 build1708





DNSマスターサーバを構成する

ゾーンマスターサーバを構成します。

デフォルトのnamed.confに最小限の調整でゾーンファイルを追加します。
ゾーン転送をするスレーブサーバの構成は「DNSスレーブサーバを構成する」を参照してください。




0.ファイアウォールを開放する

現在のゾーンを確認します。
#firewall-cmd --get-active-zones
public
  interfaces: enp0s3

現在のゾーンへDNSサービスの許可を追加します。
#firewall-cmd --permanent --zone=public --add-service=dns

もしくはファイアウォールを全開けにします。

#firewall-cmd --set-default-zones=trusted

(デフォルトのゾーンを、FW無しのtrustedに)

もしくは

#firewall-cmd --zone=trusted --change-interface=enp0s3
(FWを一時的に変更、全許可へ。再起動したらDefaultに戻ります)



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を調整します。
(昔は/var/named/chroot/etc/named.confでしたが、今は/etc/named.confです)

/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 { any; };



       //今回はマスターサーバとして動作するので、キャッシュサーバとしては動作しない
       recursion no;

        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";
};

//正引きゾーンの定義
zone "example.com" {
  type master;
  file "example.com.zone";   //directoryで指定したパスを基準にしたファイル名
  allow-update {none;} ;
  allow-transfer { none; };
};

//逆引きゾーンの定義 (必要であれば)
zone "1.168.192.in-addr.arpa" IN {
  type master;
  file "example.com.rev";
  allow-update {none;} ;
  allow-transfer { none; };
};


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





5.ゾーンファイルの追加

/var/namedへファイルを作成
(昔は/var/named/chroot/var/namedでしたが、今は/var/namedです)

example.com.zone ゾーンファイル
------------------------------------------
$TTL 86400

@    IN   SOA   ns1.example.com.   root.example.com. (
    2017110401 ;Serial
    3600           ;ゾーン転送の間隔 秒
    300             ;転送失敗時のリトライ間隔 秒
    360000       ;ゾーンファイルの保持時間 秒
    86400   )    ;他サーバでキャッシュされる時間 秒

            IN   NS          ns1.example.com.     //末尾のドットに注意
ns1       IN   A            192.168.1.10           //自DNSサーバ
host1     IN   A            192.168.1.99        //LAN内の適当なアドレス
------------------------------------------


example.com.rev 逆引きゾーンファイル

------------------------------------------
$TTL 86400
@    IN   SOA   ns1.example.com.   root.example.com. (
    2017110401 ;Serial
    3600           ;Refresh sec(Transfer span)
    300             ;Retry sec(in failure retry)
    360000        ;SecondaryExpire sec
    86400   )    ;Minumum TTL sec(zone expired time)

            IN   NS          ns1.example.com.       //末尾のドットに注意
10         IN   PTR        ns1.example.com.       //末尾のドットに注意
99         IN   PTR        host1.example.com.    //末尾のドットに注意
------------------------------------------

作成したファイルのアクセス権を変更します。
#chgrp named examp.e.com.zone
#chmod 640 example.com.zone

#chgrp named examp.e.com.rev
#chmod 640 example.com.rev



6.コンフィグの確認、サービスの起動、エラー確認

named.confの文法チェック。なにも表示されなければ正しい
#named-checkconf

namedがまだ起動していない場合、起動。自動起動の設定
#systemctl start named
#systemctl enable named

namedが起動済みの場合、コンフィグとゾーン情報を再読み込み
#rndc reload

起動しない場合、エラーログの確認
#tail -n 30 /var/log/message



7.名前解決の正常性

他の端末からnslookupコマンドを実行してみます。

nslookup
>server 192.168.1.10
>host1.example.com
サーバー: [192.168.1.10]
Address: [192.168.1.10]

名前:  host1.example.com
Address:  192.168.1.99

>set type=ptr
>192.168.1.99
サーバー: [192.168.1.10]
Address: [192.168.1.10]

99.1.168.192.in-addr.arpa   name=host1.example.com
1.168.192.in-addr.arpa  (略)


こんなのが返ってくれば正常です。




チェンジルートのファイルパス

いままでnamedをchrootで構築した場合、設定ファイル・ゾーンファイルはそれぞれ
/var/named/chroot/etc/named.conf
/var/named/chroot/var/named/○○○.zone
でしたが、いつのころからか
/etc/named.conf
/var/named/○○○.zone
で設定できるようになってました。

chrootされたプロセスがなんで/etc/named.confを使用しているの? と思っていたのですが、
これはchroot内のプロセスが/etc/named.confへアクセスしているわけではなく、
/etc/named.conf を /var/named/chroot/etc/named.confを として
/var/named  を /var/named/chroot/var/named へ、仮想的にマウントしているようです。
プロセスがchroot外へお出かけしてるわけではなく、外のディレクトリのほうがchroot内へ
来てくれてるわけですね。
確かにこれならchrootされたプロセスにも、chroot内にnamed.confがあるように見えます。
同様に/var/named/○○○.zoneも、chroot内にマウントされているので、chrootプロセスから
正常にアクセスできる、という仕組みのようです。
この仕組みに関しては、/usr/libexec/setup-named-chroot.shに記述してあり
サービスを起動するたびにこのスクリプトが実行されるようです。






prev.gif