1、Windows OS和WMI简介

随着互联网技术的飞速发展,我们对于IT业务系统的服务能力要求越来越高。根据Gartner统计2017年1季度全球服务器出货量超过125亿美金,正在运行支撑各种业务的服务器数量更是庞大。这些服务器中有超过50%的服务器正在使用Windows OS。这些Windows OS支撑了各种大中小型的业务应用,支撑着人们工作、生活等各项活动的开展。那么如此庞大的系统,我们如何有效的监控和管理呢?微软为Windows OS提供了一个有效的监控工具WMI。

图 1-1 全球服务器操作系统占有率

WMI(Windows Management Instrumentation)是微软对WBEM(Web-Based Enterprise Management)的实现,WBEM则是工业界制定的访问企业环境下管理信息的统一标准[1]。WMI使用CIM(Common Information Model)工业标准[2]来表示操作系统、应用、网络、设备以及其他被管组件。CIM与WBEM由DMTF(Distributed Management Task Force)开发和维护。

除使用WMI获取本地计算机信息外,WMI还可经由DCOM(Distributed Component ObjectModel[3])建立远程连接获取远程计算机的信息。因此WMI可作为监控Windows操作系统的有力手段。

2、跨网络环境下的Windows OS服务器监控

由于IT业务系统的日益庞大,IT基础资源正在通过各种资源池将网络和服务器资源进行虚拟化(1:N和N:1)。我们将不同业务隔离在不同的虚拟网络中,同时还有跨地域的业务应用分布。在这样的环境下,需要对于Windows OS进行统一监控,通常都必须面对一个问题--NAT地址转换。NAT可以有效的节约IP地址,隐藏内部的网络环境;但是在NAT环境下由于通常采用1对多或者多对多的地址映射规则,导致了监控平台无法有效的访问Windows OS。


图 1-2 大型IDC的典型业务场景

下面详细分析一下WMI在NAT环境下的相关特性。

2.1          NAT环境下的WMI配置

在NAT环境下,当监控运维平台需要从NAT业务网络外部访问业务网络内部Windows OS服务器时,需要在NAT网关上配置静态端口映射,将WAN端的入站请求正确转发到被监控远程计算机。

2.1.1端口映射配置

WMI经由DCOM建立远程连接,因此将向远程计算机135端口发起请求:

图 2-1 无NAT环境下的WMI远程连接

图 2-1展示了无NAT环境下WMI建立远程连接的WireShark软件抓包情况(经过滤),其中监控运维平台IP为172.16.30.31,Windows OS服务器IP地址为192.168.1.33。注意,除了向Windows OS服务器的135端口发起TCP握手请求之外,当监控运维平台接收到RemoteCreateInstance Response后,还会向1043端口发起请求。经过多次实验可知,这一端口是随机的。这是由于操作系统会向每个DCOM应用程序分配一个终结点(Endpoint),在默认配置下,WMI的终结点是随机的TCP端口。

因此,需要实现跨越NAT的Windows OS监控除了完成135端口的映射外,还需要将WMI的终结点固定下来并进行端口映射。在Windows Vista及更新的操作系统中,可以通过执行命令Winmgmt /Standalone后重启WMI服务实现 [4]。固定的终结点默认为24158,这一数值可以进行设置。

在NAT网关上配置端口映射:135映射到远程计算机的135端口;终结点映射到远程计算机的对应端口,就完成了NAT路由上的端口映射配置。

2.1.2IP地址配置

通过NAT配置端口映射后,WMI连接仍然无法成功,WBEMTest测试工具将提示RPC服务器不可用:

图 2-2 NAT环境下的WMI远程连接

图 2-2展示了NAT环境下WMI建立远程连接的WireShark软件抓包情况(经过滤),其中本地计算机IP为10.1.103.82,NAT网关WAN端地址为10.1.104.68,NAT已设置端口映射。此时,当监控运维平台服务器收到RemoteCreateInstance Response后,并未向Windows OS服务器WMI终结点(路由器WAN端24158端口)发起TCP握手请求。

考虑到WMI终结点可以指定任意TCP端口,必然在响应中有对应的终结点端口信息,则可以猜想在响应中也有对应的IP地址信息。深入分析RemoteCreateInstance Response:

图 2-3 RemoteCreateInstance Response分析

图 2-3 展示了响应中的地址信息,其中WIN-JO2OB7DN0HG为远程计算机的主机名,192.168.40.1为监控运维平台服务器与NAT路由器LAN端在同一子网内的私有IP地址,192.168.40.1和192.168.1.200为监控运维平台其他网卡IP地址,并且可以抓包到本地计算机尝试向这几个地址发起请求。

基于上述事实,一种解决方式是在本地计算的Hosts文件中,将监控运维平台的主机名解析为NAT路由器的WAN端IP。这样本地计算机就会尝试向NAT路由器的WAN端发起请求,完成WMI连接。

3、总结

本文简单介绍了WMI、NAT等基础知识,并详细说明了WMI监控远程计算机的配置方法以及在NAT环境下的网络配置方法。通过分析NAT环境下WMI的数据包,初步探索了WMI通过DCOM建立远程连接的内部原理。希望这个分析过程能在配置其他网络环境下的其他协议时起到一些帮助。