前回まででマスターサーバとスレーブサーバの設定が完了しました。
今回は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でパケットキャプチャしたものです。
上記で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サーバを運用する方にはおすすめです。