nslookupでDNSのゾーン転送機能をテストするTech TIPS

あるDNSゾーンを定義する場合、負荷分散や耐障害性の向上のために、1つのゾーンに対して複数のDNSサーバを用意することがある。複数のDNSサーバが同じ情報を共有できるように、お互いの持つ情報を「ゾーン転送」という機能で複製する。セキュリティのためには、ゾーン転送はDNSサーバ間だけに限定しておくべきである。ゾーン転送の動作をチェックするにはnslookupコマンドを利用する。

» 2004年10月02日 05時00分 公開
「Tech TIPS」のインデックス

連載目次

nslookupでDNSのゾーン転送機能をテストする

対象OS:Windows NT/Windows 2000/Windows XP/Windows Server 2003


DNSのゾーン転送機能をテストしなければならない理由

 DNSドメインを定義して、それに対するDNSサーバを用意する場合、負荷分散や耐障害性の向上のために、1つのゾーンに対して複数のDNSサーバを用意することがある。複数のDNSサーバ間では、登録されたレコードの内容が同じになるように、データを同期させる必要があるが、一般的には「ゾーン転送」と呼ばれる機能を使ってデータを同期させている。これは、マスタとなるDNSサーバ(プライマリDNSサーバ)のデータを、サブとなるDNSサーバ(セカンダリDNSサーバ)へまとめて転送する機能であり、大量の登録データを効率よく送ることができる。

 ゾーン転送機能は、同じゾーン情報を定義しているDNSサーバ間でのみ使われる機能であり、それ以外のコンピュータへ転送することはセキュリティ上望ましくない。通常はアクセスされることのない特別なDNSレコードなどを登録していても、ゾーン転送すればその内容がすべて分かってしまうし、不正なDNSレコードデータをゾーン転送で送り込まれる可能性などもある。

 このような問題を起こさないように、通常のDNSサーバには、ゾーン転送可能な相手を限定するための機能(IPアドレス制限など)が用意されている。この機能が正しく動作しているかどうかを確認するには、DNSサーバやそれ以外のコンピュータ間で、それぞれDNSのゾーン転送を実行させ、正しく転送されるか、それとも拒否されるかなどを調べる。

Windows Server 2003のDNSサーバの例 Windows Server 2003のDNSサーバの例
Windows Server OSに付属のDNSサーバでは、ゾーンごとのプロパティにおいて、ゾーン転送を許可する相手を指定することができる。通常は、同じDNSゾーンのDNSサーバ間ではゾーン転送を許可し、そうでないコンピュータからのアクセスはすべて禁止するように設定しておく。
  (1)正引きのゾーンの例。ゾーン名を選んで右クリックし、ポップアップメニューから[プロパティ]を実行する。
  (2)ゾーン転送の許可は、ゾーンごとに行う必要がある。逆引きドメインでもゾーン転送の許可を正しく設定しておくこと。
  (3)[ゾーン転送]タブを選択して、転送を許可するクライアント(のIPアドレス)を定義する。
  (4)これをオンにすると、ゾーン転送が許可される。1ゾーンに複数のDNSサーバが定義されている場合は、それらのDNSサーバ間でゾーン転送を許可する。
  (5)ゾーン転送をすべてのコンピュータに対して許可する場合はこれを選択するが、セキュリティ上はこのような設定は望ましくない。
  (6)[ネーム サーバー]タブに定義されているすべてのDNSサーバ(つまりこのDNSゾーンのプライマリとセカンダリのDNSサーバ)だけで転送を許可する場合はこれを選択する。通常はこれを使う。
  (7)特別に指定したコンピュータ群にのみゾーン転送を許可する場合はこれを選択する。
  (8)ゾーン転送を許可するコンピュータのIPアドレスのリスト。これら以外のコンピュータからのゾーン転送要求は拒否される。

 あるDNSサーバから別のコンピュータへのゾーン転送が許可されているかどうかを調査するには、nslookupコマンドを利用する(UNIXやLinuxなどではdigというコマンドもあるが、Windows OSでは用意されていない)。nslookupでゾーン転送コマンドを実行し、DNSサーバ間では正しく転送でき、そうでないコンピュータでは転送が拒否されることを確認すればよい。

nslookupのサブコマンド「ls」でゾーン転送をテストする

 nslookupのインタラクティブモードにはいくつかのサブコマンドがあるが、DNSサーバのゾーン転送機能の動作を確認するには、lsというサブコマンドを使用する。

ls [-a|-d|-t <タイプ><ドメイン名> [><出力ファイル名>



 -aや-d、-tは、出力するレコードのタイプを表す。-aならばCNAME(エイリアス、別名)のみを出力し、-tならば、指定された<タイプ>のレコードのみが表示される。通常は-d(すべて出力)を指定しておけばよいだろう。

 <ドメイン名>には、ゾーン転送を行いたいDNSドメイン名を指定する。nslookupを実行しているマシンのTCP/IPにおけるドメインの設定がどのようになっているかに関わらず、このサブコマンドを実行する場合は、明示的にドメイン名を引数として指定しなければならない。

 <出力ファイル名>には、ゾーン転送の結果を書き出すファイルを指定する。転送結果が大量にある場合は、こうやって一時ファイルに書き出し、その内容を確認するとよいだろう。

 それでは実際にゾーン転送を行ってみよう。

手順1――nslookupの起動

 ゾーン転送のテストは、nslookupを起動して、サブコマンドを入力する必要がある。単に名前を調べるだけなら、例えば「nslookup server」などとして直接実行すればよいが(この場合は結果が表示されたあと、nslookupは実行を終了する)、ゾーン転送をテストするコマンドは、インタラクティブにユーザーが入力する必要がある。nslookup起動時の引数として与えることはできない。単に「nslookup」とだけ入力して実行すると、サブコマンドを受け付けるインタラクティブモードに入る。

C:\>nslookup ……引数を何も付けずに実行する
Default Server:  mydns.local
Address:  192.168.0.51

> ……インタラクティブモードのプロンプト



手順2――DNSサーバの指定

 nslookupは、デフォルトでは、TCP/IP設定における「優先DNS」サーバに接続するようになっている(優先DNSについてはTech TIPS「優先DNSサーバと代替DNSサーバの動作について」参照)。もしこれ以外のサーバに接続してゾーン転送を調査したいのなら、DNSサーバを切り替える必要がある。このためには2つの方法がある。

●方法1――nslookup起動時のパラメータで指定する方法

 デフォルトのDNSサーバは、nslookupの起動時に指定することができる。DNSサーバを指定してインタラクティブモードに入るには、次のように第1引数に「-」、第2引数に「DNSサーバ名(もしくはIPアドレス)」を指定する。

C:\>nslookup - 192.168.0.242 ……デフォルトDNSサーバの指定
Default Server:  winserver.example.jp ……デフォルトDNSサーバ
Address:  192.168.0.242

>



●方法2――DNSサーバを変更するサブコマンドを利用する

 すでにインタラクティブモードに入っているなら、server/lserverサブコマンドを利用して変更することもできる。多数のサーバを順にテストする場合にはこの方法がよいだろう。

C:\>nslookup
Default Server:  mydns.local ……元のデフォルトDNSサーバ
Address:  192.168.0.51

> server 192.168.0.242 ……デフォルトDNSサーバを切り替える
Default Server:  winserver.example.jp ……新しいデフォルトDNSサーバ
Address:  192.168.0.242

>



手順3――ゾーン転送を実行する

 ゾーン転送を実行するには、lsサブコマンドに-dなどのタイプ指定と、ターゲットとなるDNSのゾーン名を指定する。ゾーン内のレコードが表示されれば、ゾーン転送は成功している。

> ls -d example.jp ……example.jpゾーンのゾーン転送を要求する
[winserver.example.jp] ……転送を要求しているDNSサーバ
example.jp.                SOA    winserver.example.jp hostmaster.example.jp. (32 900 600 86400 3600) ……転送されたレコード群
example.jp.                A      192.168.0.242
example.jp.                NS     winserver.example.jp
……(以下省略)……



 もしゾーン転送が許可されていなければ、次のように拒否されたというメッセージが表示される。

> ls -d example.jp
[winserver.example.jp]
*** Can't list domain example.jp: Query refused ……拒否された



 以上のnslookupコマンドを、DNSサーバやクライアントコンピュータ上で動作させ、お互いにゾーン転送を許可したサーバ間では正しく転送できるが、それ以外のコンピュータからでは転送が拒否されることを確認する。1つのゾーンに複数のDNSサーバが定義されている場合は、すべてのDNSサーバ上で相互に確認作業を行ってほしい。また、正引きのゾーンだけでなく、逆引きのゾーン(0.168.192.in-addr.arpaなどのゾーン)でも、正しく設定されていることを確認しておく。

「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。