DNSのレプリケーション設定と運用
目次
検証環境
- 以下のソフトウェアの利用を前提に検証を実施した。いずれも現時点で最新のリリースに基づいて検証しているが、ある程度古い環境、より新しい環境でも問題無いと思われる。
- OS: FreeBSD 11.2-R
- DNSコンテンツサーバー: BIND9 9.13.3
- 上記以外の環境では、以下の点に相違が発生する。当該環境に応じて読み替えたし。
- インストール方法
- インストールされるディレクトリ
- 逆に以下の点は参考にできる。
- 設定パラメータとその意味
- 運用事例
検証内容
- DNSコンテンツサーバーの構築。以下の3台のDNSサーバーを構築する。
- マスターDNSサーバー ns0.example.jp
- スレーブDNSサーバー ns1.example.jp
- スレーブDNSサーバー ns2.example.jp
- 構成に当り、以下の機能を使用してゾーン転送(レプリケーション)を行う。
- AFXR/IFXRによるゾーン転送。
- TSIGキーによるマスター/スレーブの認証。
- カタログゾーン機能による、スレーブDNSサーバーの設定フリー(たぶん)。
- カタログゾーン機能はBIND9 9.11移行の機能であるため、それ未満のサーバー上では運用できない(残念)。
- 他の実装については今時点不明。現在ドラフト状態にあり、RFCに移行するかどうかと関わってくると思われる。
レプリケーションについて
- この手の設定を調べてみるとあまり「レプリケーション」って「言葉」は出ない。
- じゃあ何かというと「セカンダリDNSサーバー」「ゾーン転送」。
- 言わんとすることわかるけど、レプリケーションじゃないかなぁということで、ここではそれで統一。
- マスター・スレイブ、プライマリ・セカンダリ、権威サーバー・コンテンツサーバー、キャッシュサーバー・フルリゾルバ、色々と表現あるけど、適度な使い分けで。。
マスターDNSコンテンツサーバーの基本設定
DNSサーバーとして ports/dns/bind913 をインストールする。
- ここでは特にカスタムする要素は無いので、デフォルトのままとする。
- 説明のため、稼働に必要な最低限の設定とする。
/etc/rc.conf
以下の設定を追加する。
named_enable="YES" named_chrootdir="/var/named" altlog_proglist="named"
※altlog_proglist が既に設定済みの場合、「 named」を追加する。
/usr/local/etc/namedb/named.conf
1 --- /usr/local/etc/namedb/named.conf.orig 2018-09-25 03:54:24.724317000 +0900
2 +++ /usr/local/etc/namedb/named.conf 2018-10-09 00:36:27.390945000 +0900
3 @@ -8,6 +8,22 @@
4 // simple mistakes, you can break connectivity for affected parties,
5 // or cause huge amounts of useless Internet traffic.
6
7 +include "/usr/local/etc/namedb/rndc.key";
8 +include "/usr/local/etc/namedb/ns1-rndc.key";
9 +include "/usr/local/etc/namedb/ns2-rndc.key";
10 +
11 +controls {
12 + inet * port * allow {
13 + 127.0.0.1; ::1;
14 + ns1.example.jpのIPアドレス;
15 + ns2.example.jpのIPアドレス;
16 + } keys {
17 + rndc-key;
18 + ns1-rndc-key;
19 + ns2-rndc-key;
20 + };
21 +};
22 +
23 options {
24 // All file and path names are relative to the chroot directory,
25 // if any, and should be fully qualified.
26 @@ -16,15 +32,22 @@
27 dump-file "/var/dump/named_dump.db";
28 statistics-file "/var/stats/named.stats";
29
30 + recursion no;
31 + allow-query { any; };
32 + allow-recursion { none; };
33 + allow-query-cache { none; };
34 +
35 + allow-new-zones yes;
36 +
37 // If named is being used only as a local resolver, this is a safe default.
38 // For named to be accessible to the network, comment this option, specify
39 // the proper IP address, or delete this option.
40 - listen-on { 127.0.0.1; };
41 + listen-on { any; };
42
43 // If you have IPv6 enabled on this system, uncomment this option for
44 // use as a local resolver. To give access to the network, specify
45 // an IPv6 address, or the keyword "any".
46 -// listen-on-v6 { ::1; };
47 + listen-on-v6 { any; };
48
49 // These zones are already covered by the empty zones listed below.
50 // If you remove the related empty zones below, comment these lines out.
- DNSコンテンツサーバーとして、以下の設定を行うものとする。
- IPv4/IPv6問わず、全てのクエリを受け付ける。
- 再帰問い合わせには答えないものとする。
- よって本設定が行われているゾーン情報のみクエリに対して答える(ルートゾーンを含む)。
- DNSSEC設定/運用、ログ出力設定、ビュー設定といった機能については説明しない。
※カタログゾーン運用のための設定
- 「allow-new-zones yes;」を設定する。
- スレーブDNSサーバーからのRNDCを許可するためのアクセス制御を設定する(たぶん、まだ未確認)。
- このアクセス制御は、TSIGキーとIPアドレスの組み合わせとして許可することができないため、TSIGキーの配布は運用でカバーすること。
- 一応バインド(inet ~ port ~)する単位で制御することは可能だが、IPアドレスはともかくポート番号まで変えると運用が面倒なので、ここではしない。