はじめに
CentOS 6.6サーバにソースからBIND 9.10.1-P1をインストールし、内部向けのDNSキャッシュサーバ(フルサービスリゾルバ)を構築する手順です。
今回の例では、新しく構築したCentOS 6.6サーバ(BINDがインストールされていないサーバ)に対して、ソースファイルからBIND 9.10.1-P1をインストールする手順について記載致します。
今回構築するDNSサーバの用途
今回の例で、BIND 9.10.1-P1をインストールするCentOS 6.6サーバは、プライベートなネットワーク内のマシンやサーバからの名前解決でのみ利用する内部向けDNSキャッシュサーバ(フルサービスリゾルバ)として構築します。
なお、BIND 9.10.1-P1をソースからインストールして、内部向け権威DNSサーバを構築する手順については、以下をご参照下さい。
参考サイト
DNSキャッシュサーバ構築にあたり、以下のページを参考にさせて頂きました。
http://www.atmarkit.co.jp/ait/articles/0101/12/news003.html
https://www.suse.com/ja-jp/documentation/sles10/book_sle_reference/data/sec.dns.named.html
http://www.atmarkit.co.jp/ait/articles/0301/25/news004.html
http://www.atmarkit.co.jp/ait/articles/0311/18/news002.html
http://www.eis.co.jp/bind9_src_build_2/
http://www.eis.co.jp/bind9_src_build_3/
http://park1.wakwak.com/~ima/centos4_bind0001.html
http://jprs.jp/tech/notice/2013-01-07-d-root-ip-address-change.html
BIND 9.10.1-P1のソースファイル
今回の例では、ISCから以下のソースファイルをダウンロードして、BINDをインストールします。
ftp://ftp.isc.org/isc/bind9/9.10.1-P1/bind-9.10.1-P1.tar.gz
BIND 9.10.1-P1インストールする環境
BIND 9.10.1-P1をインストールするOSは以下になります。
・CentOS release 6.6 (2.6.32-504.3.3.el6.x86_64)
BIND 9.10.1-P1ソースインストール手順
新しくOSをインストールしたCentOS 6.6サーバに対して、以下に記載した手順で、BIND 9.10.1-P1をインストールして、DNSキャッシュサーバを構築します。
http://qiita.com/na0AaooQ/items/9ed548dd6db2a0c911c4
権威DNSサーバとDNSキャッシュサーバのインストール手順は共通の部分が多いので、まずは上記手順でBINDサーバをセットアップします。
DNSキャッシュサーバ独自の設定や手順については、後述致します。
BIND 9.10.1-P1によるDNSキャッシュサーバ構築手順
・named.confをDNSキャッシュサーバ用に変更します。
以下のようなnamed.confを作成します。
forwardersで指定している「192.51.100.6」は、以下で構築した内部向け権威DNSサーバのIPアドレスです。
http://qiita.com/na0AaooQ/items/9ed548dd6db2a0c911c4
[root@dns-bind-cache-server ~]# vi /var/named/chroot/etc/named.conf
Controls {
inet 127.0.0.1 allow { localhost; } keys { rndc-key; };
};
include "/etc/rndc.key";
acl "internal-network" {
localhost;
127.0.0.1/32;
198.51.100.0/24;
192.0.2.0/24;
198.51.100.10/32;
198.51.100.11/32;
198.51.100.100/32;
198.51.100.101/32;
192.51.100.6/32;
192.51.100.7/32;
};
options {
version "unknown";
hostname "ns-cache-1.test.example.com";
// /var/named/chrootを基点としてパスを指定する
// /var/named/chroot/var/named のようなパスを指定する場合は/var/namedと指定する。
directory "/var/named";
dump-file "/data/cache_dump.db";
statistics-file "/data/named_status.dat";
pid-file "/var/run/named/named.pid";
// DNS名前解決要求を受け付けるネットワークやマシンを制限する。
// オープンリゾルバにしないよう制限をかける。
listen-on port 53 {
internal-network;
};
allow-query { internal-network; };
// 権威DNSサーバとして構築する場合は再帰検索は受け付けないよう制限する
// recursion no;
// allow-recursion { none; };
// DNSキャッシュサーバを構築する場合は再帰検索を受け付けるようにする
// オープンリゾルバにしないよう制限をかける。
recursion yes;
allow-recursion { internal-network; };
// DNSキャッシュサーバの場合はnoにする。
notify no;
// DNSキャッシュサーバ用設定(BINDサーバのメモリサイズやDNSクライアントからの同時接続数等を考慮して適宜調整する事)
max-ncache-ttl 300;
max-cache-ttl 3600;
recursive-clients 300;
cleaning-interval 60;
lame-ttl 600;
// max-cache-size unlimited;
max-cache-size 1024m;
//
max-transfer-time-in 60;
transfer-format many-answers;
transfers-in 10;
transfers-per-ns 2;
allow-transfer { none; };
allow-update { none; };
};
logging {
channel "log_default"{
file "/var/log/named.log" versions 5 size 5m;
print-time yes;
severity info;
print-category yes;
};
channel "alert" {
file "/var/log/alert.log" versions 8 size 4m;
severity info;
print-time yes;
print-severity yes;
print-category yes;
};
channel "query" {
file "/var/log/query.log" versions 8 size 50m;
severity debug;
print-time yes;
print-severity yes;
print-category yes;
};
category default {"log_default";};
category security {"alert";};
category queries {"query";};
category lame-servers { null; };
};
zone "." IN {
type hint;
file "named.root";
};
zone "localhost." IN {
type master;
file "localhost.zone";
allow-update { none; };
};
zone "localhost.localdomain." IN {
type master;
file "localhost.zone";
allow-update { none; };
};
zone "1.0.0.127.in-addr.arpa." IN {
type master;
file "localhost.rev";
allow-update { none; };
};
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa." IN {
type master;
file "localhost.rev";
allow-update { none; };
};
zone "0.in-addr.arpa." IN {
type master;
file "empty.rev";
allow-update { none; };
};
zone "255.in-addr.arpaa." IN {
type master;
file "empty.rev";
allow-update { none; };
};
zone "test.example.com." IN {
type forward;
forwarders { 192.51.100.6; 192.51.100.7; };
};
zone "100.51.192.in-addr.arpa." IN {
type forward;
forwarders { 192.51.100.6; 192.51.100.7; };
};
[root@dns-bind-cache-server ~]# cat /var/named/chroot/etc/named.conf
Controls {
inet 127.0.0.1 allow { localhost; } keys { rndc-key; };
};
include "/etc/rndc.key";
acl "internal-network" {
localhost;
127.0.0.1/32;
198.51.100.0/24;
192.0.2.0/24;
198.51.100.10/32;
198.51.100.11/32;
198.51.100.100/32;
198.51.100.101/32;
192.51.100.6/32;
192.51.100.7/32;
};
options {
version "unknown";
hostname "ns-cache-1.test.example.com";
// /var/named/chrootを基点としてパスを指定する
// /var/named/chroot/var/named のようなパスを指定する場合は/var/namedと指定する。
directory "/var/named";
dump-file "/data/cache_dump.db";
statistics-file "/data/named_status.dat";
pid-file "/var/run/named/named.pid";
// DNS名前解決要求を受け付けるネットワークやマシンを制限する。
// オープンリゾルバにしないよう制限をかける。
listen-on port 53 {
internal-network;
};
allow-query { internal-network; };
// 権威DNSサーバとして構築する場合は再帰検索は受け付けないよう制限する
// recursion no;
// allow-recursion { none; };
// DNSキャッシュサーバを構築する場合は再帰検索を受け付けるようにする
// オープンリゾルバにしないよう制限をかける。
recursion yes;
allow-recursion { internal-network; };
// DNSキャッシュサーバの場合はnoにする。
notify no;
// DNSキャッシュサーバ用設定(BINDサーバのメモリサイズやDNSクライアントからの同時接続数等を考慮して適宜調整する事)
max-ncache-ttl 300;
max-cache-ttl 3600;
recursive-clients 300;
cleaning-interval 60;
lame-ttl 600;
// max-cache-size unlimited;
max-cache-size 1024m;
//
max-transfer-time-in 60;
transfer-format many-answers;
transfers-in 10;
transfers-per-ns 2;
allow-transfer { none; };
allow-update { none; };
};
logging {
channel "log_default"{
file "/var/log/named.log" versions 5 size 5m;
print-time yes;
severity info;
print-category yes;
};
channel "alert" {
file "/var/log/alert.log" versions 8 size 4m;
severity info;
print-time yes;
print-severity yes;
print-category yes;
};
channel "query" {
file "/var/log/query.log" versions 8 size 50m;
severity debug;
print-time yes;
print-severity yes;
print-category yes;
};
category default {"log_default";};
category security {"alert";};
category queries {"query";};
category lame-servers { null; };
};
zone "." IN {
type hint;
file "named.root";
};
zone "localhost." IN {
type master;
file "localhost.zone";
allow-update { none; };
};
zone "localhost.localdomain." IN {
type master;
file "localhost.zone";
allow-update { none; };
};
zone "1.0.0.127.in-addr.arpa." IN {
type master;
file "localhost.rev";
allow-update { none; };
};
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa." IN {
type master;
file "localhost.rev";
allow-update { none; };
};
zone "0.in-addr.arpa." IN {
type master;
file "empty.rev";
allow-update { none; };
};
zone "255.in-addr.arpaa." IN {
type master;
file "empty.rev";
allow-update { none; };
};
zone "test.example.com." IN {
type forward;
forwarders { 192.51.100.6; 192.51.100.7; };
};
zone "100.51.192.in-addr.arpa." IN {
type forward;
forwarders { 192.51.100.6; 192.51.100.7; };
};
[root@dns-bind-cache-server ~]#
・named.confの構文をチェックします。
[root@dns-bind-cache-server ~]# /usr/local/sbin/named-checkconf /var/named/chroot/etc/named.conf
[root@dns-bind-cache-server ~]#
・不要なゾーンファイルを削除します。
DNSキャッシュサーバから不要なゾーンファイルを削除します。
以下の権威DNSサーバ構築手順を参考にDNSキャッシュサーバを構築した場合、DNSキャッシュサーバとしては、不要なゾーンファイルが出来ていると思います。
http://qiita.com/na0AaooQ/items/9ed548dd6db2a0c911c4
不要なゾーンファイルを削除します。
[root@dns-bind-cache-server ~]# ls -lrta /var/named/chroot/var/named/100.51.192.in-addr.arpa.rev
-rw-r--r--. 1 bind bind 538 Jan 30 23:31 /var/named/chroot/var/named/100.51.192.in-addr.arpa.rev
[root@dns-bind-cache-server ~]# ls -lrta /var/named/chroot/var/named/test.example.com.zone
-rw-r--r--. 1 bind bind 689 Jan 30 23:29 /var/named/chroot/var/named/test.example.com.zone
[root@dns-bind-cache-server ~]#
[root@dns-bind-cache-server ~]# rm -f /var/named/chroot/var/named/100.51.192.in-addr.arpa.rev
[root@dns-bind-cache-server ~]# rm -f /var/named/chroot/var/named/test.example.com.zone
[root@dns-bind-cache-server ~]#
[root@dns-bind-cache-server ~]# ls -lrta /var/named/chroot/var/named/
total 16
-rw-r--r--. 1 bind bind 2172 Jan 30 23:16 named.root
drwxr-xr-x. 5 bind bind 4096 Jan 30 23:16 ..
drwxr-xr-x. 3 bind bind 4096 Jan 30 23:34 chroot
drwxr-xr-x. 3 bind bind 4096 Feb 1 05:07 .
[root@dns-bind-cache-server ~]#
・localhost用のzoneファイルを作成します。
recursionを有効化して再帰検索を行うキャッシュDNSサーバにおいては、localhost等の特殊なゾーンに対する名前解決がルートDNSサーバへ飛ばないよう、localhost等のzoneファイルを作成します。
詳細は以下をご参照下さい。
http://www.eis.co.jp/bind9_src_build_3/
[root@dns-bind-cache-server ~]# vi /var/named/chroot/var/named/localhost.zone
$TTL 1D
@ IN SOA @ root.localhost. (
2015012901 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ; minimum
)
IN NS @
IN A 127.0.0.1
IN AAAA ::1
[root@dns-bind-cache-server ~]# cat /var/named/chroot/var/named/localhost.zone
$TTL 1D
@ IN SOA @ root.localhost. (
2015012901 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ; minimum
)
IN NS @
IN A 127.0.0.1
IN AAAA ::1
[root@dns-bind-cache-server ~]#
[root@dns-bind-cache-server ~]# /usr/local/sbin/named-checkzone localhost /var/named/chroot/var/named/localhost.zone
zone localhost/IN: loaded serial 2015012901
OK
[root@dns-bind-cache-server ~]#
・127.0.0.1逆引き用のrevファイルを作成します。
[root@dns-bind-cache-server ~]# vi /var/named/chroot/var/named/localhost.rev
$TTL 1D
@ IN SOA @ root.localhost. (
2015012901 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ; minimum
)
IN NS localhost.
1 IN PTR localhost.
[root@dns-bind-cache-server ~]# cat /var/named/chroot/var/named/localhost.rev
$TTL 1D
@ IN SOA @ root.localhost. (
2015012901 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ; minimum
)
IN NS localhost.
1 IN PTR localhost.
[root@dns-bind-cache-server ~]#
[root@dns-bind-cache-server ~]# /usr/local/sbin/named-checkzone 0.0.127.in-addr.arpa /var/named/chroot/var/named/localhost.rev
zone 0.0.127.in-addr.arpa/IN: loaded serial 2015012901
OK
[root@dns-bind-cache-server ~]#
・255.x.x.xや0.x.x.x等に合致する逆引き用revファイルを作成します。
[root@dns-bind-cache-server ~]# vi /var/named/chroot/var/named/empty.rev
$TTL 1D
@ IN SOA @ root.localhost. (
2015012901 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ; minimum
)
IN NS localhost.
[root@dns-bind-cache-server ~]# cat /var/named/chroot/var/named/empty.rev
$TTL 1D
@ IN SOA @ root.localhost. (
2015012901 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ; minimum
)
IN NS localhost.
[root@dns-bind-cache-server ~]#
[root@dns-bind-cache-server ~]# /usr/local/sbin/named-checkzone 255.in-addr.arpa /var/named/chroot/var/named/empty.rev
zone 255.in-addr.arpa/IN: loaded serial 2015012901
OK
[root@dns-bind-cache-server ~]#
[root@dns-bind-cache-server ~]# /usr/local/sbin/named-checkzone 0.in-addr.arpa /var/named/chroot/var/named/empty.rev
zone 0.in-addr.arpa/IN: loaded serial 2015012901
OK
[root@dns-bind-cache-server ~]#
・ディレクトリのオーナーとグループ設定。
[root@dns-bind-cache-server ~]# chown -R bind:bind /var/named
[root@dns-bind-cache-server ~]#
[root@dns-bind-cache-server ~]# ls -lrta /var/named/chroot/var/named/
total 28
-rw-r--r--. 1 bind bind 2172 Jan 30 23:16 named.root
drwxr-xr-x. 5 bind bind 4096 Jan 30 23:16 ..
drwxr-xr-x. 3 bind bind 4096 Jan 30 23:34 chroot
-rw-r--r--. 1 bind bind 317 Feb 1 05:49 localhost.zone
-rw-r--r--. 1 bind bind 283 Feb 1 05:49 localhost.rev
-rw-r--r--. 1 bind bind 251 Feb 1 05:57 empty.rev
drwxr-xr-x. 3 bind bind 4096 Feb 1 05:58 .
[root@dns-bind-cache-server ~]#
・resolv.confをBINDサーバ自身に変更します。
resolv.confのnameserverの1つ目のサーバには、BINDサーバ(今回構築したDNSキャッシュサーバ)自身を指定します。
DNSキャッシュサーバの場合、再帰検索が可能ですので、resolv.confのnameserver行は1つだけでも、DNSキャッシュサーバとして動作致します。
必要に応じて、nameserver行を追加し、プロバイダ等が提供するDNSフルサービスリゾルバ(DNSキャッシュサーバ)のIPアドレスを追加します。今回の例では、resolv.confのnameserverは1つだけ指定する事にします。
[root@dns-bind-cache-server ~]# vi /etc/resolv.conf
search test.example.com
nameserver 127.0.0.1
[root@dns-bind-cache-server ~]# cat /etc/resolv.conf
search test.example.com
nameserver 127.0.0.1
[root@dns-bind-cache-server ~]#
・BINDサーバ上にhintファイル(最新のDNSルートサーバ一覧を記載したhintファイル)を更新するシェルスクリプトを作成します。
hintファイルを更新する場合、rndc reloadやBINDの再起動が必要になります。hintファイル更新時の詳細については、以下をご参照下さい。
http://jprs.jp/tech/notice/2013-01-07-d-root-ip-address-change.html
以下のようなhintファイル更新スクリプトを作成します。
※本番環境のDNSキャッシュサーバを運用する場合、hintファイルが取得できない場合や構文チェックでエラーが起きた場合の判定処理をもう少し強化した方がよいかもしれません。
[root@dns-bind-cache-server ~]# vi /usr/local/bin/update_dns_hint_file.sh
#!/bin/sh
root_dns_serer="a.root-servers.net"
hint_file="/var/named/chroot/var/named/named.root"
hostname
date
if [ -f ${hint_file} ] ; then
mv ${hint_file} ${hint_file}.OLD
fi
/usr/local/bin/dig @${root_dns_serer} . ns > ${hint_file}
if [ -f ${hint_file} ] ; then
chown bind:bind ${hint_file}
ls -lrta ${hint_file}
/usr/local/sbin/named-checkzone . ${hint_file}
/usr/local/sbin/rndc reload
ps awux | grep -v grep | grep named
fi
date
スクリプトに実行権限を付与します。
[root@dns-bind-cache-server ~]# chmod 754 /usr/local/bin/update_dns_hint_file.sh
[root@dns-bind-cache-server ~]# chown root:bind /usr/local/bin/update_dns_hint_file.sh
[root@dns-bind-cache-server ~]#
・BINDサーバのcrontabの設定。
DNSキャッシュサーバのcrontabに対して、ntpdateによる時刻同期、hintファイルを定期的に更新する処理を追加します。
[root@dns-bind-cache-server ~]# crontab -e
(末尾に以下の処理を追加します)
*/5 * * * * /usr/sbin/ntpdate -s -b ntp.jst.mfeed.ad.jp
30 6 * * * /usr/local/bin/update_dns_hint_file.sh
[root@dns-bind-cache-server ~]#
[root@dns-bind-cache-server ~]# crontab -l
*/5 * * * * /usr/sbin/ntpdate -s -b ntp.jst.mfeed.ad.jp
30 6 * * * /usr/local/bin/update_dns_hint_file.sh
[root@dns-bind-cache-server ~]#
[root@dns-bind-cache-server ~]# ll /var/named/chroot/var/named/named.root
-rw-r--r--. 1 bind bind 2196 Feb 1 06:30 /var/named/chroot/var/named/named.root
[root@dns-bind-cache-server ~]#
・BINDの起動テストを行います。
[root@dns-bind-cache-server ~]# hostname
dns-bind-cache-server
[root@dns-bind-cache-server ~]# chown -R bind:bind /var/named
[root@dns-bind-cache-server ~]#
[root@dns-bind-cache-server ~]# /etc/init.d/named stop
Stopping named: [ OK ]
[root@dns-bind-cache-server ~]#
[root@dns-bind-cache-server ~]# ps awux | grep -v grep | grep named
[root@dns-bind-cache-server ~]#
[root@dns-bind-cache-server ~]# /etc/init.d/named checkconfig
named-checkconf -z -t /var/named/chroot /etc/named.conf
zone localhost/IN: loaded serial 2015012901
zone localhost.localdomain/IN: loaded serial 2015012901
zone 1.0.0.127.in-addr.arpa/IN: loaded serial 2015012901
zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 2015012901
zone 0.in-addr.arpa/IN: loaded serial 2015012901
zone 255.in-addr.arpaa/IN: loaded serial 2015012901
[root@dns-bind-cache-server ~]#
[root@dns-bind-cache-server ~]# ps awux | grep -v grep | grep named
[root@dns-bind-cache-server ~]#
[root@dns-bind-cache-server ~]# /etc/init.d/named start
Starting named: named-checkconf -z -t /var/named/chroot /etc/named.conf
daemon /var/named/chroot/sbin/named -u bind -4 -t /var/named/chroot -c /etc/named.conf
[ OK ]
[root@dns-bind-cache-server ~]#
[root@dns-bind-cache-server ~]# ps awux | grep -v grep | grep named
bind 10735 2.5 1.9 139604 11976 ? Ssl 06:52 0:00 /var/named/chroot/sbin/named -u bind -4 -t /var/named/chroot -c /etc/named.conf
[root@dns-bind-cache-server ~]#
[root@dns-bind-cache-server ~]# /etc/init.d/named restart
Stopping named: [ OK ]
Starting named: named-checkconf -z -t /var/named/chroot /etc/named.conf
daemon /var/named/chroot/sbin/named -u bind -4 -t /var/named/chroot -c /etc/named.conf
[ OK ]
[root@dns-bind-cache-server ~]#
[root@dns-bind-cache-server ~]# ps awux | grep -v grep | grep named
bind 10758 2.0 1.9 139604 11976 ? Ssl 06:53 0:00 /var/named/chroot/sbin/named -u bind -4 -t /var/named/chroot -c /etc/named.conf
[root@dns-bind-cache-server ~]#
[root@dns-bind-cache-server ~]# /usr/local/sbin/rndc reload
server reload successful
[root@dns-bind-cache-server ~]#
[root@dns-bind-cache-server ~]# /usr/local/sbin/rndc flush
[root@dns-bind-cache-server ~]#
[root@dns-bind-cache-server ~]# ps awux | grep -v grep | grep named
bind 10758 0.3 2.5 139864 15444 ? Ssl 06:53 0:00 /var/named/chroot/sbin/named -u bind -4 -t /var/named/chroot -c /etc/named.conf
[root@dns-bind-cache-server ~]#
BIND動作確認
・構築したBINDサーバを指定して、DNSキャッシュサーバとして名前解決可能かテストします。
また、digの名前解決結果で、flagsに「aa」が表示されない事、「ra」が表示される事を確認します。digのflasgの詳細については以下サイトをご参照下さい。
http://d.hatena.ne.jp/japanrock_pg/20090410/1239355230
aa: 回答したDNSサーバが、問い合わせたゾーンについて、権威を持っている場合に表示されるフラグ。
ra: サーバが再帰的問い合わせをサポートしている場合に表示されるフラグ。
・構築したBINDサーバを指定して、正引き名前解決をテストします。
[root@dns-bind-cache-server ~]# hostname
dns-bind-cache-server
[root@dns-bind-cache-server ~]# cat /etc/resolv.conf
search test.example.com
nameserver 127.0.0.1
[root@dns-bind-cache-server ~]#
[root@dns-bind-cache-server ~]# dig www.test.example.com @127.0.0.1
; <<>> DiG 9.10.1-P1 <<>> www.test.example.com @127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46414
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.test.example.com. IN A
;; ANSWER SECTION:
www.test.example.com. 3556 IN CNAME host1.test.example.com.
host1.test.example.com. 3556 IN A 192.51.100.9
;; AUTHORITY SECTION:
test.example.com. 3556 IN NS ns2.test.example.com.
test.example.com. 3556 IN NS ns1.test.example.com.
;; ADDITIONAL SECTION:
ns1.test.example.com. 3556 IN A 192.51.100.6
ns2.test.example.com. 3556 IN A 192.51.100.7
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Feb 01 07:03:49 JST 2015
;; MSG SIZE rcvd: 153
[root@dns-bind-cache-server ~]#
・構築したBINDサーバを指定して、逆引き名前解決をテストします。
[root@dns-bind-cache-server ~]# dig -x 192.51.100.9 @127.0.0.1
; <<>> DiG 9.10.1-P1 <<>> -x 192.51.100.9 @127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24761
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;9.100.51.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
9.100.51.192.in-addr.arpa. 3563 IN PTR host1.test.example.com.
;; AUTHORITY SECTION:
100.51.192.in-addr.arpa. 3563 IN NS ns1.test.example.com.
100.51.192.in-addr.arpa. 3563 IN NS ns2.test.example.com.
;; ADDITIONAL SECTION:
ns1.test.example.com. 3547 IN A 192.51.100.6
ns2.test.example.com. 3547 IN A 192.51.100.7
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Feb 01 07:03:58 JST 2015
;; MSG SIZE rcvd: 158
[root@dns-bind-cache-server ~]#
・再帰検索によりwww.yahoo.com等の名前解決が可能であるかテストします。
[root@dns-bind-cache-server ~]# dig www.yahoo.com @127.0.0.1
; <<>> DiG 9.10.1-P1 <<>> www.yahoo.com @127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31841
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 4, ADDITIONAL: 5
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.yahoo.com. IN A
;; ANSWER SECTION:
www.yahoo.com. 298 IN CNAME fd-fp3.wg1.b.yahoo.com.
fd-fp3.wg1.b.yahoo.com. 58 IN A 106.10.139.246
;; AUTHORITY SECTION:
wg1.b.yahoo.com. 3598 IN NS yf2.yahoo.com.
wg1.b.yahoo.com. 3598 IN NS yf3.a1.b.yahoo.net.
wg1.b.yahoo.com. 3598 IN NS yf1.yahoo.com.
wg1.b.yahoo.com. 3598 IN NS yf4.a1.b.yahoo.net.
;; ADDITIONAL SECTION:
yf1.yahoo.com. 3598 IN A 68.142.254.15
yf2.yahoo.com. 3598 IN A 68.180.130.15
yf3.a1.b.yahoo.net. 3599 IN A 111.67.241.16
yf4.a1.b.yahoo.net. 3599 IN A 111.67.241.16
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Feb 01 07:07:01 JST 2015
;; MSG SIZE rcvd: 235
[root@dns-bind-cache-server ~]#
・BINDサーバのnamed.confやiptablesにて、DNS名前解決要求の受付を許可したリモートマシンから名前解決可能かテストします。
c:\>ipconfig /flushdns
Windows IP 構成
DNS リゾルバー キャッシュは正常にフラッシュされました。
c:\>nslookup www.test.example.com [今回構築したDNSキャッシュサーバのIPアドレスを指定する]
サーバー: ****************************
Address: XXX.XXX.XXX.XXX
権限のない回答:
名前: host1.test.example.com
Address: 192.51.100.9
Aliases: www.test.example.com
c:\>nslookup 192.51.100.9 [今回構築したDNSキャッシュサーバのIPアドレスを指定する]
サーバー: ****************************
Address: XXX.XXX.XXX.XXX
名前: host1.test.example.com
Address: 192.51.100.9
・今回構築したBINDサーバを指定した場合、DNSキャッシュサーバなので、権威を持たないゾーンの名前についても、再帰検索により名前解決可能な事を確認します。
c:\>ipconfig /flushdns
Windows IP 構成
DNS リゾルバー キャッシュは正常にフラッシュされました。
c:\>nslookup www.yahoo.com [今回構築したDNSキャッシュサーバのIPアドレスを指定する]
サーバー: ****************************
Address: XXX.XXX.XXX.XXX
権限のない回答:
名前: fd-fp3.wg1.b.yahoo.com
Addresses: 2406:2000:e4:200::4001
106.10.139.246
Aliases: www.yahoo.com
c:\>nslookup www.google.co.jp [今回構築したDNSキャッシュサーバのIPアドレスを指定する]
サーバー: ****************************
Address: XXX.XXX.XXX.XXX
権限のない回答:
名前: www.google.co.jp
Addresses: 2404:6800:4004:810::101f
173.194.38.216
173.194.38.223
173.194.38.215
173.194.38.207
c:\>nslookup 173.194.38.215 [今回構築したDNSキャッシュサーバのIPアドレスを指定する]
サーバー: ****************************
Address: XXX.XXX.XXX.XXX
名前: nrt13s01-in-f23.1e100.net
Address: 173.194.38.215
c:\>
・起動したBINDのバージョンがBIND 9.10.1-P1である事を確認します。
[root@dns-bind-cache-server ~]# hostname
dns-bind-cache-server
[root@dns-bind-cache-server ~]# ps awux | grep -v grep | grep named
bind 11049 0.0 3.4 147928 20872 ? Ssl 07:02 0:00 /var/named/chroot/sbin/named -u bind -4 -t /var/named/chroot -c /etc/named.conf
[root@dns-bind-cache-server ~]#
[root@dns-bind-cache-server ~]# /var/named/chroot/sbin/named -v
BIND 9.10.1-P1
[root@dns-bind-cache-server ~]#
・digコマンドではBINDのバージョン情報がunknownとして表示される事を確認します。
[root@dns-bind-cache-server ~]# dig +noall +ans @127.0.0.1 chaos txt version.bind
version.bind. 0 CH TXT "unknown"
[root@dns-bind-cache-server ~]#
ここまでの設定でDNSキャッシュサーバとして正引き、逆引きによる名前解決が動作するようになりました。
rndcコマンドによるBINDの操作 (DNSキャッシュダンプとDNSキャッシュクリア)
BINDサーバではrndcコマンドを利用して、namedプロセスをreloadしたり、namedの統計情報をファイルに出力する等の操作が可能です。
DNSキャッシュサーバのメモリ上のDNSキャッシュをダンプファイルへ出力したり、DNSキャッシュサーバのDNSキャッシュをクリアする事が可能です。
・namedがメモリ上にキャッシュしたDNSキャッシュをダンプファイルに出力します。
[root@dns-bind-cache-server ~]# /usr/local/sbin/rndc dumpdb
[root@dns-bind-cache-server ~]#
DNSキャッシュの内容が/var/named/chroot/data/cache_dump.dbファイルに出力されます。
[root@dns-bind-cache-server ~]# ls -lrta /var/named/chroot/data/cache_dump.db
-rw-r--r--. 1 bind bind 38207 Feb 1 07:21 /var/named/chroot/data/cache_dump.db
[root@dns-bind-cache-server ~]#
[root@dns-bind-cache-server ~]# grep www.yahoo /var/named/chroot/data/cache_dump.db
www.yahoo.com. 293 CNAME fd-fp3.wg1.b.yahoo.com.
[root@dns-bind-cache-server ~]#
[root@dns-bind-cache-server ~]# grep www.test /var/named/chroot/data/cache_dump.db
www.test.example.com. 2483 CNAME host1.test.example.com.
[root@dns-bind-cache-server ~]#
・namedがメモリ上にキャッシュしたDNSキャッシュをクリアします。
[root@dns-bind-cache-server ~]# /usr/local/sbin/rndc flush
[root@dns-bind-cache-server ~]#
以下のようにDNSキャッシュがクリアされます。
[root@dns-bind-cache-server ~]# ls -lrta /var/named/chroot/data/cache_dump.db
-rw-r--r--. 1 bind bind 38207 Feb 1 07:21 /var/named/chroot/data/cache_dump.db
[root@dns-bind-cache-server ~]#
[root@dns-bind-cache-server ~]# /usr/local/sbin/rndc dumpdb
[root@dns-bind-cache-server ~]#
[root@dns-bind-cache-server ~]# ls -lrta /var/named/chroot/data/cache_dump.db
-rw-r--r--. 1 bind bind 541 Feb 1 07:24 /var/named/chroot/data/cache_dump.db
[root@dns-bind-cache-server ~]#
[root@dns-bind-cache-server ~]# grep www.yahoo /var/named/chroot/data/cache_dump.db
[root@dns-bind-cache-server ~]#
[root@dns-bind-cache-server ~]# grep www.test /var/named/chroot/data/cache_dump.db
[root@dns-bind-cache-server ~]#
ここまでの設定でDNSキャッシュサーバとして一通り稼動するようになりました。
BINDサーバがオープンリゾルバになっていない事を確認する
・オープンリゾルバ確認サイトやコマンドで、今回構築したBINDサーバがオープンリゾルバになっていない事を確認します。
http://www.openresolver.jp/
https://www.jpcert.or.jp/pr/2013/pr130002.html#cli
以下のように「NOT open」と表示されていれば、オープンリゾルバは無効化されていますので、問題ありません。
[root@dns-bind-cache-server ~]# curl --location-trusted http://www.openresolver.jp/cli/check.html
Configured DNS server: [NOT open] [今回構築したDNSキャッシュサーバのIPアドレスが表示される](dns-bind-cache-server)
Source IP address: [NOT open] [今回構築したDNSキャッシュサーバのIPアドレスが表示される](dns-bind-cache-server)
[root@dns-bind-cache-server ~]#
DNSキャッシュサーバのDNSキャッシュポイズニングの脆弱性有無チェック
BINDでDNSキャッシュサーバを構築した場合、以下のサイトを参考にして、DNSキャッシュポイズニングの脆弱性有無をチェックします。
http://www.ipa.go.jp/security/vuln/documents/2008/200809_DNS.html
http://blog.cles.jp/item/2733
DNSキャッシュポイズニングの脆弱性チェックコマンドを実行する事で、以下の脆弱性の有無について、チェックする事が可能です。
A. DNS問い合わせに使用するポート番号がランダム化されていない。
B. DNS問い合わせに使用するIDがランダム化されていない。
C. 外部からの再帰的なDNS問い合わせに対して回答してしまう。
DNSキャッシュポイズニングの脆弱性チェックコマンドを実行していきます。
・A. DNS問い合わせに使用するポート番号がランダム化されていない脆弱性の有無をチェックします。
構築したBINDサーバ上で、以下の脆弱性チェック用コマンドを実行します。
「GREAT」と表示されている場合は問題ありません。問題がある場合はGOODやPOORと表示されるそうです。
[root@dns-bind-cache-server ~]# dig -x dig +short porttest.dns-oarc.net TXT
porttest.y.x.w.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.pt.dns-oarc.net.
"[今回構築したDNSキャッシュサーバのIPアドレスが表示される] is GREAT: 26 queries in 3.1 seconds from 26 ports with std dev 17929"
[root@dns-bind-cache-server ~]#
・B. DNS問い合わせに使用するIDがランダム化されていない脆弱性の有無をチェックします。
構築したBINDサーバ上で、以下の脆弱性チェック用コマンドを実行します。
「GREAT」と表示されている場合は問題ありません。問題がある場合はGOODやPOORと表示されるそうです。
[root@dns-bind-cache-server ~]# dig +short txidtest.dns-oarc.net TXT
txidtest.y.x.w.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.pt.dns-oarc.net.
"[今回構築したDNSキャッシュサーバのIPアドレスが表示される] is GREAT: 26 queries in 3.2 seconds from 26 txids with std dev 18745"
[root@dns-bind-cache-server ~]#
・C. 外部からの再帰的なDNS問い合わせに対して回答してしまう脆弱性の有無をチェックします。
現状「IANA ― Cross-Pollination Scan」に、脆弱性チェックを行える画面が見つかりませんでした。
http://www.iana.org/
代わりに、前述の「BINDサーバがオープンリゾルバになっていない事を確認する」で、BINDサーバがオープンリゾルバになっていない事を確認しました。
問題なければ、BINDサーバの構築はひとまず完了です。
以上になります。