配置Microsoft分布式事务处理协调器(DTC)以通过防火墙工作

本文介绍如何将Microsoft分布式事务处理协调器(DTC)配置为通过防火墙工作。

原始 KB 数: 250367

详细信息

可以将 DTC 配置为通过防火墙进行通信,包括网络地址转换防火墙。

DTC 默认使用远程过程调用 (RPC) 动态端口分配。 RPC 动态端口分配随机选择 49152-65535 范围内的端口号。 通过修改注册表,可以控制 RPC 动态分配哪些端口用于传入通信。 然后,可以将防火墙配置为仅将这些端口和端口 135(RPC 终结点映射程序端口)限制传入的外部通信。 建议在防火墙中使用 DTC 服务的固定端口或默认的动态 49152-65535 范围,以避免端口耗尽,并且仅在防火墙无法筛选计算机或 IP 时更改为自定义 RPC 端口。

可以有一个本地 DTC 实例和多个群集 DTC 实例。 可能需要为依赖于 RPC 的其他子系统提供更多传入的动态端口,因此建议保留默认 RPC 范围,即使对 DTC 服务使用固定端口也是如此。

本文中所述的注册表项和值默认不会显示在注册表中;必须使用注册表编辑器添加它们。

重要

此部分(或称方法或任务)介绍了修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,按以下步骤操作时请务必谨慎。 作为额外保护措施,请在修改注册表之前先将其备份。 如果之后出现问题,您就可以还原注册表。 有关如何备份和还原注册表的详细信息,请参阅 如何在窗口中备份和还原注册表。

将 DTC 配置为使用单个固定端口

在 DTC 事务涉及的计算机上执行以下步骤,为 DTC 设置固定端口。 防火墙必须双向打开固定端口和端口 135(RPC 终结点映射器端口):

  1. 若要启动注册表编辑器,请选择“开始”,选择“运行,键入 regedt32,然后选择“确定”。
  2. 在注册表编辑器中,选择“本地计算机”窗口中HKEY_LOCAL_MACHINE
  3. 通过双击路径中 HKEY_LOCAL_MACHINE\Software\Microsoft\MSDTC 命名的文件夹展开树。
  4. 选择 MSDTC 文件夹,然后在“编辑”菜单上选择“新建 > DWORD”(32 位)值
  5. 名称 更改为 ServerTcpPort
  6. 右键单击并选择“ 修改 ”新值。
  7. “值编辑器 ”对话框中,选择 “十进制 ”,然后将固定端口号(例如 40001 )放在“值”数据 字段中,然后选择“ 确定”。

若要为群集 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 终结点映射器端口):

  1. 若要启动注册表编辑器,请选择“开始”,选择“运行,键入 regedt32,然后选择“确定”。

    使用Regedt32.exe而不是Regedit.exe。 Regedit.exe不支持端口值所需的REG_MULTI_SZ数据类型。

  2. 在注册表编辑器中,选择“本地计算机”窗口中HKEY_LOCAL_MACHINE

  3. 通过双击路径中 HKEY_LOCAL_MACHINE\Software\Microsoft\Rpc 命名的文件夹展开树。

  4. 选择 RPC 文件夹,然后在“编辑”菜单上选择“添加密钥”。

  5. “添加密钥”对话框中的“密钥名称”框中,键入 Internet,然后选择“确定”。

  6. 选择 Internet 文件夹,然后在“编辑”菜单上选择“添加值”。

  7. “添加值 ”对话框中的 “值名称 ”框中,键入 “端口”。

  8. “数据类型 ”框中,选择 REG_MULTI_SZ,然后选择“ 确定”。

  9. “多字符串编辑器 ”对话框中的 “数据 ”框中,指定要 RPC 用于动态端口分配的端口或端口,然后选择“ 确定”。

    键入的每个字符串值都指定单个端口或非独占端口范围。 例如,若要打开端口 40000,请指定 40000 ,而不指定引号。 若要打开端口 40000 到 42000(含 42000),请指定 40000-42000 ,而不指定引号。 可以通过为每个行指定一个端口或端口范围来指定多个端口或端口范围。 所有端口必须介于 1024 到 65535 的范围内。 如果任何端口超出此范围或任何字符串无效,RPC 会将整个配置视为无效。

    Microsoft建议从 20000 和更新打开端口,因为低端口可能经常被其他应用程序使用,并且你打开了至少 1000 个端口以避免端口耗尽。 在高负载系统上,可能需要更多端口。 默认范围为 1024-5000 在 Windows 2008 和更高版本中移动到 49152-65535 范围,以避免端口耗尽。

  10. 按照步骤 6 到 9 添加另一个 Internet 密钥,方法是使用以下值:

    值:PortsInternetAvailable
    数据类型:REG_SZ
    数据:Y

    此值表示端口值下列出的端口将可供 Internet 使用。

  11. 按照步骤 6 到 9 添加另一个 Internet 密钥,方法是使用以下值:

    值:UseInternetPorts
    数据类型:REG_SZ
    数据:Y

    此值表示 RPC 应从 Internet 端口列表中动态分配端口。

  12. 将防火墙配置为允许传入访问指定的动态端口和端口 135(RPC 终结点映射器端口)。

  13. 重新启动计算机。 RPC 重启时,它将根据指定的注册表值动态分配传入端口。 例如,若要打开端口 40000 到 42000(含 42000),请创建以下命名值:

    端口: REG_MULTI-SZ : 40000-42000
    PortsInternetAvailable : REG_SZ : Y
    UseInternetPorts : REG_SZ : Y

DTC 还需要通过 NetBIOS 或 DNS 解析计算机名称。 检查 NIC 属性中是否启用了 NetBIOS,并测试 NetBIOS 是否可以使用 ping 和服务器名称解析名称。 客户端计算机必须能够解析服务器的名称。 服务器必须能够解析客户端的名称。 如果 NetBIOS 无法解析名称,请将条目添加到计算机上的 LMHOSTS 文件。