簡介
本文說明如何對最佳閘道選擇(OGS)問題進行疑難排解。OGS是一種功能,可用於確定哪個網關的往返時間(RTT)最短,並連線到該網關。您可以使用OGS功能來最小化網際網路流量的延遲,而無需使用者干預。藉助OGS,Cisco AnyConnect安全移動客戶端(AnyConnect)可以辨識和選擇最適合連線或重新連線的安全網關。OGS在第一次連線時或在上次斷開連線後至少四小時重新連線時開始。有關詳細資訊,請參閱管理員指南。
提示:OGS最適合用於最新的AnyConnect客戶端和ASA軟體版本9.1(3)*或更高版本。
OGS如何工作?
簡單網際網路控制消息協定(ICMP) ping請求不起作用,因為許多思科自適應安全裝置(ASA)防火牆配置為阻止ICMP資料包以阻止發現。相反,客戶端向出現在合併所有配置檔案中的每個頭端傳送三個HTTP/443請求。這些HTTP探測器在日誌中稱為OGS ping,但如前所述,它們不是ICMP ping。為了確保(重新)連線不會花費太長的時間,如果OGS在七秒內未收到任何OGS ping結果,則預設情況下會選擇上一個網關。(在日誌中查詢OGS ping結果。)
注意:AnyConnect應向443傳送HTTP請求,因為響應本身很重要,而不是成功的響應。遺憾的是,代理處理的修復程式將所有請求作為HTTPS傳送。請參閱思科漏洞ID CSCtg38672 - OGS應ping通HTTP請求。
注意:如果快取中沒有前端,則AnyConnect會首先傳送一個HTTP請求,以確定是否存在認證代理,以及它是否能處理該請求。只有在此初始請求之後,它才會開始OGS ping以探測伺服器。
- OGS根據網路資訊(例如網域名稱系統(DNS)尾碼和DNS伺服器IP位址)來決定使用者位置。RTT結果連同此位置儲存在OGS快取中。
- OGS位置條目被快取14天。已存檔思科漏洞ID CSCtk66531 ,以便使用者可配置這些設定。
- 在第一次快取位置條目14天後,才會從此位置再次運行OGS。在此期間,它將使用快取條目和為該位置確定的RTT。這意味著,當AnyConnect再次啟動時,它不會再次執行OGS;而是使用該位置快取中的最佳網關順序。在診斷AnyConnect報告工具(DART)日誌中,將顯示以下消息:
******************************************
Date : 10/04/2013
Time : 14:00:44
Type : Information
Source : acvpnui
Description : Function: ClientIfcBase::startAHS
File: .\ClientIfcBase.cpp
Line: 2785
OGS was already performed, previous selection will be used.
******************************************
- 透過TCP交換確定到使用者將嘗試連線的網關的安全套接字層(SSL)埠的RTT,該埠由AnyConnect配置檔案中的主機條目指定。
注意:HTTP-ping執行簡單的HTTP post,然後顯示RTT和結果,與此不同,OGS計算稍微複雜一些。AnyConnect為每個伺服器傳送三個探測,並計算其發出的HTTP SYN與每個探測的FIN/ACK之間的延遲。然後使用增量中最小的增量來比較伺服器並進行選擇。因此,即使HTTP-ping很好地指示了AnyConnect將選擇哪台伺服器,它們也可能不一定會計數。在檔案的其餘部分中,會提供與此相關的詳細資訊。
- 目前,OGS僅在使用者退出掛起並已超出閾值時運行檢查。如果使用者所連線的ASA崩潰或變得不可用,則OGS不會連線到其他ASA。OGS僅與配置檔案中的主要伺服器聯絡以確定最佳伺服器。
- 下載OGS客戶端配置檔案後,當使用者重新啟動AnyConnect客戶端時,選擇其他配置檔案的選項將變為灰色,如下所示:
即使使用者機器有多個其他設定檔,在停用OGS之前,他們也無法選取任何設定檔。
OGS快取
計算完成後,結果會儲存在preferences_global檔案中。此資料以前未儲存在檔案中時發生問題。
有關詳細資訊,請參閱思科漏洞ID CSCtj84626 。
位置確定
OGS快取工作在DNS域和單個DNS伺服器IP地址的組合上。其運作方式如下:
- 位置A的DNS域是locationa.com,並且有兩個DNS伺服器IP地址- ip1和ip2。每個域/IP組合都會建立一個指向OGS快取條目的快取金鑰。舉例來說:
- locationa.com|ip1 -> ogscache1
- locationa.com|ip2 -> ogscache1
- 如果AnyConnect隨後連線到物理上不同的網路,則會建立相同的域/IP組合累積,並根據快取清單進行檢查。如果存在任何匹配,則會使用OGS快取值,並且客戶端仍被視為位置A。
失敗案例
以下是使用者可能會遇到的一些失敗案例:
當與網關的連線丟失時
使用OGS時,如果與使用者所連線的網關的連線丟失,則AnyConnect連線到 備份伺服器清單和不是 到下一個OGS主機。操作順序如下:
- OGS僅聯絡主伺服器以確定最佳伺服器。
- 一旦確定,連線演算法將是:
- 嘗試連線到最佳伺服器。
- 如果失敗,請嘗試使用最佳伺服器的備份伺服器清單。
- 如果失敗,請嘗試OGS選擇清單中剩餘的每個伺服器,按照其選擇結果排序。
注意:當管理員配置備份伺服器清單時,當前配置檔案編輯器僅允許管理員輸入備份伺服器的完全限定域名(FQDN),而不允許輸入可能的主伺服器的使用者組:
思科漏洞ID CSCud84778 已存檔以便更正此問題,但必須在備份伺服器的主機地址欄位中輸入完整的URL,此地址應該有效:https://<ip-address>/usergroup。
暫停後繼續
要使OGS在恢復後運行,AnyConnect必須在電腦進入睡眠狀態時建立連線。恢復後的OGS僅在網路環境測試發生之後執行,其目的是確認網路連線可用。此測試包括DNS連線子測試。
然而,如果DNS伺服器捨棄查詢欄位中具有IP位址的A型要求,而不是以「找不到名稱」回覆(更常見的情況,一律會在測試期間發生),則思科錯誤ID CSCti20768 「IP地址A型別的DNS查詢,應為PTR以避免超時」適用。
TCP Delayed-ACK窗口大小選擇不正確的網關
當使用早於版本9.1(3)的ASA版本時,客戶端上的捕獲顯示SSL握手的持續延遲。請注意,客戶端傳送其ClientHello,然後ASA傳送其ServerHello。這之後通常會接著顯示憑證訊息(可選的憑證要求)和ServerHelloDone訊息。異常情況有兩方面:
- ASA不會在ServerHello後立即傳送證書消息。客戶端窗口大小為64,860位元組,足以容納來自ASA的整個響應。
- 客戶端不會立即確認ServerHello,因此ASA會在約120毫秒後重新傳輸ServerHello,此時客戶端會確認資料。然後會傳送「憑證」訊息。這幾乎就像客戶端等待更多資料一樣。
發生這種情況的原因是TCP slow-start和TCP delayed-ACK之間的互動。在ASA版本9.1(3)之前,ASA使用慢啟動窗口大小1,而Windows客戶端使用延遲ACK值2。這表示ASA在收到ACK之前僅傳送一個資料包,但也意味著客戶端在收到兩個資料包之後才會傳送ACK。ASA在120毫秒後超時並重新傳輸ServerHello,然後客戶端確認資料並繼續進行連線。 思科漏洞ID CSCug98113更改了此行為,因此ASA預設使用慢啟動窗口大小為2(而不是1)。
在以下情況下,這可能會影響OGS計算:
- 不同的網關運行不同的ASA版本。
- 客戶端具有不同的延遲ACK窗口大小。
在這種情況下,延遲ACK引入的延遲可能足以導致客戶端選擇錯誤的ASA。 如果此值在使用者端和ASA之間有所不同,仍可能存在問題。在這種情況下,解決方法是調整「延遲確認」窗口大小。
Windows
- 啟動登錄檔編輯器。
- 標識要在其上停用延遲ACK的介面的GUID。為此,請導航 到:
HKEY_LOCAL_MACHINE > SOFTWARE > Microsoft > WindowsNT > CurrentVersion > NetworkCards > (number)。
檢視「NetworkCards(網絡卡)」下列出的每個號碼。在右側,「說明」應列出介面(例如,Intel(R) Wireless WiFi Link 5100AGN),而ServiceName應列出相應的GUID。
- 找到此登入子機碼,然後按一下:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\<介面GUID>
- 在「編輯」選單上,指向「新建」,然後按一下DWORD值。
- 將新值命名為TcpAckFrequency,並為其分配值1。
- 退出登錄檔編輯器。
- 重新啟動Windows以使此更改生效。
注意:思科漏洞ID CSCum19065 已存檔以使TCP調整引數可以在ASA上配置。
典型使用者範例
最常見的使用案例是,在家中的使用者第一次運行OGS時,它會記錄DNS設定,並且OGS ping結果會在快取中(預設值為14天的超時)。當使用者第二天晚上返回家時,OGS檢測到相同的DNS設定,在快取中找到它,並跳過OGS ping測試。之後,當使用者前往提供網際網路服務的飯店或餐廳時,OGS會檢測不同的DNS設定,運行OGS ping測試,選擇最佳網關,並在快取中記錄結果。
如果OGS和AnyConnect恢復設定允許,當從掛起或休眠狀態恢復時,處理過程相同。
OGS故障排除
步驟 1.清除OGS快取以強制重新評估
要清除OGS快取並重新評估可用網關的RTT,只需從PC中刪除全局AnyConnect首選項檔案即可。檔案的位置會根據作業系統(OS)而有所不同:
- Windows Vista和Windows 7
C:\ProgramData\Cisco\Cisco AnyConnect Secure Mobility Client\preferences_global.xml
Note: in older client versions it used to be stored in C:\ProgramData\Cisco\Cisco
AnyConnect VPN Client
- Windows XP
C:\Documents and Settings\AllUsers\Application Data\Cisco\Cisco AnyConnect VPN
Client\preferences_global.xml
- Mac OS X
/opt/cisco/anyconnect/.anyconnect_global
Note: with older versions of the client it used to be /opt/cisco/vpn..
- Linux
/opt/cisco/anyconnect/.anyconnect_global
Note: with older versions of the client it used to be /opt/cisco/vpn..
步驟 2.在連線嘗試期間捕獲伺服器探測
- 在測試電腦上啟動Wireshark。
- 在AnyConnect上啟動連線嘗試。
- 連線完成後,停止Wireshark捕獲。
提示:由於捕獲僅用於測試OGS,因此最好在AnyConnect選擇網關時立即停止捕獲。最好不要進行完整的連線嘗試,因為這樣會使資料包捕獲變雲。
步驟 3.驗證OGS選擇的網關
要驗證OGS選擇特定網關的原因,請完成以下步驟:
- 啟動新連線。
- 運行AnyConnect DART:
- 啟動AnyConnect,然後按一下高級。
- 按一下Diagnostics。
- 按「Next」(下一步)。
- 按「Next」(下一步)。
- 檢查在案頭上新建立的DartBundle_XXXX_XXXX.zip檔案中的DART結果。
- 導航到Cisco AnyConnect Secure Mobility Client > AnyConnect.txt。
- 請注意從此DART日誌為特定伺服器啟動OGS探測的時間:
******************************************
Date : 10/04/2013
Time : 14:21:27
Type : Information
Source : acvpnui
Description : Function: CHeadendSelection::CSelectionThread::Run
File: .\AHS\HeadendSelection.cpp
Line: 928
OGS starting thread named gw2.cisco.com
******************************************
通常,它們應該大約在同一時間,但在捕獲量較大時,時間戳有助於縮小哪些資料包是HTTP探報以及哪些是實際連線嘗試。
- 一旦AnyConnect向伺服器傳送三個探測,就會生成以下消息,其中包含每個探測的結果:
******************************************
Date : 10/04/2013
Time : 14:31:37
Type : Information
Source : acvpnui
Description : Function: CHeadendSelection::CSelectionThread::logThreadPingResults
File: .\AHS\HeadendSelection.cpp
Line: 1137
OGS ping results for gw2.cisco.com: (219 218 132 )
******************************************
請務必注意這三個值,因為它們必須與擷取結果相符。
- 尋找包含「*** OGS Selection Results***的訊息,以檢視評估的RTT,以及最近的連線嘗試是否是快取RTT或新計算的結果。
以下是範例: ******************************************
Date : 10/04/2013
Time : 12:29:38
Type : Information
Source : vpnui
Description : Function: CHeadendSelection::logPingResults
File: .\AHS\HeadendSelection.cpp
Line: 589
*** OGS Selection Results ***
OGS performed for connection attempt. Last server: 'gw2.cisco.com'
Results obtained from OGS cache. No ping tests were performed.
Server Address RTT (ms)
gw1.cisco.com 302
gw2.cisco.com 132 <========= As seen, 132 was the lowest delay
of the three probes from the previous DART log
gw3.cisco.com 506
gw4.cisco.com 877
Selected 'gw2.cisco.com' as the optimal server.
******************************************
步驟 4.驗證AnyConnect執行的OGS計算
檢查用於計算RTT的TCP/SSL探測的捕獲。檢視HTTPS請求佔用單個TCP連線的時間。每個探測請求都應使用不同的TCP連線。為此,請在Wireshark中打開捕獲,然後對每個伺服器重複以下步驟:
- 使用ip.addr過濾器可將傳送到每個伺服器的資料包隔離到其自己的捕獲中。為此,請導航到Edit,選擇Mark All Displayed Packets。然後,導航到檔案>另存為,選擇僅標籤的資料包選項,然後按一下儲存:
- 在此新捕獲中,導航到檢視>時間顯示格式>日期和時間:
- 根據步驟3.3.2中辨識的DART日誌,辨識此捕獲中在傳送OGS探測時傳送的第一個HTTP SYN資料包。請務必記住,對於第一個伺服器,第一個HTTP請求不是伺服器探測。很容易誤判對伺服器探測的第一個請求,從而得到與OGS報告完全不同的值。此問題在此突出顯示:
- 要更輕鬆地辨識每個探測,請按一下右鍵第一個探測的HTTP SYN,然後選擇Colorize Conversation(如圖所示):
對所有探查上的SYN重複此過程。如上圖所示,前兩個探針以不同的顏色描繪。對TCP會話進行著色的優點是易於發現每個探測點的重新傳輸或其他此類異常。
- 要更改時間顯示,請導航到View > Time Display Format > Seconds Since Epoch:
選擇Milliseconds,因為這是OGS使用的精確度級別。
- 計算HTTP SYN和FIN/ACK之間的時間差,如步驟4的圖所示。對三個探測中的每個探測重複此過程,並將這些值與步驟3.3.3中DART日誌中顯示的值進行比較。
分析
如果分析捕獲後,計算出確定的RTT值,並將其與DART日誌中顯示的值進行比較,發現所有值都匹配,但似乎仍然選擇了錯誤的網關,則其原因是以下兩個問題之一:
- 頭端出現問題。如果出現這種情況,則可能從一個特定頭端或探查中發現的任何其它此類異常重新傳輸過多。需要更深入地分析交流。
- 網際網路服務供應商(ISP)發生問題。如果出現這種情況,可能會出現一個特定頭端的分段或大量延遲。
問答
問:OGS是否適用於負載均衡?
答:是。OGS只知道集群主名稱,並使用該名稱來判斷最近的頭端。
問:OGS是否使用瀏覽器中定義的代理設定?
答: OGS不支援自動代理或代理自動配置(PAC)檔案,但支援硬編碼代理伺服器。因此,OGS操作不會發生。 相關的日誌消息為:「由於配置了自動代理檢測,將不會執行OGS。」