次の方法で共有


DHCP サーバーで "常に動的に DNS レコードを更新する" を使用している場合の予期しない DNS レコードの登録動作

適用対象: Windows 11、Windows 10、Windows 8.1

現象

Windows 動的ホスト構成プロトコル (DHCP) クライアントと Microsoft DHCP サーバーを使用して IP アドレスを割り当て、管理するインフラストラクチャがあります。 DHCP サーバーでは、 以下の設定に従って [DNS 動的更新を有効にする] と [ 常に動的に DNS レコードを更新する] を選択します。 この構成では、DHCP サーバーが A レコードと PTR レコードの動的 DNS 更新を管理することを想定しています。 ただし、クライアントとサーバーの両方で DNS レコードが作成されます。 構成に応じて、この動作には次の効果があります。

  • セキュリティで保護されていない動的更新の DNS ゾーンを構成すると、DHCP サーバーによってレコードが作成され、DHCP クライアントによって同じレコードが削除されて再作成されることがわかります。
  • 動的更新のみをセキュリティで保護するように DNS ゾーンを構成すると、DNS レコードに不整合が生じる可能性があります。 DHCP サーバーと DHCP クライアントの両方でレコードが作成されます。 ただし、DHCP サーバーは DHCP クライアントが作成したレコードを更新できません。また、DHCP クライアントは DHCP サーバーによって作成されたレコードを更新できません。

原因

IP アドレスを取得するために、DHCP クライアントは DHCP 要求メッセージを DHCP サーバーに送信します。 通常、このメッセージには、クライアントの完全修飾ドメイン名 (FQDN) と動的 DNS 更新動作を制御するフラグが含まれます。 この情報は、 オプション 81 ( クライアント FQDN オプションとも呼ばれます) と総称されます。

注:

一部の古い DHCP クライアントでは、オプション 81 を使用しません。 これらのクライアントに動的更新を提供するには、更新を要求しない DHCP クライアント (たとえば、Windows NT 4.0 を実行しているクライアント) オプションの DNS レコードを動的に更新できるように DHCP サーバーを構成します。

DHCP サーバーには、動的 DNS 更新動作を制御するオプション 81 フラグのセットも格納されます。 DHCP DORA (検出/オファー/要求/確認) プロセスの一部として、クライアントとオプション 81 フラグの値のサーバーを比較して、DNS 更新を担当するユーザーを特定します。 「 現象 」セクションで説明されている動作に関係するフラグの名前は、 O (オーバーライド) ビットと S (サーバー) ビットです。 flags は次のように機能します。

  • S = 0 の場合、クライアントは A レコードの更新を担当します。
  • S = 1 の場合、サーバーは A レコードの更新を担当します。
  • クライアントが要求で送信する S 値がサーバーの S 値と異なる場合、サーバーはその O 値を 1 に設定します。

RFC で説明されているように、要求メッセージに対する DHCP サーバーの応答には、そのフラグ値が含まれている必要があります。 サーバーのメッセージで O1 に設定されている場合、クライアントはサーバーがクライアントの S 値をオーバーライドしていることを認識する必要があります。

Windows 8.1では、DHCP クライアントの動的 DNS 更新動作に意図的な設計変更が導入されました。 この変更により、以降のバージョンの Microsoft オペレーティング システムでの TCP/IP (伝送制御プロトコル/インターネット プロトコル) スタックの継続的な開発と機能強化がサポートされます。 Windows 8.1以降のバージョンでは、DHCP クライアントは DHCP サーバーのオプション 81 OS の値を受け取りません。 A レコードを更新するようにクライアントが構成されている場合、サーバーも A レコードを更新するように構成されている場合でも、この処理が続行されます。 これは、DHCP 管理コンソールで [常に動的に DNS レコードを更新する] を選択した場合です。

動的更新 のみをセキュリティで保護 するように DNS ゾーンを構成する場合、DNS レコードを作成したエンティティ (DHCP クライアント、DHCP サーバー、または DHCP サービスが使用するように構成されているアカウント) のみが、そのレコードを更新または削除できます。 DHCP サーバーではなく DHCP クライアントが DNS レコードを作成する場合、DHCP サーバーはそのレコードを後で変更できません。

注:

Microsoft の DHCP クライアントには、ユーザー インターフェイスでクライアントの O 値と S 値を直接設定するメソッドは用意されていません。 既定では、両方の値は 0 です。 DHCP クライアント要求の netsh トレース を記録し、Netmon などのツールを使用して結果を表示することで、値を表示できます。

Windows PowerShell コマンドレット Get-DhcpServerv4OptionValue を使用して、DHCP サーバーの Option 81 値を表示できます。 ただし、コマンドレットは、この値を 1 つの整数として報告し、いくつかの異なる設定をビット値として結合します。 たとえば、DHCP スコープのプロパティ ウィンドウの [DNS] タブで [常に動的に DNS レコードを更新する] を選択すると、S 値が 1 に設定されます。 ただし、コマンドレットは、オプション 81 で使用可能な 8 つの値のうちの 1 つを報告します。 これらはすべて S=1 を使用します。 特定の値は、[ DNS ] タブで行われる設定の組み合わせによって異なります。

DHCP クライアント、DHCP サーバー、DNS サーバー間の動的更新のしくみの詳細については、「DNS プロセスと相互作用」を参照してください。

解決方法

アーキテクチャで Always 動的に DNS レコードを更新する必要がある場合は、クライアント コンピューターにレジストリ キーを作成して、DHCP クライアントに DHCP サーバーのオーバーライドを強制的に適用できます。

重要

このセクション、方法、またはタスクには、レジストリの編集方法が記載されています。 レジストリを誤って変更すると、深刻な問題が発生することがあります。 レジストリを変更する際には十分に注意してください。 保護のために、レジストリを変更する前にレジストリをバックアップして、問題が発生した場合にレジストリを復元できるようにします。 レジストリをバックアップおよび復元する方法の詳細については、「Windows でレジストリをバックアップおよび復元する方法」を参照してください。

  1. 次のサブキーに移動します。 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters

  2. サブキーの下に、次のエントリを作成します。

    • 名前: RegistrationOverwrite
    • 型: REG_DWORD
    • 値: 2

    注:

    RegistrationOverwrite には、次の値があります。

    • 0 - 上書きなし。
    • 1 - DNS クライアントが作成したレコードは、DHCP サーバーによって作成される上書きレコードです。 これが既定値です。
    • 2 - DHCP サーバーが作成したレコードは、DNS クライアントによって作成されたレコードを上書きします)。
  3. クライアント コンピューターを再起動します。

  4. DNS サーバー 管理コンソールで、前方参照ゾーンと逆引き参照ゾーンをチェックします。 特定の環境によっては、DHCP サーバーに削除または変更のアクセス許可がない A レコードと PTR レコードを手動で削除する必要がある場合があります。