CentOS 7 のBINDをセカンダリサーバーとして設定する

CentOS 7 のBINDをセカンダリサーバーとして設定する手順を紹介します。

こちらの記事で設定したプライマリDNSのセカンダリサーバーとして設定します。

named.confファイルの設定

named.confファイルを設定します。ファイルパスは "/etc/named.conf" になります。

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

	/* 
	 - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
	 - If you are building a RECURSIVE (caching) DNS server, you need to enable 
	   recursion. 
	 - If your recursive DNS server has a public IP address, you MUST enable access 
	   control to limit queries to your legitimate users. Failing to do so will
	   cause your server to become part of large scale DNS amplification 
	   attacks. Implementing BCP38 within your network would greatly
	   reduce such attack surface 
	*/
	recursion yes;

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

	/* 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";
                severity dynamic;
        };
};

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

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

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 { 192.168.0.108; };
	listen-on-v6 {none;};
	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; };
	allow-transfer { none; };
	use-v6-udp-ports { };
	/* 
	 - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
	 - If you are building a RECURSIVE (caching) DNS server, you need to enable 
	   recursion. 
	 - If your recursive DNS server has a public IP address, you MUST enable access 
	   control to limit queries to your legitimate users. Failing to do so will
	   cause your server to become part of large scale DNS amplification 
	   attacks. Implementing BCP38 within your network would greatly
	   reduce such attack surface 
	*/
	recursion no;

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

	/* 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";

	rate-limit {
	    responses-per-second 5;
	    window 5;
	};
};

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

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


zone "ipentec.com" IN {
	type slave;
	masters {
	  192.168.0.100;
	}
	file "slaves/ipentec.com.zone.bak";
};

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

変更点の解説

リッスンアドレスとポート
"listen-on"でDNSサーバーの待ち受けIPアドレスとポートを指定します。今回の例ではローカルIPアドレスを記載していますが、実際にはこのDNSサーバーのグローバルIPアドレスを入力します。
listen-on port 53 { 192.168.0.108; };
IPv6の無効化
今回はIPv4ネットワークのDNSサーバーのため、IPv6を無効にします。

listen-on-v6 のセクションを"none"に変更します。
listen-on-v6 {none;};

また、use-v6-udp-ports を追記します。(この記述は無くても良いかもしれません)
use-v6-udp-ports { };
クエリを許可するアドレス
コンテンツサーバー(権威サーバ)として構築するため、すべてのIPアドレスからのクエリを受け付けます。
allow-query     { any; };
ゾーン転送の可否
allow-transfer を追加しゾーン転送をしないようにします。
allow-transfer { none; };

rate-limitの設定
アタック防止のため、optionsセクションに下記のrate-limitを追記しました。
1秒に5回以上問い合わせがあり、それが5秒以上続いた場合にブロックします。
  rate-limit {
    responses-per-second 5;
    window 5;
  };
  • responses-per-second : 制限をする、1秒間のリクエストの上限値 (0に設定すると無制限になります)
  • window : 判定期間の秒
  • log-only : ログのみを記録するかどうか
上記以外のパラメータについてはこちらのページに詳しい記述があります。
コンテンツサーバーとしての設定
また、今回はコンテンツサーバー(権威サーバー)として構築するため、
  recursion no;
としてあります。このサーバーでホストしているドメイン以外は解決しません。
ゾーンの設定
今回はゾーンは1つのみとします。ipentec.comドメインの例で記述しています。
セカンダリサーバーのため、typeは"slave"としています。fileにはゾーンファイルの名称を設定します。
zone "ipentec.com" IN {
	type slave;
	file "slaves/ipentec.com.zone.bak";
};
file の描きこみ位置の注意
今回の例では
file "slaves/ipentec.com.zone.bak"
となっており、ゾーン転送されたファイルは /var/named/slaves/ipentec.com.zone.bak に保存されます。slavesを省略してfile "ipentec.com.zone.bak"と記述した場合、/var/named ディレクトリの直下に書きこむことになり、/var/named にパーミッションが設定されていた場合でも、書き込みができない状態になることがあります。マスターから転送されるゾーン情報は /var/named/slaves 以下に書きこむように file セクションの先頭には"slaves" を付加しておく必要があります。
 

ディレクトリのアクセス権の変更

プライマリサーバーから取得したDNSレコードを保存できるようにするために、/var/named の所有者をnamedを起動しているユーザーに変更します。(デフォルトではnamedユーザー)
下記のコマンドを実行します。
su
chown -R named /var/named
著者
かつて日本を代表したスーパーエンジニア (自称)
ハードウェア、電気設備、ガーデニング関係の記事を担当。
最終更新日: 2024-01-06
作成日: 2014-12-10
iPentec all rights reserverd.