Windows で UDP の代わりに TCP を使うことを Kerberos に 強制する方法

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

適用対象: Windows 10 - すべてのエディション、Windows Server 2012 R2
元の KB 番号: 244474

概要

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

注:

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

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

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

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

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

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

  • エラー メッセージ 1

    DC リスト テスト . . . . . . . . . . : 失敗しました [WARNING] に 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 トンネル経由での転送の信頼性の高い手段です。 パケットが破棄された場合でも、サーバーは不足しているデータ パケットを再要求します。

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

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

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

    注:

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

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

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

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

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

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

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

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