简介
本文档介绍如何对最佳网关选择(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 results。)
注意:AnyConnect应向443发送HTTP请求,因为响应本身很重要,而不是成功的响应。遗憾的是,代理处理的修复程序以HTTPS形式发送所有请求。请参阅Cisco bug ID CSCtg38672 - OGS应ping通HTTP请求。
注意:如果缓存中没有前端,AnyConnect将首先发送一个HTTP请求,以确定是否存在身份验证代理,以及它是否能处理该请求。只有在此初始请求之后,它才会开始OGS ping以探测服务器。
- OGS根据网络信息(例如域名系统(DNS)后缀和DNS服务器IP地址)确定用户位置。RTT结果连同此位置一起存储在OGS缓存中。
- OGS位置条目将缓存14天。已将Cisco Bug 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文件中。以前存在此数据未存储在文件中的问题。
有关详细信息,请参阅Cisco Bug ID CSCtj84626。
位置确定
OGS缓存结合使用DNS域和单个DNS服务器IP地址。其工作原理如下:
- 位置A具有一个locationa.com DNS域和两个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,该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。这之后通常是Certificate消息(可选的Certificate Request)和ServerHelloDone消息。异常现象有两方面:
- ServerHello后,ASA不会立即发送证书消息。客户端窗口大小为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的默认启动窗口大小从1变为2。
在以下情况下,这可能会影响OGS计算:
- 不同的网关运行不同的ASA版本。
- 客户端具有不同的delayed-ACK窗口大小。
在这种情况下,由delayed-ACK引入的延迟可能足以导致客户端选择错误的ASA。 如果此值在客户端和ASA之间不同,仍可能存在问题。在这种情况下,解决方法是调整“延迟确认”窗口的大小。
Windows 窗口版本
- 启动注册表编辑器。
- 确定要在其上禁用delayed-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 已归档以便在ASA上配置TCP调整参数。
典型用户示例
最常见的使用案例是,在家中的用户第一次运行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..
第二步:在连接尝试期间捕获服务器探测
- 在测试计算机上启动Wireshark。
- 在AnyConnect上开始连接尝试。
- 连接完成后,停止Wireshark捕获。
提示:由于捕获仅用于测试OGS,因此最好在AnyConnect选择网关时立即停止捕获。最好不要进行完整的连接尝试,因为这可能使数据包捕获变云。
第三步:验证OGS选择的网关
为了验证OGS选择特定网关的原因,请完成以下步骤:
- 启动新连接。
- 运行AnyConnect DART:
- 启动AnyConnect,然后单击Advanced。
- 单击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.
******************************************
第四步:验证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会话进行着色的优点在于可以轻松发现每个探测点的重新传输或其他此类异常。
- 要更改时间显示,请导航到查看>时间显示格式>自纪元以来的秒数:
选择Milliseconds,因为这是OGS使用的精度级别。
- 计算HTTP SYN与FIN/ACK之间的时间差,如步骤4的图中所示。对这三个探测中的每个探测重复此过程,并将值与步骤3.3.3中DART日志中显示的值进行比较。
分析
如果在捕获分析之后计算确定的RTT值,并将其与DART日志中显示的值进行比较,发现所有内容都匹配,但似乎仍然选择了错误的网关,则归结于以下两个问题之一:
- 头端出现问题。如果出现这种情况,可能会从一个特定头端重传过多的数据,或者在探测中发现任何其他此类异常。需要对交易所进行更深入的分析。
- Internet服务提供商(ISP)出现问题。如果出现这种情况,可能会出现一个特定头端的分段或大量延迟。
问题解答
问:OGS是否支持负载均衡?
答:是。OGS只知道集群主用设备名称,并使用该名称来判断最近的头端。
问:OGS是否适用于浏览器中定义的代理设置?
答: OGS不支持自动代理或代理自动配置(PAC)文件,但支持硬编码的代理服务器。因此,不会发生OGS操作。 相关日志消息为:“由于配置了自动代理检测,因此将不执行OGS。”