この記事では、ファイアウォール経由で動作するように Microsoft 分散トランザクション コーディネーター (DTC) を構成する方法について説明します。
元の KB 番号: 250367
詳細
ネットワーク アドレス変換ファイアウォールなど、ファイアウォール経由で通信するように DTC を構成できます。
DTC では、既定でリモート プロシージャ コール (RPC) 動的ポート割り当てが使用されます。 RPC 動的ポート割り当てでは、49152 から 65535 の範囲のポート番号がランダムに選択されます。 レジストリを変更することで、RPC が受信通信に動的に割り当てるポートを制御できます。 その後、受信外部通信をそれらのポートとポート 135 (RPC エンドポイント マッパー ポート) のみに限定するようにファイアウォールを構成できます。 DTC サービスの固定ポートまたはファイアウォールの既定の動的 49152-65535 範囲を使用して、ポートの枯渇を回避し、ファイアウォールがコンピューターまたは IP でフィルター処理できない場合にのみカスタム RPC ポートに変更することをお勧めします。
1 つのローカル DTC インスタンスと複数のクラスター化された DTC インスタンスを持つことができます。 RPC に依存する他のサブシステムには、より多くの受信動的ポートを提供することが必要になる場合があるため、DTC サービスに固定ポートを使用している場合でも、既定の RPC 範囲を維持することをお勧めします。
この記事で説明するレジストリ キーと値は、既定ではレジストリに表示されません。レジストリ エディターを使用して追加する必要があります。
重要
このセクション、方法、またはタスクには、レジストリの編集方法が記載されています。 レジストリを誤って変更すると、深刻な問題が発生することがあります。 したがって、次の手順を注意深く実行してください。 保護のために、レジストリを変更する前に、バックアップします。 その後、問題が起こった場合は、レジストリを復元できます。 レジストリをバックアップおよび復元する方法の詳細については、「 ウィンドウでレジストリをバックアップおよび復元する方法を参照してください。
単一の固定ポートを使用するように DTC を構成する
DTC トランザクションに関係するコンピューターで次の手順に従って、DTC の固定ポートを設定します。 固定ポートとポート 135 (RPC エンドポイント マッパー ポート) の両方向でファイアウォールを開く必要があります。
- レジストリ エディターを起動するには、 Start を選択し、 Run を選択し、「 regedt32」と入力して、 OK を選択します。
- レジストリ エディターで、[ローカル コンピューター] ウィンドウでHKEY_LOCAL_MACHINEを選択します。
HKEY_LOCAL_MACHINE\Software\Microsoft\MSDTCパスに名前が付いたフォルダーをダブルクリックして、ツリーを展開します。- MSDTC フォルダーを選択し、Edit メニューの New > DWORD (32 ビット) 値を選択します。
- Name を ServerTcpPort に変更します。
- 右クリックし、新しい値の Modify を選択します。
- Value Editor ダイアログ ボックスで、Decimal を選択し、固定ポート番号 (g 40001) を [Value data フィールドに入力し、OK を選択します。
クラスター化された DTC インスタンスの固定ポートを構成するには、クラスター リソース GUID を見つけて、この場所に ServerTcpPort 値を追加する必要があります。 DTC インスタンスごとに異なるポート番号を使用します。 たとえば、DTC リソース GUID が 012345678-9abc-def0-1234-56789abcdef0 の場合は、次のパスになります: HKEY_LOCAL_MACHINE\Cluster\Resources\012345678-9abc-def0-1234-56789abcdef0\MSDTCPRIVATE\MSDTC。 追加の DTC クラスター化リソースの手順を繰り返します。
または、管理者特権を持つスクリプトで reg add コマンドを使用して、この操作を実行することもできます。 クラスター化された DTC インスタンスが使用されている場合は、次の例を特定のクラスター GUID に調整します。
reg add HKLM\SOFTWARE\Microsoft\MSDTC /v ServerTcpPort /t REG_DWORD /d 40001 /f
reg add HKLM\Cluster\Resources\012345678-9abc-def0-1234-56789abcdef0\MSDTCPRIVATE\MSDTC /v ServerTcpPort /t REG_DWORD /d 40002 /f
顧客のポート範囲を使用するように RPC を構成する
ファイアウォールが完全な通信を妨げる DTC トランザクションに関係するコンピューターで、RPC 動的ポートの割り当てを制御するには、次の手順に従います。 指定したポートとポート 135 (RPC エンドポイント マッパー ポート) の両方向でファイアウォールを開く必要があります。
レジストリ エディターを起動するには、 Start を選択し、 Run を選択し、「 regedt32」と入力して、 OK を選択します。
Regedit.exeの代わりにRegedt32.exeを使用します。 Regedit.exeでは、Ports 値に必要なREG_MULTI_SZデータ型はサポートされていません。
レジストリ エディターで、[ローカル コンピューター] ウィンドウでHKEY_LOCAL_MACHINEを選択します。
HKEY_LOCAL_MACHINE\Software\Microsoft\Rpcパスに名前が付いたフォルダーをダブルクリックして、ツリーを展開します。RPC フォルダーを選択し、Edit メニューの Add Key を選択します。
[キーの追加] ダイアログ ボックスの [キー名 ボックスに「Internet」と入力し、OK を選択します。
インターネット フォルダーを選択し、Edit メニューの Add Value を選択します。
[ 値の追加 ] ダイアログ ボックスの [ Value Name ボックスに「 Ports」と入力します。
[ データ型 ボックスで、 REG_MULTI_SZを選択し、 OKを選択します。
[ Multi-String Editor ダイアログ ボックスの Data ボックスで、RPC で動的ポートの割り当てに使用するポートを指定し、 OK を選択します。
入力する各文字列値は、1 つのポートまたは包括的なポート範囲を指定します。 たとえば、ポート 40000 を開くには、引用符なしで 40000 を指定します。 ポート 40000 ~ 42000 を開くには、引用符を使用せずに 40000-42000 を指定します。 1 行に 1 つのポートまたはポート範囲を指定することで、複数のポートまたはポート範囲を指定できます。 すべてのポートは、1024 ~ 65535 の範囲である必要があります。 ポートがこの範囲外の場合、または文字列が無効な場合、RPC は構成全体を無効として扱います。
低いポートが他のアプリケーションで頻繁に使用される場合があり、ポート枯渇を避けるために少なくとも 1,000 個のポートを開くことが推奨されます。 負荷の高いシステムでは、より多くのポートが必要になる場合があります。 ポートの枯渇を回避するために、Windows 2008 以降では既定の範囲 1024 から 5000 が 49152 から 65535 の範囲に移動されました。
次の値を使用して、手順 6 から 9 に従ってインターネット用の別のキーを追加します。
値: PortsInternetAvailable
データ型: REG_SZ
データ: Yこの値は、[ポート] の値の下に一覧表示されているポートがインターネットで使用可能であることを示します。
次の値を使用して、手順 6 から 9 に従ってインターネット用の別のキーを追加します。
値: UseInternetPorts
データ型: REG_SZ
データ: Yこの値は、RPC がインターネット ポートの一覧からポートを動的に割り当てる必要があることを示します。
指定された動的ポートとポート 135 (RPC エンドポイント マッパー ポート) への受信アクセスを許可するようにファイアウォールを構成します。
コンピューターを再起動します。 RPC が再起動すると、指定したレジストリ値に基づいて、受信ポートが動的に割り当てられます。 たとえば、ポート 40000 ~ 42000 を開くには、次の名前付き値を作成します。
ポート: REG_MULTI-SZ : 40000-42000
PortsInternetAvailable : REG_SZ : Y
UseInternetPorts : REG_SZ : Y
DTC では、NetBIOS または DNS を使用してコンピューター名を解決できる必要もあります。 NIC プロパティで NetBIOS が有効になっていることを確認し、NetBIOS が ping とサーバー名を使用して名前を解決できるかどうかをテストします。 クライアント コンピューターは、サーバーの名前を解決できる必要があります。 また、サーバーはクライアントの名前を解決できる必要があります。 NetBIOS で名前を解決できない場合は、コンピューター上の LMHOSTS ファイルにエントリを追加します。