排查 MACsec 问题

本页面介绍如何排查 MACsec for Cloud Interconnect 的问题。

当我尝试创建新密钥时,Cloud Interconnect 显示错误

如果您的现有 MACsec 密钥没有开始时间,并且尝试创建新密钥,则 Cloud Interconnect 会显示错误。如需解决该错误,请更新现有密钥的开始时间

MACsec 在我的 Cloud Interconnect 连接上正常关闭

您已成功在 Cloud Interconnect 连接和本地路由器上启用了 MACsec,但 MACsec 会话显示它在 Cloud Interconnect 连接链路上正常关闭。此问题可能是由于以下某个原因造成:

  • 本地路由器上的活动密钥与 Google 的边缘路由器不匹配。
  • 您的本地路由器和 Google 的边缘路由器之间存在 MACsec 协议不匹配。

如需解决 MACsec 状态,请执行以下操作:

  1. 如需验证您的 Cloud Interconnect 连接是否已启用 MACsec,请选择以下选项之一:

    控制台

    1. 在 Google Cloud 控制台中,前往 Cloud Interconnect 物理连接标签页。

      转到物理连接

    2. 选择要查看的 Cloud Interconnect 连接。

    3. MACsec 标签页上,验证 MACsec MACsec是否显示以下其中一项:

      • 已启用,应急开启:链路上已启用 MACsec 加密。如果两端之间未建立 MACsec 加密,则链路无需加密即可运行。

      • 已启用,应急关闭:链路上已启用 MACsec 加密。如果两端之间未建立 MACsec 加密,则链路将失败。

    gcloud

    gcloud compute interconnects describe INTERCONNECT_CONNECTION_NAME
    

    INTERCONNECT_CONNECTION_NAME 替换为您的 Cloud Interconnect 连接的名称。

    输出类似于以下内容。验证是否已显示 macsecEnabled: true

    adminEnabled: true
    availableFeatures:
    - IF_MACSEC
    circuitInfos:
    - customerDemarcId: fake-peer-demarc-0
      googleCircuitId: LOOP-0
      googleDemarcId: fake-local-demarc-0
    creationTimestamp: '2021-10-05T03:39:33.888-07:00'
    customerName: Fake Company
    description: something important
    googleReferenceId: '123456789'
    id: '12345678987654321'
    interconnectAttachments:
    - https://www.googleapis.com/compute/v1/projects/my-project1/regions/us-central1/interconnectAttachments/interconnect-123456-987654321-0
    interconnectType: IT_PRIVATE
    kind: compute#interconnect
    labelFingerprint: 12H17262736_
    linkType: LINK_TYPE_ETHERNET_10G_LR
    location: https://www.googleapis.com/compute/v1/projects/my-project1/global/interconnectLocations/cbf-zone2-65012
    macsec:
      failOpen: false
      preSharedKeys:
      - name: key1
        startTime: 2023-07-01T21:00:01.000Z
    macsecEnabled: true
    name: INTERCONNECT_CONNECTION_NAME
    operationalStatus: OS_ACTIVE
    provisionedLinkCount: 1
    requestedFeatures:
    - IF_MACSEC
    requestedLinkCount: 1
    selfLink: https://www.googleapis.com/compute/v1/projects/my-project1/global/interconnects/INTERCONNECT_CONNECTION_NAME
    selfLinkWithId: https://www.googleapis.com/compute/v1/projects/my-project1/global/interconnects/12345678987654321
    state: ACTIVE
    
  2. 如需检查 Cloud Interconnect 端口状态、MACsec 操作状态和有效密钥名称,请使用以下选项之一:

    控制台

    1. 在 Google Cloud 控制台中,前往 Cloud Interconnect 物理连接标签页。

      转到物理连接

    2. 选择要查看的 Cloud Interconnect 连接。

    3. 链路线路信息中,验证是否所有链路的链路状态都显示 活跃

    4. 验证 MACsec 密钥名称是否显示所有链路的密钥名称,以及每个密钥名称是否显示 此链路上的 MACsec 已开启此链路上的 MACsec 已关闭

    gcloud

    gcloud compute interconnects get-diagnostics INTERCONNECT_CONNECTION_NAME \
        --project=PROJECT_NAME
    

    PROJECT_NAME 替换为您的 Google Cloud 项目的名称。

    输出类似于以下内容。验证 links.lacpStatus.state 是否显示 ACTIVElinks.macsec.ckn 是否显示值,links.operationalStatus 是否显示 LINK_OPERATIONAL_STATUS_UP

    bundleAggregationType: BUNDLE_AGGREGATION_TYPE_STATIC
    bundleOperationalStatus: BUNDLE_OPERATIONAL_STATUS_UP
    links:
    - circuitId: LOOP-0
      googleDemarc: fake-local-demarc-0
      lacpStatus:
        googleSystemId: '00:11:22:33:44:55'
        neighborSystemId: '55:44:33:22:11:00'
        state: ACTIVE
      macsec:
        ckn: 0101010189abcdef...0123456789abcdef
        operational: false
      operationalStatus: LINK_OPERATIONAL_STATUS_UP
      receivingOpticalPower:
        state: OK
        value: -2.49
      transmittingOpticalPower:
        state: OK
        value: -0.88
    macAddress: 00:11:22:33:44:55
    

    如果 links.macsec.ckn 未显示任何值,请与 Google Cloud 支持团队联系以获取帮助。

  3. 如需验证有效密钥的 CAK 和 CKN 值以及密钥的开始时间,请选择以下选项之一:

    控制台

    1. MACsec 标签页上,前往预共享密钥部分,然后点击有效密钥旁边的查看。如果未显示 CKN 值,请与 Google Cloud 支持团队联系以获取帮助。

    2. 预共享密钥部分中,验证有效密钥列出的开始时间是否与本地路由器上的开始时间匹配。执行下列其中一项操作:

      • 如果值不匹配,请参阅路由器的手册来更新路由器上的值,然后验证是否可以建立 MACsec 会话。

      • 如果值匹配,但 MACsec 会话仍然在链路上关闭,则继续执行下一步。

    gcloud

    1. 运行 gcloud compute interconnects get-diagnostics 命令以显示有效密钥的 CKN 值。

      如果您配置了多个密钥,则系统会选择开始时间最新(非将来时间)的密钥作为有效密钥。Google 的边缘路由器会拒绝任何尝试使用旧密钥的新 MACsec 会话。

    2. 获取 MACsec 配置,然后记下 CAK 值和密钥的开始时间(与之前显示的 CKN 值相对应):

      gcloud compute interconnects macsec get-config INTERCONNECT_CONNECTION_NAME
      

      INTERCONNECT_CONNECTION_NAME 替换为您的 Cloud Interconnect 连接的名称。

      输出类似于以下内容;查找 ckn

      preSharedKeys:
      - name: key1
        ckn: 0101010189abcdef...0123456789abcdef
        cak: 0123456789abcdef...0123456789abcdef
        startTime: 2023-07-01T12:12:12Z
      - name: key2
        ckn: 0202020289abcdef...0123456789abcdef
        cak: 0123456789abcdef...0123456789abcdef
        startTime: 2023-08-01T12:12:12Z
      
    3. 验证本地路由器上的有效 CKN、CAK 和开始时间是否与 MACsec for Cloud Interconnect 显示的值匹配。执行下列其中一项操作:

      • 如果值不匹配,请参阅路由器的手册来更新路由器上的值,然后验证是否可以建立 MACsec 会话。

      • 如果值匹配,但 MACsec 会话仍然在链路上关闭,则继续执行下一步。

  4. 查看指标以确定数据包是否在 Cloud Interconnect 连接的入站流量或出站流量上丢弃。如需了解如何查看指标,请参阅监控连接

    如需确定后续步骤,请执行以下操作:

    • 如果 network/interconnect/link/macsec/received_errors_count 正在递增,则数据包因错误而在入站流量 Cloud Interconnect 连接上发生丢弃。这表示您的本地路由器和 Google 边缘路由器之间存在协议不匹配。检查本地路由器的日志以进行问题排查。

    • 如果以下任何计数器正在递增,请与 Google Cloud 支持团队联系以获取进一步帮助:

      • network/interconnect/link/macsec/received_dropped_packets_count
      • network/interconnect/link/macsec/send_errors_count
      • network/interconnect/link/macsec/send_dropped_packets_count
    • 如果以下计数器未递增,则表示数据包在本地路由器的出站流量上发生丢弃。检查本地路由器的日志以进行问题排查。

      • network/interconnect/receive_errors_count
      • network/interconnect/received_unicast_packets_count
      • network/interconnect/link/macsec/received_control_packets_count
      • network/interconnect/link/macsec/received_data_packets_count
      • network/interconnect/link/macsec/received_errors_count
      • network/interconnect/link/macsec/received_dropped_packets_count

MACsec 正在运行且丢失数据包

您已成功启用 MACsec for Cloud Interconnect,并且 MACsec 仍可正常运行,但会遇到数据包丢失的问题。

如果 MACsec 连接正常运行,但 Cloud Interconnect 的链路聚合控制协议 (LACP) 状态为 Detached,请验证是否已在本地路由器上启用安全信道标识符 (SCI)。如需了解详情,请参阅配置本地路由器

查看指标以确定数据包是否在 Cloud Interconnect 连接的入站流量或出站流量上丢弃。如需了解如何查看指标,请参阅监控连接。如果 Cloud Interconnect 连接未显示任何数据包错误或丢失,请继续检查 MACsec 路由器:

  • 如果 network/interconnect/link/macsec/received_errors_count 正在递增,则数据包因错误而在入站流量 Cloud Interconnect 连接上发生丢弃。这表示您的本地路由器和 Google 边缘路由器之间存在协议不匹配。检查本地路由器的日志以进行问题排查。

  • 如果以下任何计数器正在递增,请与 Google Cloud 支持团队联系以获取进一步帮助:

    • network/interconnect/link/macsec/received_dropped_packets_count
    • network/interconnect/link/macsec/send_errors_count
    • network/interconnect/link/macsec/send_dropped_packets_count
  • 如果以下计数器未递增,则表示数据包在本地路由器的出站流量上发生丢弃。检查本地路由器的日志以进行问题排查。

    • network/interconnect/receive_errors_count
    • network/interconnect/received_unicast_packets_count
    • network/interconnect/link/macsec/received_control_packets_count
    • network/interconnect/link/macsec/received_data_packets_count
    • network/interconnect/link/macsec/received_errors_count
    • network/interconnect/link/macsec/received_dropped_packets_count

排查启用应急开启行为时的 MACsec 问题

如果您启用具有应急开启行为的 MACsec for Cloud Interconnect,那么即使无法成功建立 MACsec 会话,Cloud Interconnect 连接也会继续转发流量。我们强烈建议您避免对生产 Cloud Interconnect 连接使用应急开启行为,以免以明文形式传输数据包。

如需确定配置并声明 MACsec 连接,请执行以下操作:

  1. 要验证 Cloud Interconnect 连接的状态,请选择以下选项之一:

    控制台

    1. 在 Google Cloud 控制台中,前往 Cloud Interconnect 物理连接标签页。

      转到物理连接

    2. 选择要查看的 Cloud Interconnect 连接。

    3. MACsec 标签页上,验证 MACsec 配置是否显示已启用,应急开启

    gcloud

    gcloud compute interconnects describe INTERCONNECT_CONNECTION_NAME
    

    INTERCONNECT_CONNECTION_NAME 替换为您的 Cloud Interconnect 连接的名称。

    输出类似于以下内容;查找设置为 truemacsec failOpen 和设置为 truemacsecEnabled

    availableFeatures:
    - IF_MACSEC
    adminEnabled: true
    circuitInfos:
    - customerDemarcId: fake-peer-demarc-0
      googleCircuitId: LOOP-0
      googleDemarcId: fake-local-demarc-0
    creationTimestamp: '2021-10-05T03:39:33.888-07:00'
    customerName: Fake Customer
    description: <something>
    googleReferenceId: '123456789'
    id: '12345678987654321'
    interconnectAttachments:
    - https://www.googleapis.com/compute/prod/projects/my-project1/regions/us-central1/interconnectAttachments/interconnect-123456-123456789-0
    interconnectType: IT_PRIVATE
    kind: compute#interconnect
    labelFingerprint: 42WmSpB8rSM=
    linkType: LINK_TYPE_ETHERNET_10G_LR
    location: https://www.googleapis.com/compute/prod/projects/my-project1/global/interconnectLocations/cbf-zone2-65012
    macsec:
      failOpen: true
      preSharedKeys:
      - name: key3
        startTime: '2023-07-01T21:00:01.000Z'
    macsecEnabled: true
    name: INTERCONNECT_CONNECTION_NAME
    operationalStatus: OS_ACTIVE
    provisionedLinkCount: 1
    requestedFeatures:
    - IF_MACSEC
    requestedLinkCount: 1
    selfLink: https://www.googleapis.com/compute/prod/projects/my-project1/global/interconnects/INTERCONNECT_CONNECTION_NAME
    selfLinkWithId: https://www.googleapis.com/compute/prod/projects/my-project1/global/interconnects/INTERCONNECT_CONNECTION_NAME/12345678987654321
    state: ACTIVE
    

    在此示例中,macsec.failopen 显示 truemacsecEnabled 显示 true

  2. 如需检查 Cloud Interconnect 连接的端口状态、MACsec 操作状态和有效密钥名称,请选择以下选项之一:

    控制台

    1. 在 Google Cloud 控制台中,前往 Cloud Interconnect 物理连接标签页。

      转到物理连接

    2. 选择要查看的 Cloud Interconnect 连接。

    3. 链路线路信息中,验证是否所有链路的链路状态都显示 活跃

    4. 验证 MACsec 密钥名称是否显示所有链路的密钥名称,以及每个密钥名称是否显示 此链路上的 MACsec 已开启此链路上的 MACsec 已关闭

    gcloud

    gcloud compute interconnects get-diagnostics INTERCONNECT_CONNECTION_NAME \
        --project=PROJECT_NAME
    

    PROJECT_NAME 替换为您的 Google Cloud 项目的名称。

    输出类似于以下内容;查找设置为 BUNDLE_OPERATIONAL_STATUS_UPbundleOperationalStatus,设置为 ACTIVEstate,以及设置为 falsemacsec ckn operational

      bundleAggregationType: BUNDLE_AGGREGATION_TYPE_LACP
      bundleOperationalStatus: BUNDLE_OPERATIONAL_STATUS_UP
      links:
      - circuitId: LOOP-0
        googleDemarc: fake-local-demarc-0
        lacpStatus:
          googleSystemId: '00:11:22:33:44:55'
          neighborSystemId: '55:44:33:22:11:00'
          state: ACTIVE
        macsec:
          ckn: 0101010189abcdef...0123456789abcdef
          operational: false
        operationalStatus: LINK_OPERATIONAL_STATUS_UP
        receivingOpticalPower:
          state: OK
          value: -2.49
        transmittingOpticalPower:
          state: OK
          value: -0.88
      macAddress: 00:11:22:33:44:55
    

    在此示例中:

    • bundleOperationalStatus: BUNDLE_OPERATIONAL_STATUS_UP 表示软件包已正常运行。
    • links.lacpStatus.state: ACTIVE 表示 LACP 成员链路已启动。
    • links.macsec.operational: false 表示 MACsec 已正常关闭。

    在这种情况下,由于启用了应急开启行为,因此不会丢弃 LACP 控制数据包。

    如果 links.macsec.ckn 未显示任何值,请与 Google Cloud 支持团队联系以获取帮助。

    gcloud compute interconnects get-diagnostics 命令显示有效密钥的 CKN 值。如果您配置了多个密钥,则系统会选择开始时间最新的密钥作为有效密钥。Google 的边缘路由器会拒绝任何尝试使用旧密钥的新 MACsec 会话。

  3. 如需获取 MACsec 配置,然后记下 CAK 值和之前显示的 CKN 值对应的密钥的开始时间,请选择以下选项之一:

    控制台

    1. MACsec 标签页上,前往预共享密钥部分,然后点击有效密钥旁边的查看。如果密钥的 CAK 和 CKN 值未显示,请与 Google Cloud 支持团队联系以获取帮助。

    2. 预共享密钥部分中,验证有效密钥列出的开始时间是否与本地路由器上的开始时间匹配。

    gcloud

    1. 运行以下命令:

      gcloud compute interconnects macsec get-config INTERCONNECT_CONNECTION_NAME
      

      输出类似于以下内容;查找 preSharedKeys name ckn

      preSharedKeys:
      - name: key1
        ckn: 0101010189abcdef...0123456789abcdef
        cak: 0123456789abcdef...0123456789abcdef
        startTime: 2023-07-01T12:12:12Z
      - name: key2
        ckn: 0202020289abcdef...0123456789abcdef
        cak: 0123456789abcdef...0123456789abcdef
        startTime: 2023-08-01T12:12:12Z
      
    2. 验证本地路由器上的有效 CKN、CAK 和开始时间是否与 MACsec for Cloud Interconnect 显示的值匹配。

    3. 执行下列其中一项操作:

      • 如果值不匹配,请参阅路由器的手册来更新路由器上的值,然后验证是否可以立即建立 MACsec。

      • 如果值匹配,但 MACsec 会话仍然在链路上关闭,则继续执行下一步。

  4. 查看指标以观察 Cloud Interconnect 连接的数据包计数器。如需详细了解如何查看指标,请参阅监控连接

    启用 MACsec 应急开启行为时,以下计数器会递增:

    • network/interconnect/sent_unicast_packets_count
    • network/interconnect/received_unicast_packets_count

    启用 MACsec 应急开启行为时,以下计数器不会递增:

    • network/interconnect/link/macsec/received_control_packets_count
    • network/interconnect/link/macsec/received_data_packets_count
    • network/interconnect/link/macsec/sent_control_packets_count
    • network/interconnect/link/macsec/sent_data_packets_count

    如需确定后续步骤,请执行以下操作:

    • 如果 network/interconnect/link/macsec/received_errors_count 正在递增,则数据包因错误而在入站流量 Cloud Interconnect 连接上发生丢弃。这表示您的本地路由器和 Google 边缘路由器之间存在协议不匹配。检查本地路由器的日志以进行问题排查。

    • 如果以下任何计数器正在递增,请与 Google Cloud 支持团队联系以获取进一步帮助:

      • network/interconnect/link/macsec/received_dropped_packets_count
      • network/interconnect/link/macsec/send_errors_count
      • network/interconnect/link/macsec/send_dropped_packets_count
    • 如果以下计数器未递增,则可能表示数据包在本地路由器的出站流量上发生丢弃。检查本地路由器的日志以进行问题排查。

      • network/interconnect/receive_errors_count
      • network/interconnect/received_unicast_packets_count
      • network/interconnect/link/macsec/received_errors_count
      • network/interconnect/link/macsec/received_dropped_packets_count

后续步骤