如何在 Citrix ADC 上记录数据包跟踪

本故障排除文章介绍了管理员如何使用 Citrix ADC GUI 记录网络数据包跟踪。

需要记住的几个要点

  • Citrix 建议您使用以下网页中提供的“自动构建部分”中的最新 Wireshark 版本:http://www.wireshark.org/download/automated

  • 在 Citrix ADC 软件版本 10.5 及更高版本中,要解密捕获,请确保 ECC(椭圆曲线加密)、会话重用和 DH 参数在捕获跟踪之前被禁用/从虚拟服务器删除。在进行这些更改之前,请参阅本文的“其他资源”部分

在 NetScaler 11.1 设备上记录数据包跟踪

要在 NetScaler 11.1 设备上记录数据包跟踪,必须完成以下过程。

  1. 登录到 NetScaler GUI 并导航到“系统”>“诊断”页面。
  2. 单击“诊断”页面中的“开始新跟踪”链接,如以下屏幕截图所示。

    访问诊断页面

  3. 在“数据包大小”字段中将数据包大小更新为 0。

    数据包大小

  4. 单击 开始 以开始记录网络数据包跟踪。
  5. 单击“停止并下载”以停止记录测试完成后的网络数据包跟踪。

    停止和下载跟踪

  6. 选择所需文件,然后单击“选择”并单击“下载”。

    下载数据包跟踪

  7. 使用 Wireshark 实用程序打开网络数据包跟踪文件以显示文件的内容。

在 NetScaler 10.5 设备上记录数据包跟踪

若要在 NetScaler 10.5 设备上记录数据包跟踪,必须完成以下过程:

  1. 登录到 NetScaler GUI 并导航到“系统”>“诊断”页面。

    访问诊断页面

  2. 单击技术支持工具下的开始新跟踪链接,如下面的屏幕截图所示。
  3. 在“数据包大小”字段中将数据包大小更新为 0。

    数据包大小

    注意:如果不需要 NetScaler 标头,请选择 .pcap 格式的捕获跟踪。

  4. 单击 开始 以开始记录网络数据包跟踪。
  5. 单击确定停止记录测试完成后的网络数据包跟踪。

    停止跟踪记录

    生成一个 nstrace.cap 文件,其中包含网络数据包跟踪。

  6. 突出显示所需文件,然后单击“下载”。

    下载文件

  7. 指定目标并保存数据包跟踪。
  8. 使用 Wireshark 实用程序打开网络数据包跟踪文件以显示文件的内容。

    注意:选择“解密 SSL 数据包 (SSLPLAIN)”以在没有私钥的情况下解密数据包跟踪。

    解密 SSL 数据包

捕获 SSL 主密钥

在最新的 11.0 和 11.1 及以上版本中,有一个选项来捕获会话密钥,该选项仅适用于该特定会话/nstrace,如果您不想共享私钥或使用 SSLPLAIN 模式,则可以使用此选项。欲了解更多信息,请参阅 如何在 NetScaler 上捕获 nstrace 时使用新的“capsslkeys”选项

导出会话密钥而不共享私钥

在大多数情况下,私钥不可用或共享。在这种情况下,我们可以建议导出 SSL 会话密钥而不是私钥。请参阅以下文章了解更多信息。 如何导出和使用 SSL 会话密钥解密 SSL 跟踪而不共享 SSL 私钥

过滤器

此外,始终建议在采取跟踪时添加基于 IP 的筛选器。这将确保您只捕获感兴趣的流量,这将进一步简化您的故障排除。添加筛选器还可以减少 NetScaler 上的负载,同时采取跟踪。

筛选器部分

简单的基于 IP 的过滤器足以获得正确的捕获。有关筛选器和示例的详细列表,请参阅 Citrix 文档-nstrace。

使用虚拟服务器 IP 筛选器(前端和后端)捕获数据包跟踪的用例

通过虚拟服务器 IP 地址的筛选器并在 CLI 中启用选项“—link”或在 GUI 中选择“跟踪过滤的连接对等流量”选项(10.1 及更高版本),您将能够捕获该特定 IP 地址的前端和后端流量。使用此选项,不建议提及源 IP 或目标 IP 筛选器。

start nstrace -size 0 -filter "CONNECTION.IP.EQ(1.1.1.1)" -link ENABLED

show nstrace
        State:  RUNNING          Scope:  LOCAL            TraceLocation:  "/var/nstrace/24Mar2017_16_00_19/..." Nf:  24                  Time:  3600              Size:  0                 Mode:  TXB NEW_RX
        Traceformat:  NSCAP      PerNIC:  DISABLED        FileName:  24Mar2017_16_00_19 Filter:  "CONNECTION.IP.EQ(1.1.1.1)" Link:  ENABLED           Merge:  ONSTOP           Doruntimecleanup:  ENABLED
        TraceBuffers:  5000      SkipRPC:  DISABLED       Capsslkeys:  DISABLED    InMemoryTrace:  DISABLED

合并

捕获循环追踪

对间歇性问题进行故障排除总是具有挑战性的。循环跟踪最适合于间歇性问题。根据问题的发生情况,这些跟踪可以在几个小时或几天内运行。如上所述,也可以使用特定的过滤器。请在较长时间运行之前评估正在生成的跟踪文件的大小(因为这可能会填充 var 空间)

从 CLI 运行以下命令:

start nstrace -nf 60 -time 30 -size 0
This particular trace will create 60 files each of them for 30 sec. This means the files will start getting overwritten after 60 trace files or 30 mins
Show nstrace à To check the status of the nstrace
Stop nstrace à To stop the nstrace.

最佳做法

在处理每秒千兆字节流量的单元上,捕获流量是一个非常耗费资源的过程。对资源的影响主在 CPU 和磁盘空间方面。使用筛选表达式(仅捕获与特定 IP 相关的流量)可以减少磁盘空间的影响。然而,尽管使用了表达式,但对 CPU 的影响仍然存在,在某些情况下可能会导致稍微增加,因为 NetScaler 现在需要在捕获数据包之前根据过滤器处理数据包。

追查方面的最佳做法是:

  1. 跟踪运行的持续时间应尽可能限制,同时仍然确保捕获感兴趣的数据包。
  2. 安排跟踪活动发生在用户数量(以及流量)大大减少的时间,例如在休息时间。

其他资源

从 NetScaler GUI 禁用虚拟服务器上的会话重用

捕获跟踪时禁用会话重用,以便在跟踪中捕获完整的 SSL 握手。启用该功能后,您很可能只会在跟踪中捕获部分握手。确保在跟踪收集后启用该选项。 当持久性方法为 sslsession 时,不要禁用 SSL 会话重用,因为它会破坏现有连接的持久性。欲了解更多信息,请参阅CTX121925 - NetScaler 设备上的 SSL 重新协商流程和会话重用

  1. 打开虚拟服务器并导航到 SSL 参数。
  2. 禁用启用会话重用(如果启用)。

    启用会话重用

从 NetScaler CLI 禁用虚拟服务器上的会话重用

  1. SSH 到 NetScaler。
  2. 运行以下命令从虚拟服务器禁用 DH Param:

    set ssl vserver "vServer_Name" -sessReuse DISABLED

从 NetScaler GUI 中禁用虚拟服务器上的 DH 参数

有关 DH 参数的理解,请参考 CTX213335 - 如何在 NetScaler 上设置一个 Diffie-Hellman 密钥?

  1. 打开虚拟服务器并导航到 SSL 参数。
  2. 如果启用,请禁用 DH 参数。

    SSL 参数

从 NetScaler CLI 禁用虚拟服务器上的 DH 参数

  1. SSH 到 NetScaler。
  2. 运行以下命令从虚拟服务器禁用 DH Param:

    set ssl vserver "vServer_Name" -dh DISABLED

从 NetScaler GUI 中禁用虚拟服务器上的 ECC 曲线

ECC 曲线被禁用,以便使用私钥解密捕获的 SSL 跟踪。如果使用了相关的 SSL 密码,则不应禁用这些密钥。有关 ECC 曲线的更多信息,请参阅 CTX20 - 如何在 NetScaler 上设置 ECC?

  1. 打开虚拟服务器并导航至 ECC 曲线。

    ECC 曲线

  2. 如果没有 ECC 曲线绑定到虚拟服务器,则不需要其他操作。

    无抄送曲线

  3. 如果任何 ECC 曲线绑定到虚拟服务器,请单击 ECC 曲线并从虚拟服务器解除绑定。

从 NetScaler CLI 禁用虚拟服务器上的 ECC 曲线

  1. SSH 到 NetScaler。
  2. 对绑定到虚拟服务器的每个 ECC 曲线运行以下命令:

    unbind ssl vserver "vServer_Name" -eccCurveName "ECC_Curve_Name"