DNS サーバーのトラブルシューティング

仮想オペレーターを試す - DNS に関する一般的な問題をすばやく特定、解決するのに役立ちます。

この記事では、DNS サーバーで問題をトラブルシューティングする方法について説明します。

IP 構成の確認

  1. コマンド プロンプトで ipconfig /all を実行し、IP アドレス、サブネット マスク、既定のゲートウェイを確認します。

  2. DNS サーバーが検索されている名前に対して権限を持っているかどうかを調べます。 そうである場合は、「権限のあるデータに関する問題のチェック」をご覧ください。

  3. 次のコマンドを実行します。

    nslookup <name> <IP address of the DNS server>
    

    例:

    nslookup app1 10.0.0.1
    

    応答がエラーまたはタイムアウトの場合は、「再帰の問題のチェック」をご覧ください。

  4. リゾルバー キャッシュをフラッシュします。 これを行うには、管理コマンド プロンプト ウィンドウで次のコマンドを実行します。

    dnscmd /clearcache
    

    または、管理 PowerShell ウィンドウで、次のコマンドレットを実行します。

    Clear-DnsServerCache
    
  5. ステップ 3 を繰り返します。

DNS サーバーの問題を調べる

イベント ログ

次のログを調べて、何らかのエラーが記録されているかどうかを確認します。

  • Application

  • システム

  • DNS サーバー

nslookup クエリを使用してテストする

次のコマンドを実行し、DNS サーバーがクライアント コンピューターから到達可能かどうかを調べます。

nslookup <client name> <server IP address>
  • リゾルバーがクライアントの IP アドレスを返す場合、サーバーに問題はありません。

  • リゾルバーが "サーバー エラー" または "クエリ拒否" 応答を返す場合は、ゾーンが一時停止しているか、サーバーが過負荷状態である可能性があります。 DNS コンソールのゾーン プロパティの [全般] タブを調べることで、一時停止されているかどうかを確認できます。

リゾルバーから "サーバーへの要求がタイムアウトした" または "サーバーからの応答がない" という応答が返る場合、DNS サービスが実行されていない可能性があります。 サーバーのコマンド プロンプトで次のように入力して、DNS サーバー サービスを再起動してみてください。

net start DNS

サービスが実行しているときに問題が発生する場合は、nslookup クエリで使用した IP アドレスでサーバーがリッスンしていない可能性があります。 DNS コンソールのサーバーのプロパティ ページの [インターフェイス] タブで、管理者は選択したアドレスでのみリッスンするように DNS サーバーを制限できます。 DNS サーバーが構成された IP アドレスの特定のリストにサービスを制限するように構成されている場合、DNS サーバーへの接続に使用される IP アドレスがリストに含されていない可能性があります。 リストの別の IP アドレスを試すか、IP アドレスをリストに追加してみることができます。

まれに、DNS サーバーに高度なセキュリティまたはファイアウォールが構成されている場合があります。 サーバーが中間ホスト (パケット フィルタリング ルーターやプロキシ サーバーなど) 経由でのみ到達可能な別のネットワーク上にある場合、DNS サーバーが標準以外のポートを使用してクライアント要求をリッスンおよび受信している可能性があります。 既定では、nslookup は UDP ポート 53 で DNS サーバーにクエリを送信します。 したがって、DNS サーバーが他のポートを使用している場合、nslookup クエリは失敗します。 これが問題である可能性がある場合は、既知の DNS ポートのトラフィックをブロックするために中間フィルターが意図的に使われているかどうかを調べます。 そうではない場合は、UDP/TCP ポート 53 でのトラフィックを許可するように、ファイアウォールのパケット フィルターまたはポート規則を変更してみます。

権限のあるデータに関する問題のチェック

正しくない応答を返すサーバーが、ゾーンのプライマリ サーバーか (ゾーンの標準プライマリ サーバー、またはゾーンの読み込みに Active Directory 統合を使用しているサーバー)、またはゾーンのセカンダリ コピーをホストしているサーバーかを調べます。

サーバーがプライマリ サーバーの場合

問題は、ユーザーがゾーンにデータを入力するときのユーザー エラーが原因で発生している可能性があります。 あるいは、Active Directory のレプリケーションまたは動的更新に影響を与える問題が原因である可能性があります。

サーバーがゾーンのセカンダリ コピーをホストしている場合

  1. プライマリ サーバー (このサーバーがゾーン転送をプルしている元のサーバー) のゾーンを調べます。

    注意

    DNS コンソールでセカンダリ ゾーンのプロパティを調べることで、どのサーバーがプライマリ サーバーかを特定できます。

    プライマリ サーバーで名前が正しくない場合は、ステップ 4 に進みます。

  2. プライマリ サーバーで名前が正しい場合は、プライマリ サーバーのシリアル番号がセカンダリ サーバーのシリアル番号以下かどうかを調べます。 そうである場合は、プライマリ サーバーのシリアル番号がセカンダリ サーバーのシリアル番号より大きくなるように、プライマリ サーバーまたはセカンダリ サーバーを変更します。

  3. セカンダリ サーバーで、DNS コンソール内から、または次のコマンドを実行して、ゾーン転送を強制します。

    dnscmd /zonerefresh <zone name>
    

    たとえば、ゾーンが corp.contoso.com である場合は、次のように入力します: dnscmd /zonerefresh corp.contoso.com

  4. セカンダリ サーバーを再度調べて、ゾーンが正しく転送されたかどうかを確認します。 そうではない場合は、ゾーン転送の問題である可能性があります。 詳しくは、「ゾーン転送の問題」をご覧ください。

  5. ゾーンが正しく転送された場合は、データが正しいかどうかを確認します。 そうではない場合、プライマリ ゾーンでデータが正しくありません。 問題は、ユーザーがゾーンにデータを入力するときのユーザー エラーが原因で発生している可能性があります。 あるいは、Active Directory のレプリケーションまたは動的更新に影響を与える問題が原因である可能性があります。

再帰の問題のチェック

再帰が正常に機能するには、再帰クエリのパスで使用されているすべての DNS サーバーが応答でき、正しいデータを転送できる必要があります。 それができない場合は、次のいずれかの理由で再帰クエリが失敗することがあります。

  • 完了する前に、クエリがタイムアウトになる。

  • クエリ中に使用されるサーバーが応答に失敗する。

  • クエリ中に使用されるサーバーが正しくないデータを提供する。

元のクエリで使用されたサーバーからトラブルシューティングを始めます。 DNS コンソールのサーバー プロパティの [フォワーダー] タブを調べて、このサーバーがクエリを別のサーバーに転送しているかどうかを確認します。 [Enable forwarders](フォワーダーを有効にする) チェック ボックスがオンで、1 つ以上のサーバーが一覧にある場合、このサーバーはクエリを転送します。

このサーバーがクエリを別のサーバーに転送している場合は、このサーバーからクエリが転送されている先のサーバーに影響する問題を調べます。 問題を調べるには、「DNS サーバーの問題を調べる」をご覧ください。 そのセクションで、タスクをクライアントで実行するように指示されている場合は、代わりにサーバーでタスクを実行します。

サーバーが正常で、クエリを転送できる場合は、このステップを繰り返して、このサーバーのクエリ転送先のサーバーを調べます。

このサーバーがクエリを別のサーバーに転送していない場合は、このサーバーがルート サーバーに対してクエリを実行できるかどうかをテストします。 そのためには、次のコマンドを実行します。

nslookup
server <IP address of server being examined>
set q=NS
  • リゾルバーからルート サーバーの IP アドレスが返る場合は、ルート サーバーと、解決しようとしている名前または IP アドレスとの間の委任関係が、壊れている可能性があります。 「壊れた委任をテストする」の手順に従って、委任が壊れている場所を特定します。

  • リゾルバーから "サーバーへの要求がタイムアウトした" という応答が返る場合は、ルート ヒントが機能しているルート サーバーを指しているかどうかを調べます。 これを行うには、「現在のルート ヒントを表示するには」の手順を使います。 ルート ヒントが機能しているルート サーバーを指している場合は、ネットワークに問題があるか、またはリゾルバーによるサーバーのクエリを妨げる高度なファイアウォール構成がサーバーで使用されている可能性があります (「DNS サーバーの問題を調べる」セクションの説明を参照)。 再帰のタイムアウトの既定値が短すぎる可能性もあります。

壊れた委任をテストする

有効なルート サーバーに対してクエリを実行して、次の手順でテストを始めます。 このテストのプロセスでは、ルートから、壊れた委任をテストしているサーバーまで、すべての DNS サーバーに対してクエリを実行します。

  1. テストしているサーバーのコマンド プロンプトで、次を入力します。

    nslookup
    server <server IP address>
    set norecursion
    set querytype= <resource record type>
    <FQDN>
    

    注意

    リソース レコードの種類は、元のクエリでクエリを実行していたリソース レコードの種類で、FQDN はクエリを実行していた (ピリオドで終了する) FQDN です。

  2. 応答に委任されたサーバーの "NS" および "A" リソース レコードのリストが含まれる場合は、"A" リソース レコードの IP アドレスをサーバー IP アドレスとして使用して、各サーバーにステップ 1 を繰り返します。

    • 応答に "NS" リソース レコードが含まれていない場合は、委任が壊れています。

    • 応答に "NS" リソース レコードは含まれているが、"A" リソース レコードが含まれていない場合は、「set recursion」と入力し、"NS" レコードのリストに含まれるサーバーの "A" リソース レコードについて、個別にクエリを実行します。 ゾーン内の NS リソース レコードごとに "A" リソース レコードの有効な IP アドレスが少なくとも 1 つ見つからない場合は、委任が壊れています。

  3. 委任が壊れていると判断した場合は、委任されるゾーンの正しい DNS サーバーに対する有効な IP アドレスを使用して、親ゾーンの "A" リソース レコードを追加または更新することで、この問題を修正します。

現在のルート ヒントを表示するには

  1. DNS コンソールを開始します。

  2. 再帰クエリが失敗した DNS サーバーを追加するか、それに接続します。

  3. サーバーを右クリックして、[プロパティ] を選びます。

  4. [ルート ヒント] をクリックします。

ルート サーバーへの基本的な接続を調べます。

  • ルート ヒントの構成が正しい場合は、失敗した名前解決で使用された DNS サーバーからルート サーバーに対して IP アドレスを指定した ping を実行できるかどうかを確認します。

  • ルート サーバーが IP アドレスによる ping に応答しない場合は、ルート サーバーの IP アドレスが変更されている可能性があります。 ただし、ルート サーバーの再構成が表示されるのは珍しいことです。

ゾーン転送の問題

次のチェックを実行します。

  • イベント ビューアーでプライマリとセカンダリ両方の DNS サーバーを調べます。

  • プライマリ サーバーを調べて、セキュリティのために転送の送信を拒否しているかどうかを確認します。

  • DNS コンソールでゾーンのプロパティの [ゾーンの転送] タブを調べます。 サーバーでゾーンの転送がサーバーのリスト (ゾーンのプロパティの [ネーム サーバー] タブの一覧に表示されるものなど) に制限されている場合は、セカンダリ サーバーがそのリストに含まれることを確認します。 サーバーがゾーン転送を送信するように構成されていることを確認します。

  • DNS サーバーの問題を調べる」セクションの手順に従って、プライマリ サーバーの問題を調べます。 クライアントでタスクを実行するようになっている場合は、代わりにセカンダリ サーバーでタスクを実行します。

  • セカンダリ サーバーで、BIND などの別の DNS サーバーの実装が実行されているかどうかを調べます。 そうである場合は、次のいずれかが問題の原因である可能性があります。

    • Windows のプライマリ サーバーが高速ゾーン転送を送信するように構成されているのに、サード パーティのセカンダリ サーバーが高速ゾーン転送をサポートしていない可能性があります。 この場合は、DNS コンソールでサーバーのプロパティの [詳細設定] タブの [Enable Bind secondaries](セカンダリのバインドを有効にする) チェック ボックスをオンにして、プライマリ サーバーでの高速ゾーン転送を無効にします。

    • Windows サーバー上の前方参照ゾーンに、セカンダリ サーバーがサポートしていないレコードの種類 (SRV レコードなど) が含まれている場合、セカンダリ サーバーでゾーンのプルに問題が発生する可能性があります。

プライマリ サーバーで、BIND などの別の DNS サーバーの実装が実行されているかどうかを調べます。 そうである場合は、プライマリ サーバーのゾーンに、Windows が認識しない、互換性のないリソースが含まれる可能性があります。

マスターまたはセカンダリ サーバーで別の DNS サーバーの実装が実行されている場合は、両方のサーバーを調べて、同じ機能をサポートしていることを確認します。 DNS コンソールのサーバーのプロパティ ページの [詳細設定] タブで、Windows サーバーを確認できます。 [Enable Bind secondaries](セカンダリのバインドを有効にする) ボックスに加えて、このページには [名前の確認] ドロップダウン リストが含まれます。 これにより、DNS 名の文字に対する厳密な RFC コンプライアンスの適用を選択できます。