DHCP伺服器禁用NetBios功能後引發WPAD失效解決方法

weixin_33763244發表於2017-11-21
今天的這篇博文呢,只是想把最近遇到在DHCP伺服器上禁用NetBios選項後導致的Windows XP SP3版本無法正常應用WPAD值的問題。
      關於禁用客戶端的Netbios選項功能的方法,微軟官方也有相應的解決方法,在這裡簡單提一下,配置方法如下,也可以參考微軟KB313314中的解釋來配置 ,地址為http://support.microsoft.com/kb/313314
  1. 單擊“開始”/“管理工具”,然後單擊“DHCP”。
  2. 在DHCP控制檯中,展開“作用域”,右鍵單擊“作用域選項”,然後單擊“配置選項”。
  3. 單擊“高階”選項卡,然後單擊“供應商類別”列表中的“Microsoft Windows 2000 選項”。
  4. 保證在“使用者類別”列表中的“預設使用者類別”處於選中狀態。
  5. 然後選中“可用選項”列下的“001 Microsoft 禁用 Netbios 選項”核取方塊。
  6. 在“資料輸入”區域中,鍵入 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吧,所以我們還是需要看看有沒有相關的解決方法呢?
      其實遇到這個問題的話可以利用如下方法先做一些基本的檢查
1、利用fwctools進行檢查,發現客戶端返回如下內容,很明顯客戶端沒有正常下載應用到WPAD值哦:
2、客戶端手動指向TMG伺服器發現可以正常發現TMG伺服器並進行上網,初步確定不是由於TMG引發的。
3、在DHCP上取消禁用NetBios選項時設定的那個值,Windows XP SP3客戶端通過DHCP自動發現了TMG,那麼可以很肯定的確定不是由TMG引發的。
4、在客戶端上安裝抓包軟體,在當時我使用了wireshark進行抓包,分析結果如下:
5、 重新獲取IP地址進行抓包,Windows XP客戶端上有如下提示:
clip_image002
Windows 7客戶端上重新獲取地址抓包如下:
clip_image004
通過上圖可以發現在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值的,如下圖所示;
image
但是大家如果注意觀察會發現每臺計算機的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 
=====================================================================
用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,如需轉載請自行聯絡原作者

相關文章