解決MSN無法登錄問題的意外收穫

解決MSN無法登錄問題的意外收穫

       最近在運維過程中,遇到了兩個歷史悠久而且截然不同的疑難問題。但巧合的是,兩個問題殊途同歸,最後居然使用了同樣的解決方法。爲了慶祝送別這兩個問題,也爲了和大家共同學習,共同進步,現在把解決問題的詳細過程獻出來和大家分享。

       先對問題進行一下描述啊。第一個問題就是MSN無法登錄!估計很多朋友看到這個題目就要暗自點頭,大有一見如故的感覺。這個問題非常普遍,在我們公司更是由來已久。無論用戶的級別高低,無論使用的MSN版本新舊,總有一部分不和諧的用戶會跑來反映自己的MSN無法登錄。按理說,即時通訊軟件很不受網管待見,應該學會在夾縫裏求生存,登錄方式應該手段繁多,花樣翻新。什麼封裝成HTTPHTTPS,什麼通過Web代理,Socks代理,加密代理登錄等等,應該讓網管覺得MSN登錄真是防不勝防,堵不勝堵纔好。可MSN倒好,我們還沒想限制呢,它先自己頂不住了。

爲了解決這個問題,勞動人民可是想了不少主意,大家上網搜了不少辦法。什麼導入證書法,什麼在瀏覽器中勾選自動檢測設置啊,這些方法倒也不是一無是處,可奇怪的是有些辦法在張三的機器上行,在李四的機器上就不行,搞來搞去,也沒有一個通用的解決辦法。最可氣的是有些用戶第一天能登錄,第二天就不能登錄了,搞得大家每次登錄MSN時心情都忐忑不安,充滿了憧憬和期待。以前在MSN中配置代理服務器登錄還是比較靠譜的一招,我們在TMG服務器上也配置了防火牆策略,希望用戶通過HTTPS協議登錄MSN服務器。可後來配置Web代理基本上就毫無作用了。很長一段時間以來,遇到用戶無法登錄MSN,大家都很頭疼去進行技術支持。對比一下吃苦耐勞,從不挑肥揀瘦的QQ,這MSN跟別人的差距可真不是一星半點。

第二個問題也是一個老問題了,WPADWSUS之間有衝突。這個問題聽起來挺匪夷所思的,WSUS是幹嘛的,WSUS是用於給客戶機自動更新微軟補丁的;WPAD是幹嘛的,WPAD是自動在客戶機的Web代理或防火牆客戶端上配置代理服務器的。咋一看這兩者之間沒什麼關聯,可奇怪的是隻要一啓用WPAD,客戶機能自動發現代理服務器的同時會立即和WSUS服務器失去聯繫。爲了解決這個奇怪的問題,我們在微軟特意開了CASE,可微軟抓了不少包進行分析,最後也沒分析出什麼結果。結果呢,這個CASE就一直掛在那了。問題沒解決,我們只能在WPADWSUS之間選擇Kill一個了,WSUS是負責更新補丁的,安全問題應該優先保證,所以只能委屈一下WPAD了。

介紹完現有的問題後,再來介紹一下是怎麼解決問題的。我們先在MSN問題上找到了突破口,查詢微軟Technet三月份的安全博客時,忽然發現有篇文章介紹MSN登錄原理,文章提到如何希望MSN通過代理服務器登錄服務器,僅僅配置Web代理是不夠的,MSN只是在完成登錄的部分工作時使用到Web代理!注意,這也就意味着如果僅僅在MSN中配置下圖所示的Web代理,是無法完成MSN登錄的。

       通過在客戶機上抓包分析,發現MSN登錄時要做很多工作,要聯繫一些*.microsoft.com的服務器,要聯繫一些*.hotmail.com的服務器,還要聯繫一些*.live.com*.msn.com的服務器。當MSN訪問這些服務器時,有部分工作可以由Web代理完成,但有些工作是不能通過Web代理的。那剩下的登錄工作應該交給誰呢?答案是Winhttp代理!

       Winhttp代理和Web代理是兩套不同的代理機制,我們在瀏覽器中配置的代理服務器屬於Web代理,那Winhttp代理應該如何配置呢?其實在Win7計算機中使用Netsh就可以輕鬆配置,如下圖所示,我們在Win7客戶機中以管理員身份運行一個命令提示符,然後輸入:Netsh Winhttp Set Proxy proxy.chamc.com.cn:80。這條指令的目的就是把我們當前使用的代理服務器proxy.chamc.com.cn設置爲Winhttp的代理服務器。

 

設置了Winhttp代理後,果然效果不凡,大家的MSN紛紛能夠成功登錄了!真是不容易啊,這個該死的微軟,居然畫蛇添足地設計什麼Winhttp代理!羣衆中有幾個人懂這個啊,都使用Web代理不就完事了嘛,這些程序員到底有木有腦子啊!大家正在義憤填膺地譴責微軟,忽然有同事發現新問題了。只要在計算機上配置了Winhttp代理,就無法訪問WSUS服務器了!

檢查一下計算機c:\windows\windowsupdate.log文件,可以發現客戶機訪問WSUS服務器時的日誌內容,日誌中有這樣的語句DownloadFileInternal failed for http://hq-sus/selfupdate/wuident.cab: error 0x801901f6。這種錯誤提示和配置WPAD後的錯誤提示完全相同,這種情況下我們就提高警惕了,爲什麼WSUSWinhttp代理之間也有這種兼容性問題呢?

通過查閱資料,發現原來WSUS客戶端在訪問WSUS服務器時,也是要調用Winhttp代理進行通訊的。由於WSUS客戶機和WSUS服務器同在TMG的內網,因此WSUS客戶機應該直接訪問WSUS服務器,根本不應該客戶機先訪問到TMG服務器,然後再通過TMG服務器訪問WSUS服務器!找到問題之後,怎麼解決呢?其實解決方法也很簡單,在netsh Winhttp中設置旁路列表,告訴Winhttp代理,訪問WSUS服務器不用經過Winhttp代理,這樣就可以了。例如WSUS服務器是hq-sus,那麼我們就可以在客戶機上輸入如下圖所示命令:Netsh Winhttp set proxy proxy.chamc.com.cn:80 “hq-sus”。這條指令就是通知Winhttp代理,訪問hq-sus服務器可以直接訪問,不用經過Winhttp代理了。如果有內網其他的服務器要排除,可以用分號隔開,具體語法可以參考http://technet.microsoft.com/en-us/library/cc731131%28WS.10%29.aspx

 

在客戶機上配置完Netsh Winhttp後,問題解決了。用戶可以登錄MSN,也不會和WSUS有衝突了,問題貌似圓滿解決啊!但是,但是,問題好像還留了一個小尾巴。爲什麼WSUSWPAD當初會有衝突呢?難道也是類似原因導致的。在微軟網站找資料!找啊找,找啊找,嘿嘿,功夫不負有心人啊,真的被俺找到了。原來Winhttp代理除了可以通過Netsh Winhttp進行配置,還可以通過WPAD進行自動配置。但是,當Winhttp代理通過WPAD下載wpad.dat文件進行自動配置時,由於wpad.dat文件中沒有對wsus服務器進行排除,因此WSUS客戶端通過Winhttp代理就不會直接訪問WSUS服務器。而是需要通過TMG代理服務器去訪問WSUS服務器,這樣當然是不行的!

搞清楚道理,問題就好解決了。只要在配置WPAD時把內網的WSUS服務器排除之外就OK了。  TMG服務器上打開管理控制檯,找到“網絡連接”-“內部”-“屬性”中的“Web瀏覽器”標籤,如下圖所示,把WSUS服務器hq-sus添加到直接訪問的列表中,這樣WPAD就會通知使用Web代理或Winhttp代理不要通過代理服務器訪問WSUS服務器,如果還有其他的服務器要排除,參考這種操作就可以。

       排除的服務器可以通過TMG服務器上的wpad.dat文件體現出來,我們可以使用瀏覽器從TMG服務器上下載wpad.dat文件查看排除服務器列表。如下圖所示,我們使用記事本打開TMG服務器上的wpad.dat,可以看到WSUS服務器hq-sus已經被排除使用代理服務器訪問了。

 

       現在,通過在WPAD中設置排除服務器,WPAD可以啓用了。用戶的Winhttp代理可以通過WPAD自動獲取配置,不需要通過Netsh Winhttp進行配置。現在,用戶登錄MSN,訪問WSUS服務器都沒有問題了,非常和諧。從這個問題中,我們可以得出兩個結論:第一是不要迷信微軟,微軟的產品之間也會有兼容性問題;第二是一定要相信微軟,問題最終還是可以解決的。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章