今天的这篇博文呢,只是想把最近遇到在DHCP服务器上禁用NetBios选项后导致的Windows XP SP3版本无法正常应用WPAD值的问题。
关于禁用客户端的Netbios选项功能的方法,微软官方也有相应的解决方法,在这里简单提一下,配置方法如下,也可以参考微软KB313314中的解释来配置 ,地址为http://support.microsoft.com/kb/313314。
- 单击“开始”/“管理工具”,然后单击“DHCP”。
- 在DHCP控制台中,展开“作用域”,右键单击“作用域选项”,然后单击“配置选项”。
- 单击“高级”选项卡,然后单击“供应商类别”列表中的“Microsoft Windows 2000 选项”。
- 保证在“用户类别”列表中的“默认用户类别”处于选中状态。
- 然后选中“可用选项”列下的“001 Microsoft 禁用 Netbios 选项”复选框。
- 在“数据输入”区域中,键入 0x2,然后单击“确定”即可。
但是当我们通过DHCP服务器来禁用掉客户端的NetBios功能后,会发现一个非常有意思的问题,那就是如果你的客户端安装了FWC客户端来发现TMG服务器,那么Windows 7 与Windows XP SP2版本是不受影响的,但是如果企业已经将Windows XP客户端安装了最新的SP3补丁包的话,那么这时就需要注意了,Windows XP SP3客户端上NetBios功能已经被禁用了,但是FWC却发现不了TMG了,如果将DHCP服务器上的禁用Netbios功能的选项取消,Windows XP sp3就立即可以正常发现了TMG服务器并进行上网,有意思吧,当时将这个问题同微软的工程师聊了聊,微软工程师也帮助查询了,反馈的结果是微软Windows XP SP3的相关文档中并未提及到此问题,那就是木有办法了,总不能不装SP3吧,所以我们还是需要看看有没有相关的解决方法呢?
其实遇到这个问题的话可以利用如下方法先做一些基本的检查
2、客户端手动指向TMG服务器发现可以正常发现TMG服务器并进行上网,初步确定不是由于TMG引发的。
3、在DHCP上取消禁用NetBios选项时设置的那个值,Windows XP SP3客户端通过DHCP自动发现了TMG,那么可以很肯定的确定不是由TMG引发的。
4、在客户端上安装抓包软件,在当时我使用了wireshark进行抓包,分析结果如下:
5、 重新获取IP地址进行抓包,Windows XP客户端上有如下提示:
Windows 7客户端上重新获取地址抓包如下:
通过上图可以发现在Windows XP SP3版本中确实存在发现WPAD值异常的问题。
6、当然不排除版本问题,安装Windows XP SP2版本后,在DHCP服务器上重新启用禁用NetBios功能选项后,Windows XP SP2没有出现发现不了TMG服务器的问题,抓包发现应用WPAD时正常,至此可以确定此问题与DHCP上禁用NetBios功能是有一定的关系的。
7、取消DHCP服务器的禁用NetBios选项后,手动到客户端的本地联接中禁用NetBios功能后,重新获取IP地址,检测WPAD正常,至此可以确定通过客户端来关闭NetBios是可以的,如果大家平时有用注册表的话,一定会想到的是必然可以通过修改注册表对应键值来实现手动将本地联接中NetBios功能取消一样的结果,查找后发现当我们手动在客户端中下图所示位置禁用Netbios后其实是修改了注册表
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\NetBT\Parameters\Interfaces中对应网卡健值中的NetBiosOptions值的,如下图所示;
但是大家如果注意观察会发现每台计算机的Interfaces中的内容是不一样的,这就意味将无法通过组策略的方法来直接修改所有Windows 客户端的这项值来达到批量禁用NetBios功能的。
但是真的没有解决方法了吗?其实到这一步我们就已经有解决方法了,那就是利用脚本的方式来检索此键值上所有NetBiosOptions选项非“2”的值,就全部改为2就好了,相关的解本呢如下,大家可以根据实际情况测试使用,这个脚本我这里用的是VBS的。
======================================================================
Const sNetKey = "System\CurrentControlSet\Services\NetBT\Parameters\Interfaces\"
Dim oReg ' Registry object
Dim sSubKey ' SubKey instance
Dim aSubKeys ' SubKeys array
Dim dwValue ' registry value
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
oReg.EnumKey HKEY_LOCAL_MACHINE, sNetKey, aSubKeys
' Top layer is interfaces
For Each sSubKey in aSubKeys
oReg.GetDWORDValue HKEY_LOCAL_MACHINE, sNetKey & sSubKey, "NetbiosOptions", dwValue
If dwvalue <> 2 Then
oReg.SetDWORDValue HKEY_LOCAL_MACHINE, sNetKey & sSubKey, "NetbiosOptions", 2
End If
Next
Const sNetKey = "System\CurrentControlSet\Services\NetBT\Parameters\Interfaces\"
Dim oReg ' Registry object
Dim sSubKey ' SubKey instance
Dim aSubKeys ' SubKeys array
Dim dwValue ' registry value
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
oReg.EnumKey HKEY_LOCAL_MACHINE, sNetKey, aSubKeys
' Top layer is interfaces
For Each sSubKey in aSubKeys
oReg.GetDWORDValue HKEY_LOCAL_MACHINE, sNetKey & sSubKey, "NetbiosOptions", dwValue
If dwvalue <> 2 Then
oReg.SetDWORDValue HKEY_LOCAL_MACHINE, sNetKey & sSubKey, "NetbiosOptions", 2
End If
Next
=====================================================================
用netbios over tcp/ip来实现,相关的方法也非常简单,只需要把下边的命令放到批处理中就可以了,提接组策略或播发就可以了。
=====================================================================
wmic nicconfig where (TcpipNetbiosOptions!=Null and TcpipNetbiosOptions!=2) call SetTcpipNetbios 2
=====================================================================
以上就是关于通过DHCP来禁用NetBIOS时对TMG的一些影响及排错的思路,可能也是不很完整但还是整理了一些分享出来,嘻嘻。
本文转自wangtingdong 51CTO博客,原文链接:http://blog.51cto.com/tingdongwang/900939,如需转载请自行联系原作者