DNSサーバ BINDの設定です。
説明は CentOS6/7 についてです。
また、ここでは、以下のシナリオでの設定例です。
- DNSはプライマリDNSサーバのみ立て、セカンダリは立てません。
- DNSサーバが管理するドメインは、test.example.com とします。
- 管理するホストはネットワークアドレス 10.0.2.0/24 上の、次のものとします。
- DNSサーバ(今回設定するサーバ)
IPアドレス:10.0.2.15、FQDN:ns.test.example.com - mailサーバ
IPアドレス10.0.2.10、FQDN:mail.test.example.com - その他
IPアドレス:10.0.2.16、FQDN:pc1.test.example.com
IPアドレス:10.0.2.17、FQDN:pc2.test.example.com
- DNSサーバ(今回設定するサーバ)
インストール
SELinux を無効にします。
有効にしたまま SELinux の BIND用の設定も行っていないと、BINDの起動時にエラーになります。
/etc/sysconfig/selinux
SELINUX=disabled
上記設定は再起動で有効になります。
再起動するまでは暫定的に下記で SELinux を無効に出来ますので、すぐに再起動を行わない場合は実行します。
setenforce 0
yum で BIND をインストールします。
yum install bind-chroot
今回のように yum install bind-chroot で BIND をインストールする場合は、chroot 環境によって、BIND関連のプロセスのルートは /var/named/chroot となります。
従って、以降 named.conf 等で記述されるファイルパスのルートは /var/named/chroot/ となります。
BINDのサンプル設定ファイルをコピーして使用します。
cp /usr/share/doc/bind-*/sample/etc/named.* /var/named/chroot/etc/ chmod 640 /var/named/chroot/etc/named.* chown root:named /var/named/chroot/etc/named.* cp /usr/share/doc/bind-*/sample/var/named/named.* /var/named/chroot/var/named/
DNSルートサーバの情報を、BINDの設定に反映させます。
wget ftp://ftp.nic.ad.jp/internet/rs.internic.net/domain/named.root mv -f named.root /var/named/chroot/var/named/named.ca chmod 640 /var/named/chroot/var/named/named.* chown root:named /var/named/chroot/var/named/named.*
BINDのログ保存用ディレクトリを用意します。
mkdir /var/named/chroot/var/named/log chown named:named /var/named/chroot/var/named/log
設定
named.confへの設定
named.conf は次のように設定します。
以降で各設定内容を説明します。
/var/named/chroot/etc/named.conf
options { version "Unknown"; directory "/var/named"; dump-file "data/cache_dump.db"; statistics-file "data/named_stats.txt"; memstatistics-file "data/named_mem_stats.txt"; listen-on port 53 { any; }; listen-on-v6 port 53 { none; }; recursion yes; allow-query { any; }; allow-query-cache { localhost; localnets; }; allow-recursion { localhost; localnets; }; pid-file "/run/named/named.pid"; }; logging { channel "default-log" { file "/var/named/log/named.log" versions 10 size 10M; severity info; print-time yes; print-severity yes; print-category yes; }; category default { "default-log"; }; category general { "default-log"; }; category config { "default-log"; }; category lame-servers { null; }; }; view "external" { match-clients { any; }; zone "." IN { type hint; file "/var/named/named.ca"; }; include "/etc/named.rfc1912.zones"; zone "test.example.com" in { type master; file "test.example.com.zone"; }; zone "2.0.10.in-addr.arpa" in { type master; file "test.example.com.rev"; }; };
以降で各設定内容について、説明します。
named.confへの設定(BINDの動作の基本的な設定)
options { version "Unknown"; directory "/var/named"; dump-file "data/cache_dump.db"; statistics-file "data/named_stats.txt"; memstatistics-file "data/named_mem_stats.txt"; listen-on port 53 { any; }; listen-on-v6 port 53 { none; }; recursion yes; allow-query { any; }; allow-query-cache { localhost; localnets; }; allow-recursion { localhost; localnets; }; pid-file "/run/named/named.pid"; };
version
バージョン問い合わせに対して BIND が返す内容です。
DNSサーバが BIND であることやバージョンを隠ぺいする為に、Unknown を返すようにしています。
directory
named.conf で記述されるファイルパスが相対パスの場合の、ルートディレクトリを指定します。
なお、今回のように yum install bind-chroot で BIND をインストールしている場合は、chroot 環境によって、BIND関連のプロセスのルートは /var/named/chroot となっています。
従って、directoryオプションで /var/named と記述された場合、ルートは /var/named/chroot/var/named となります。
dump-file
rndc dumpdb コマンド実行時にダンプされるファイルのパスを指定します。
statistics-file
rndc stats コマンド実行で書き出す統計情報の出力先を指定します。
memstatistics-file
終了時にメモリの使用状況に関する統計情報が書き出されますが、そのファイルのパスを指定します。
listen-on port 53 { any; };
DNSサービスを待ち受けるポート番号と、待ち受けるIPv4のIPアドレスを指定します。
ポートは53番固定です。
待ち受けるIPアドレスに any を指定すると、DNSサーバ上のどのIPアドレスでも待ち受けます。
DNSサーバに複数IPアドレスが設定されている場合は、指定のIPアドレスで待ち受けることも出来ますので、その際はそのIPアドレスを記述します。
listen-on-v6 port 53 { none; };
IPv6で待ち受けるポート番号を指定します。
IPv6 を使用しない場合は none を指定します。
recursion yes;
再帰問い合わせの実施の有無を指定します。
yes にすると、自分の管轄外のドメインに関する問い合わせについて、DNSサーバが外部のDNSサーバに対して問い合わせを行い、その結果をクライアントに返答します。
no にすると、自分の管轄内のドメインに関する問い合わせについてのみ返答します。この場合、クライアント自身は適切なDNSサーバに問い合わせを行います。
yes に設定すると DDos攻撃に利用されるので、再帰問い合わせは、DNSサーバが所属する内部ネットワークからのみ、等のように制限した方が良いです。
制限は、allow-recursion(後述)で再帰問い合わせを受け付ける対象を指定して行います。
allow-query { any; };
DNSサーバが問い合わせに対して応答するクライアントを指定します。
any を指定するとどのクライアントに対しても応答します。
localnets を指定するとDNSサーバが所属するネットワーク内からのみ応答します。
allow-query-cache { localhost; localnets; };
キャッシュデータを使用して応答を返す対象を指定します。
localhost はDNSサーバ自身、localnets はDNSサーバが所属するネットワークを示します。
allow-recursion { localhost; localnets; };
再帰問い合わせ(recursionの箇所参照)を受け付ける対象を指定します。
localhost はDNSサーバ自身、localnets はDNSサーバが所属するネットワークを示します。
DDos攻撃に利用されないように、localhost、localnets に制限しています。
pid-file “/run/named/named.pid”;
BINDの動作時のプロセスIDを保存するファイルのパスを指定します。
named.confへの設定(ログに関する設定)
logging { channel "default-log" { file "/var/named/log/named.log" versions 10 size 10M; severity info; print-time yes; print-severity yes; print-category yes; }; category default { "default-log"; }; category general { "default-log"; }; category config { "default-log"; }; category lame-servers { null; }; };
channel “default-log”
channel名 “default-log” における、ログの出力先設定を指定します。
channel名は任意の名前を指定でき、これを後述の category で指定します。
file
出力するログファイル名を指定します。
今回のように yum install bind-chroot で BIND をインストールしている場合は、chroot 環境によって、BIND関連のプロセスのルートは /var/named/chroot となっています。
従って、ここで /var/named/log/named.log と記述された場合、実際のログ出力先は /var/named/chroot/var/named/log/named.log となります。
versions 10 size 10M で、サイズが 10M のログを、10世代のバックアップで出力します。
この場合、named.log に加えて、named.log.0 ~ named.log.9 の10世代となります。
severity info;
ログ出力する重要度のレベル指定します。このレベル以上のレベルのログが出力されます。
info にすると、情報、警告、エラーレベルのログが出力されます。
print-time yes;
print-severity yes;
print-category yes;
ログに時間、重要度、カテゴリも出力します。
category default { “default-log”; };
category general { “default-log”; };
category config { “default-log”; };
category lame-servers { null; };
次の書式で指定します。
category カテゴリ channel名
カテゴリに対するログの channel名を指定します。
指定した channel名でどのようにログ出力されるかは、先述の channel を参照して下さい。
カテゴリは、下記ページの「ロギングのカテゴリ設定」の箇所を参照して下さい。
なお、今回の設定例では、DNSサーバに対して、どのような問い合わせがあったかはログ出力していません。
この場合もログ出力する場合は、下記を参照して下さい。
named.confへの設定(ゾーンファイルに関する設定)
DNSサーバで管理するホスト名(ドメイン名)やIPアドレスに関する設定を行います。
設定はここで指定したファイル内で詳しく記述します。
その設定は、後述の「ゾーンファイルの設定」で説明します。
view "external" { match-clients { any; }; zone "." IN { type hint; file "/var/named/named.ca"; }; include "/etc/named.rfc1912.zones"; zone "test.example.com" in { type master; file "test.example.com.zone"; }; zone "2.0.10.in-addr.arpa" in { type master; file "test.example.com.rev"; }; };
view “external”
viewでくくられた設定を示す名称を設定します。
ここでは、この名称は他に使用する箇所は無いので、任意で良いです。
match-clients
この view が対象とするクライアントを指定します。
any を指定すると全てのクライアントを対象とします。
192.168.24.0/24 のように書くと、このネットワーク内のクライアントからの問い合わせを対象にします。
view を複数記述出来ますが、その場合は match-clients を any にした view は最後に記述するようにして下さい。
そうしないと、全てのクライアントは match-clients が any の view が適用され、後続の view は適用されず、意図しない動作になります。
zone “.” IN {
type hint;
file “/var/named/named.ca”;
};
zone “.” でルートゾーンであることを示します。
type hint; で、キャッシュとして利用することを指定します。
file “/var/named/named.ca”; でルートゾーンファイルのパスを指定します。
なお、chroot 環境によって、実際のファイルパスは /var/named/chroot/var/named/named.ca となります。
include “/etc/named.rfc1912.zones”;
include で指定したファイルの設定を読み込みます。
/etc/named.rfc1912.zones の中で更にファイル named.localhost、named.loopback、named.empty が読み込まれています。
これらのファイルで localhost と 127.0.0.1 の名前解決の設定などがされています。
なお、chroot 環境によって、これらのファイルは /var/named/chroot/var/named/下となります。
ここは、このまま使用します。
zone “test.example.com” in {
type master;
file “test.example.com.zone”;
};
zone “test.example.com”
ドメイン test.example.com に関する設定を示します。
type master;
ゾーン情報がマスターであることを示します。
master が指定されると、このゾーンのプライマリーサーバになります。
その他、マスターの複製であることを示す slave がありますが、ここでは特に説明しません。
file “test.example.com.zone”;
正引きゾーンファイル(後述)の場所を指定します。
なお、chroot 環境によって、ファイルパスは /var/named/chroot/var/named/test.example.com.zone です。
zone “2.0.10.in-addr.arpa” in {
type master;
file “test.example.com.rev”;
};
zone “2.0.10.in-addr.arpa”
ネットワークアドレス 10.0.2.0/24 に関する設定であることを示します。
記述は 2.0.10 のようにネットワークアドレスの逆になっていることに注意して下さい。
type master;
ゾーン情報がマスターであることを示します。
master が指定されると、このゾーンのプライマリーサーバになります。
その他、マスターの複製であることを示す slave がありますが、ここでは特に説明しません。
file “test.example.com.rev”;
逆引き用ゾーンファイル(後述)の場所を指定します。
なお、chroot 環境によって、ファイルパスは /var/named/chroot/var/named/test.example.com.rev です。
ゾーンファイルの設定
ゾーンファイルは以下のように設定しますが、長くなりましたので説明は次回にします。
/var/named/chroot/var/named/test.example.com.zone
$TTL 86400 @ IN SOA ns root ( 2015061903 ; Serial 10800 ; Refresh 3600 ; Retry 3600000 ; Default TTL 86400 ) ; Expire @ IN NS ns ns IN A 10.0.2.15 @ IN MX 10 mail mail IN A 10.0.2.10 pc1 IN A 10.0.2.16 pc2 IN A 10.0.2.17
/var/named/chroot/var/named/test.example.com.rev
$TTL 86400 @ IN SOA ns root ( 2015061903 ; Serial 10800 ; Refresh 3600 ; Retry 3600000 ; Default TTL 86400 ) ; Expire @ IN NS ns.test.example.com. 10 IN PTR mail.test.example.com. 15 IN PTR ns.test.example.com. 16 IN PTR pc1.test.example.com. 17 IN PTR pc2.test.example.com.
参考
DNSサーバー構築(BIND) – CentOSで自宅サーバー構築
What’s the difference between allow-query-cache and allow-recursion? | Internet Systems Consortium Knowledge Base
実用 BIND 9で作るDNSサーバ(2):すべての基礎、マスター・ゾーンサーバの設定 (1/3) – @IT
実用 BIND 9で作るDNSサーバ(13):次世代のセキュリティ拡張DNSSECをBIND 9で実現 (3/3) – @IT
省略形ゾーンファイル : お父さんのためのDNS講座
強いBIND DNSサーバを構築する 第五回 SOAレコードとゾーン転送 | ユーロテック情報システム販売株式会社
Chapter 6. BIND 9 Configuration Reference
BIND 9 Manual Pages (DNS, BIND Nameserver, DHCP, LDAP and Directory Services)
インターネット10分講座:DNSキャッシュ – JPNIC
RFC1315
BINDのロギング機能
コメント