本文共 3825 字,大约阅读时间需要 12 分钟。
WPAD
是Web Proxy Auto Discovery
的缩写,意思是Web
代理服务器自动发现。WPAD
的设计目的是让浏览器能自动发现代理服务器,这样用户可以轻松访问互联网而且无需知道哪台计算机是代理服务器。在ISA2006
中,WPAD
不仅能让客户机浏览器自动发现代理服务器,还可以用于防火墙客户端自动发现代理服务器。显然,WPAD
对代理服务器的透明处理让管理员轻松了不少,管理员不再需要去每台客户机上设置代理服务器参数了。但樱桃好吃树难栽,WPAD
的部署并非都是一帆风顺,WPAD
的部署可以借助DNS
服务器或DHCP
服务器,容易出问题的是用DNS
服务器进行部署,尤其是在工作组环境下问题更多。今天我们就来构造一个实验环境,为大家剖析WPAD
的工作原理以及故障原因。 实验拓扑如下图所示。内网计算机在工作组环境,Florence
是DNS
服务器,Perth
是客户机,Beijing
是ISA2006
服务器。 1 Perth 向 DNS 服务器发出查询请求,要求获得 WPAD 主机的 IP 地址。 2 Perth 根据查询到的 IP 地址,去 WPAD 主机的 80 端口下载 WPAD.DAT 或 WSPAD.DAT 。 WPAD.DAT 可用于配置客户机浏览器,让浏览器自动发现代理服务器; WSPAD.DAT 则用于配置客户机上的防火墙客户端自动发现代理服务器。 从以上的原理分析,首先WPAD
主机要在80
端口提供wpad.dat
和wspad.dat
,有了这两个文件,客户机上的浏览器或防火墙客户端才能实现自动配置。其次,DNS
服务器要创建相关记录,当客户机来查询时,将解析结果指向WPAD
主机。 好,我们先来解决第一个问题,WPAD
主机如何能够提供WPAD.DAT
和WSPAD.DAT
两个文件呢?最简单的办法是让ISA
服务器作WPAD
主机,同时提供两个配置文件,具体做法是,在ISA
服务器上依次点击 开始-程序-Microsoft ISA Server
-ISA
服务器管理-配置-网络-内部,右键点击“内部”,选择属性,如下图所示,切换到“自动发现”标签,勾选“为此网络发布自动发现信息”,这样ISA
就可以在80
端口提供WPAD.DAT
和WSPAD.DAT
两个文件了。 测试一下,看看ISA
服务器是否提供了配置文件。如下图所示,在浏览器中输入http://10.1.1.254/wpad.dat
,测试结果如下图所示,这表明ISA
服务器已经在80
端口发布了WPAD.DAT
,用同样的方法可知ISA
也发布了WSPAD.DAT
。 WPAD 主机已经在 80 端口提供了 WPAD.DAT 和 WSPAD.DAT ,一个问题解决了,接下来我们考虑另一个问题,客户机到底是怎么通过 DNS 来查询 WPAD 主机呢?具体是这样的,客户机向 DNS 发出一个查询请求,解析的域名为 WPAD+X 。怪了,怎么会是 X 呢? X 代表不确定性,如果客户机所在的域为 itet.com ,那么客户机就请求解析 wpad.itet.com ;如果客户机没加入域,但计算机名的后缀为 abc.com ,那么客户机就请求解析 wpad.abc.com ;如果客户机既没有加入域,也没有计算机名后缀,那客户机就请求解析 wpad 。这里是 WPAD 配置的关键所在,为什么论坛上很多管理员在域环境配置 WPAD 很正常,换到工作组环境就容易出问题呢?因为域环境下有统一的名称边界,客户机请求解析的域名后缀是固定的,而工作组的有组织无纪律特性决定了它的解析请求是无规律的。 下面举个具体的例子。如下图所示,Perth
属于工作组,Perth
将10.1.1.101
作为自己的DNS
服务器,我们分析一下Perth
是如何利用DNS
来自动发现代理服务器的。 将Perth
的浏览器配置为自动检测发现,在IE浏览器中依次点击 工具-Internet选项-连接-局域网设置,如下图所示,勾选“自动检测设置”。 在 Perth 上打开浏览器访问一个网站,同时启用 Ethereal 抓包追踪,抓包结果如下图所示,我们可以看到 Perth 请求 DNS 服务器解析域名 WPAD ,服务器解析失败后 Perth 又试图用广播进行名称解析,名称解析失败后 Perth 无法找到 WPAD 主机去下载 WPAD.DAT ,代理服务器自动发现失败。 很多朋友在论坛中发帖说自己在工作组中配置WPAD
时出问题,其实问题就出在DNS
服务器无法解析域名WPAD
。 好,WPAD
配置出问题了,而且是意料之中的,那如何解决呢?两种思路,一是想办法让 DNS 服务器能解析出域名WPAD ,二是想办法让Perth 查询一个DNS 服务器容易回答的域名。我们沿着这两种思路来尝试一下。 WPAD
这个域名为何难以解析呢?从结构上分析,WPAD
域名隶属于根域,一般DNS
服务器对根域根本就没有解析资格,因此解析这种域名有点勉为其难。兄弟不才,尝试用DNS
私有根来解决这个问题,在DNS
服务器中右键点击正向查找区域,如下图所示,选择“新建区域”。 创建根域后,我们需要在根域中为WPAD
主机创建A
记录,如下图所示,选择“新建主机”。 完全合格域名为 WPAD. ,IP
为ISA
服务器的内网地址。 OK
,如下图所示,WPAD
记录已经创建完毕,我们来试试能否发挥作用呢? 这次我们在Perth
上安装上防火墙客户端,从理论上分析,防火墙客户端需要从WPAD
主机下载WSPAD.DAT
,我们双击防火墙客户端,切换到“设置”标签,选择“自动检测到的ISA
服务器”,点击“立即检测”。 测试结果如下,防护器客户端成功地发现了代理服务器。 别忘了把自动检测的过程用 Ethereal 抓下来,如下图所示,我们可以很清楚地看到, Perth 请求 DNS 服务器解析域名 WPAD , DNS 服务器将域名解析为 10.1.1 .254 (私有根起作用了), Perth 接下来就去 10.1.1.254 下载 WSPAD.DAT ,用此文件将防火墙客户端所使用的代理服务器设置为 Beijing 。 上次我们用浏览器自动检测失败了,这次再试试,用Ethereal
抓包,结果如下图所示。我们可以看到客户机也是先请求DNS
服务器对wpad
进行域名解析,然后根据解析结果到ISA
服务器请求下载WPAD.DAT
,文件下载之后就可以用于配置浏览器了。 从上述实验来看,通过DNS
的私有根来解决WPAD
域名解析在技术层面是可行的,但这种方法其实有很大隐患。创建了私有根后会影响互联网上的域名解析,而且转发器也不能使用, 兄弟至此也没找到两全其美的办法,如果哪些弟兄有经验,还望不吝赐教。因此,我的结论是,除非你的单位本来就要部署私有根,否则还是别用这种方法解决问题,实在是弊大于利。 既然 Perth 发起的 WPAD 域名解析让 DNS 服务器处理起来很为难,那能否让 Perth 换一个域名查询呢?例如让 Perth 查询 wpad.itet.com ,这样的域名 DNS 处理起来不要太轻松哦!问题是,如何能让 Perth 更换查询域名呢?秘密就在 Perth 的计算机名中,如果我们希望 Perth 查询的域名是 wpad.itet.com ,只需将 Perth 的计算机名的 DNS 后缀改为 itet.com 即可。 操作具体如下,在Perth
上用右键单击“我的电脑”,在属性中切换到“计算机名”标签,如下图所示,点击“更改”。 在计算机的DNS
后缀处填写“itet.com
”,点击确定后重新启动计算机。 在DNS
服务器上创建区域itet.com
,并新建一个名为WPAD
的A
记录,如下图所示。现在WPAD
记录已经有了,就等着客户机来查询了。 在客户机上用防火墙客户端测试一下,如下图所示,我们可以看到客户机发出的查询已经改为 wpad.itet.com 了,服务器把域名解析为ISA
的内网IP
,随后客户机就去ISA
下载wspad.dat
了。呵呵,如果客户机是在域环境下,根本就无需更改计算机名后缀,想想其实还是有AD
比较方便。 总结:用DNS
部署WPAD
在域环境下比较合适,在工作组环境下就需要进行一些调整,但无论是创建DNS
私有根还是更改客户机的计算机名后缀,都不算是非常完美的解决方案。因此我们建议在工作组环境下可以考虑用DHCP
来解决这个问题,我们在下篇博文中将介绍如何利用DHCP
来解决WPAD
部署的问题。 本文转自yuelei51CTO博客,原文链接: http://blog.51cto.com/yuelei/83841,如需转载请自行联系原作者