WPAD
的部署原理暨故障排查
WPAD
是
Web Proxy Auto Discovery
的缩写,意思是
Web
代理服务器自动发现。
WPAD
的设计目的是让浏览器能自动发现代理服务器, 这样用户可以轻松访问互联网而且无需知道哪台计算机是代理服务器。在
ISA2006
中,
WPAD
不仅能让客户机浏览器自动发现代理服务器,还可以用于防火墙客户端自动发现代理服务器。显然,
WPAD
对代理服务器的透明处理让管理员轻松了不少, 管理员不再需要去每台客户机上设置代理服务器参数了。但樱桃好吃树难栽,
WPAD
的部署并非都是一帆风顺,
WPAD
的部署可以借助
DNS
服务器或
DHCP
服务器,容易出问题的是用
DNS
服务器进行部署,尤其是在工作组环境下问题更多。今天我们就来构造一个实验环境,为大家剖析
WPAD
的工作原理以及故障原因。
实验拓扑如下图所示。内网计算机在工作组环境,
Florence
是
DNS
服务器,
Perth
是客户机,
Beijing
是
ISA2006
服务器。
用
DNS
来实现
WPAD
,原理如下:
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
服务器容易回答的域名。我们沿着这两种思路来尝试一下。
一
让
DNS
服务器能解析域名
WPAD
WPAD
这个域名为何难以解析呢?从结构上分析,
WPAD
域名隶属于根域,一般
DNS
服务器对根域根本就没有解析资格,因此解析这 种域名有点勉为其难。兄弟不才,尝试用
DNS
私有根来解决这个问题,在
DNS
服务器中右键点击正向查找区域,如下图所示,选择“新建区域”。
出现新建区域向导,下一步。
新建区域类型为主要区域,下一步。
区域名称为
.
,这就是传说中的根域。
根域的区域数据文件为
root.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
换查询域名
既然
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
部署的问题。