DCOM 不适于防火墙 关于 DCOM 特性和功能的一个常见问题是:“它能跨 Internet 工作吗?”DCOM 能够很好地跨 Internet 工作,只要将它配置为使用 TCP 或者 UDP,并且通过授予任何人启动和访问权限,可将服务器配置为允许匿名方法调用。毕竟,Internet 是一个巨大的 IP 网络。但矛盾的是,如果您将一个现有的 DCOM 应用程序(在公司的内部网络或 intranet 中工作得很好)改为跨 Internet 工作,它很有可能失败得很惨。可能是什么原因呢?防火墙。
DCOM 生来与防火墙的关系就如油与水的关系。原因之一是 COM 的 SCM 使用端口 135 与其他机器上的 SCM 通信。防火墙限制了它可以使用的端口和协议,可能会拒绝通过端口 135 传入的通信量。但更大的问题在于,为了避免与使用套接字、管道和其他 IPC 机制的应用程序冲突,DCOM 没有固定使用特定范围的端口,相反,它在运行时才选择所使用的端口。默认情况下,它可以使用从 1,024 到 65,535 范围内的任何端口。
允许 DCOM 应用程序通过防火墙的一种方式是,为 DCOM 要使用的协议打开端口 135 和端口 1,024-65,535。(默认情况下,Windows NT 4.0 是 UDP 协议,Windows 2000 是 TCP 协议。)但是,这比移除所有防火墙好不了多少。对此,您公司的 IT 人员可能要发表意见了。
另一种更安全和更现实的解决方案是,限制 DCOM 使用的端口范围,并只为 DCOM 通信量打开一组小范围端口。根据实践原则,您应该为每个服务器进程分配一个端口,将连接导出到远程 COM 客户端(不是每个接口指针一个端口或每个对象一个端口,而是每个服务器进程一个)。将 DCOM 配置为使用 TCP 而不是 UDP 是一个好方法,特别是在服务器对其客户端执行回调时。
DCOM 用于远程连接的端口范围和所用的协议可通过注册表进行配置。在 Windows 2000 和 Windows NT 4.0 Service Pack 4 或更高版本上,您可以用 DCOMCNFG 应用这些配置更改。以下是将 DCOM 配置为通过防火墙工作的办法。
图 3 选择协议 |
在服务器(在防火墙后寄存远程对象的机器)上,将 DCOM 配置为使用 TCP 作为其所选协议,如图 3 中所示。
在服务器上,限制 DCOM 将使用的端口范围。记住为每个服务器进程至少分配一个端口。图 4 中的示例将 DCOM 限制为端口 8,192 到 8,195。
打开您在步骤 2 中选择的端口,使 TCP 通信量能够通过防火墙。同时打开端口 135。
图 4 选择端口 |
执行这些步骤,DCOM 就可以很好地跨防火墙工作了。如果您愿意,SP4 和更高版本还可让您为单独的 COM 服务器指定终结点。更多信息,请阅读 Michael Nelson 关于 DCOM 和防火墙的优秀论文,该论文可在 MSDN Online 站点上找到(请参见
http://msdn.microsoft.com/library/enus/dndcom/html/msdn_dcomfirewall.asp)。
还应注意的是,通过在服务器上安装 Internet 信息服务 (IIS),并使用 COM Internet 服务 (CIS) 通过端口 80 路由 DCOM 通信量,SP4 和更高版本的用户还可以使用 CIS 来提供与防火墙兼容的 DCOM。有关该主题的更多信息,请参阅 http://msdn.microsoft.com/library/en-us/dndcom/html/cis.asp。