Engineering Note

プログラミングなどの技術的なメモ

3.6 BIND 動作確認テスト

dns-icon

前回まででマスターサーバとスレーブサーバの設定が完了しました。

今回はBINDの動作確認テストとして、クライアントPC及びスレーブサーバからの問い合わせと、ゾーン転送要求の確認について学んでいきます。

 

ファイアウォールの設定

まず、マスターサーバ側とスレーブサーバ側のファイアウォールの設定を確認します。

DNSでは、TCP及びUDPのポート番号53番を使用します。

通常の名前解決(Aレコードなどの問い合わせなど)においてはUDPを使用し(データ量が512byte以上の場合はTCPに切り替える)、DNSサーバ間のゾーン転送はTCPを使用します。

デフォルトでは、これらのポートは閉じているので、開ける必要があります。

iptablesもしくはfirewalldを使い、マスターサーバとスレーブサーバそれぞれのポートを開放します。

個人的にはfirewalldが使いやすかったので、以下コマンドでポートを開放し、サービスを再起動します。

 

 > firewall-cmd --add-service=dns --zone=public --permanent
 > service firewalld restart

 

クライアントPCから問い合わせる

それでは、クライアントであるWindows PCからnslookupコマンドを使いAレコードを問い合わせてみます。

具体的なネットワーク構成図やIPアドレス表については3.0 DNSサーバ構築をご覧ください。

 

 > nslookup www.dns-book.com 192.168.3.1
 サーバー:  UnKnown
 Address:  192.168.3.1

 名前:    www.dns-book.com
 Address:  192.168.0.1

 

上記から問題なくAレコードが返ってきました。

ちなみにゾーン転送要求が許可されていないホストからゾーン情報を参照しようとすると以下のエラーが返ってきます。

 

 nslookupの場合
 > nslookup
 既定のサーバー:  UnKnown
 Address:  192.168.3.1
 
 > ls dns-book.com
 [UnKnown]
 *** ドメイン dns-book.com を一覧表示できません: Query refuse
 コンピューターへのゾーン dns-book.com の転送が DNS サーバーに
 処理が正しくない場合は、IP アドレス 192.168.3.1 の DNS サーバ
 dns-book.com のゾーン転送セキュリティ設定を確認してください。
 
 digコマンドの場合
 > dig @ns.dns-book.com dns-book.com AXFR
 ; <<>> DiG 9.11.5-1-Debian <<>> @ns.dns-book.com dns-book.com AXFR
 ; (1 server found)
 ;; global options: +cmd
 ; Transfer failed.

 

スレーブサーバから問い合わせる

それではスレーブサーバからゾーン転送の情報を取得してみたいと思います。

digコマンドのレコードタイプにAXFR(Asynchronous XFeR)を指定すると、ゾーン転送のデータを受け取ることができます。

なお、これはマスターサーバ側の"named.conf"内の"allow-transfer"に記述したホストしか許可されません。

 

 > dig @ns.dns-book.com dns-book.com AXFR					
 ; <<>> DiG 9.9.5-3ubuntu0.18-Ubuntu <<>> @ns.dns-book.com dns-book.com AXFR					
 ; (1 server found)					
 ;; global options: +cmd					
 dns-book.com.		86400	IN	SOA	ns.dns-book.com. root.dns-book.com. 2018120101 43200 5400 3600000 3600
 dns-book.com.		86400	IN	NS	ns.dns-book.com.
 ftp.dns-book.com.	86400	IN	CNAME	www.dns-book.com.	
 ns.dns-book.com.	86400	IN	A	192.168.3.1	
 www.dns-book.com.	86400	IN	A	192.168.0.1	
 dns-book.com.		86400	IN	SOA	ns.dns-book.com. root.dns-book.com. 2018120101 43200 5400 3600000 3600
 ;; Query time: 34 msec					
 ;; SERVER: 192.168.3.1#53(192.168.3.1)					
 ;; WHEN: Tue Nov 13 05:23:46 PST 2018					
 ;; XFR size: 9 records (messages 1, bytes 242)

 

ゾーン転送の確認

最後にゾーン転送の確認を行います。

スレーブサーバ側ではzoneファイルは"/var/cache/bind/slave"ディレクトリに作成するように設定しました。

それではスレーブサーバを起動して、zoneファイルが作成される様子を見てみます。

以下はその様子をWiresharkでパケットキャプチャしたものです。

zone_capture

上記でSOAレコードを参照してから、AFXRでゾーン情報の取得を行っています。

Bind9.9.1以降では、作成されるzoneファイルがRaw形式に変更されたようなので、内容を確認するには以下コマンドを実行します。

 

 > named-checkzone -D -f raw dns-book.com /var/cache/bind/slave/dns-book.com.zone
 zone dns-book.com/IN: loaded serial 2018120101
 dns-book.com.				      86400 IN SOA	ns.dns-book.com. root.dns-book.com. 2018120101 43200 5400 3600000 3600
 dns-book.com.				      86400 IN NS	ns.dns-book.com.
 ftp.dns-book.com.			      86400 IN CNAMEwww.dns-book.com.
 ns.dns-book.com.			      86400 IN A	192.168.3.1
 www.dns-book.com.			      86400 IN A	192.168.0.1
 OK

 

最後に 

以上で、BINDの基本的な動作確認は終了となります。

Webを利用する上で最初に行う重要な役割であるにも関わらず、あまり意識することがありませんでしたが、実際に構築を行うとその仕組みや重要性が少しづつ理解できました。

しかし、実際に外部で公開するサーバとしてはさらにセキュリティ面で強化をする必要があります。

例えば「DNSキャッシュポイズニング攻撃」は、ユーザが正しいドメイン名をブラウザに入力しても、クラッカーが用意した罠サイトに誘導されてしまう危険性があります。

これらの対策として公開鍵暗号法を応用した「DNSSEC」という仕組みを利用するなど、別途設定が必要になってきます。

参考書籍ではこれらの対策についても細かく言及されているため、実際にDNSサーバを運用する方にはおすすめです。

 

参考書籍

改訂新版 BIND9によるDNSサーバ構築 (エッセンシャルソフトウェアガイドブック)

3分間DNS基礎講座