Windows で UDP ではなく TCP を使用するように Kerberos に強制する方法

この記事では、Kerberos で UDP ではなく TCP を使用するように強制する方法について説明します。

元の KB 番号: 244474

まとめ

Windows Kerberos 認証パッケージは、Windows Server 2003、Windows Server 2008、および Windows Vista の既定の認証パッケージです。 NTLM チャレンジ/応答プロトコルと共存し、クライアントとサーバーの両方で Kerberos をネゴシエートできるインスタンスで使用されます。 Request for Comments (RFC) 1510 は、クライアントが KDC に接続するときに、クライアントがキー配布センター (KDC) の IP アドレスにあるポート 88 にユーザー データグラム プロトコル (UDP) データグラムを送信する必要があることを示しています。 KDC は、送信者の IP アドレスにある送信ポートに応答データグラムで応答する必要があります。 RFC では、UDP が最初に試行されるプロトコルでなければならないことも示されています。

Note

RFC 4120 は RFC 1510 を廃止しました。 RFC 4120 では、KDC が TCP 要求を受け入れる必要があり、ポート 88 (10 進数) でそのような要求をリッスンする必要があることを指定します。 既定では、Windows Server 2008 と Windows Vista は、既定では MaxPacketSize が 0 になっているため、Kerberos の TCP を最初に試します。 引き続き MaxPacketSize レジストリ値を使用して、その動作をオーバーライドできます。

UDP パケット サイズの制限により、ドメイン ログオン時に次のエラー メッセージが表示されることがあります。

イベント ログ エラー 5719
ソース NETLOGON

ドメイン Domain では、Windows NT または Windows 2000 ドメイン コントローラーを使用できません。 次のエラーが発生しました。

現在、ログオン要求のサービスに使用できるログオン サーバーはありません。

さらに、Netdiag ツールに次のエラー メッセージが表示される場合があります。

  • エラー メッセージ 1

    DC リスト テスト。 . . . . . . . . . . : 失敗しました [警告] DsBind を呼び出して COMPUTERNAMEDC.domain.com できません (159.140.176.32)。 [ERROR_DOMAIN_CONTROLLER_NOT_FOUND]

  • エラー メッセージ 2

    Kerberos テスト。 . . . . . . . . . . : 失敗した [FATAL] Kerberos に MEMBERSERVER$ のチケットがありません。] この問題の症状である Windows XP イベント ログは、SPNegotiate 40960 と Kerberos 10 です。

詳細

重要

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

Kerberos に UDP を使用すると、次のメッセージが表示されたときにクライアント コンピューターが応答を停止する (ハングする) 可能性があります: 個人用設定の読み込み。

既定では、Windows Server 2003 で UDP を使用するデータグラム パケットの最大サイズは 1,465 バイトです。 Windows XP および Windows 2000 の場合、この最大値は 2,000 バイトです。 伝送制御プロトコル (TCP) は、この最大値を超えるデータグラムパケットに使用されます。 UDP が使用されるデータグラム パケットの最大サイズは、レジストリ キーと値を変更することで変更できます。

既定では、Kerberos はコネクションレス UDP データグラム パケットを使用します。 セキュリティ識別子 (SID) の履歴やグループ メンバーシップなど、さまざまな要因に応じて、一部のアカウントの Kerberos 認証パケット サイズが大きくなります。 仮想プライベート ネットワーク (VPN) ハードウェアの構成によっては、これらの大きなパケットを VPN 経由で断片化する必要があります。 この問題は、これらの大きな UDP Kerberos パケットの断片化によって発生します。 UDP はコネクションレス プロトコルであるため、フラグメント化された UDP パケットは宛先に順不同で到着すると破棄されます。

MaxPacketSize を値 1 に変更すると、クライアントは TCP を使用して VPN トンネル経由で Kerberos トラフィックを送信するように強制されます。 TCP は接続指向であるため、VPN トンネルを経由するトランスポートのより信頼性の高い手段です。 パケットが破棄された場合でも、サーバーは不足しているデータ パケットを要求し直します。

MaxPacketSize を 1 に変更して、クライアントに TCP 経由の Kerberos トラフィックを強制的に使用させることができます。 これを行うには、次の手順を実行します。

  1. レジストリ エディターを起動します。

  2. レジストリ サブキーを見つけてクリックします: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos\Parameters

    Note

    Parameters キーが存在しない場合は、ここで作成します。

  3. [編集] メニューの [新規] をポイントし、[DWORD 値] をクリックします。

  4. MaxPacketSize」と入力し、Enter キーを押します。

  5. MaxPacketSizeをダブルクリックし、[値データ] ボックスに「1」と入力し、クリックして [Decimal オプションを選択し、OK をクリックします。

  6. レジストリ エディターを終了します。

  7. コンピューターを再起動します。

これは、Windows 2000、XP、および Server 2003 のソリューション アプローチです。 Windows Vista 以降では、既定の "0" が MaxPacketSize に使用され、Kerberos クライアントでの UDP の使用もオフになります。

次のテンプレートは、Windows Server 2003、Windows XP、または Windows 2000 を実行しているすべてのエンタープライズ コンピューターに MaxPacketSize 値を設定できるように、グループ ポリシーにインポートできる管理用テンプレートです。 グループ ポリシー オブジェクト エディターで MaxPacketSize 設定を表示するには、View メニューの Show Policies Only をクリックし、Show Policies Only が選択されないようにします。 このテンプレートは、[ポリシー] セクションの外部でレジストリ キーを変更します。 既定では、グループ ポリシー オブジェクト エディターにはこれらのレジストリ設定は表示されません。