

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 排除与 Cisco ASA 客户网关设备的 AWS Site-to-Site VPN 连接故障
<a name="Cisco_ASA_Troubleshooting"></a>

对 Cisco 客户网关设备的连接进行故障排除时，请考虑 IKE IPsec、和路由。您可以按任何次序对这些方面进行故障排除，不过建议您从 IKE 开始（位于网络堆栈的底部）并依次向上排除。

**重要**  
某些 Cisco ASAs 仅支持 Active/Standby 模式。使用这些 Cisco 时 ASAs，一次只能有一个活动隧道。仅在第一个隧道不可用的情况下，其他备用隧道才可用。备用隧道可能在您的日志文件中生成以下错误，您可以忽略该错误：`Rejecting IPSec tunnel: no matching crypto map entry for remote proxy 0.0.0.0/0.0.0.0/0/0 local proxy 0.0.0.0/0.0.0.0/0/0 on interface outside`。

## IKE
<a name="ASA_IKE"></a>

使用以下命令。响应显示带正确配置的 IKE 的客户网关设备。

```
ciscoasa# show crypto isakmp sa
```

```
   Active SA: 2
   Rekey SA: 0 (A tunnel will report 1 Active and 1 Rekey SA during rekey)
Total IKE SA: 2

1   IKE Peer: {{AWS_ENDPOINT_1}}
    Type    : L2L             Role    : initiator
    Rekey   : no              State   : MM_ACTIVE
```

您应该可以看到包含隧道中所指定远程网关的 `src` 值的一行或多行。`state` 值应为 `MM_ACTIVE`，`status` 应为 `ACTIVE`。任何项的缺乏或任何项处于其他状态均表示 IKE 未正确配置。

如需进一步排除故障，请运行下面的命令以启用可提供诊断信息的日志消息。

```
router# term mon
router# debug crypto isakmp
```

要禁用调试，请使用下面的命令。

```
router# no debug crypto isakmp
```

## IPsec
<a name="ASA_IPsec"></a>

使用以下命令。响应显示 IPsec配置正确的客户网关设备。

```
ciscoasa# show crypto ipsec sa
```

```
interface: outside
    Crypto map tag: VPN_crypto_map_name, seq num: 2, local addr: 172.25.50.101

      access-list integ-ppe-loopback extended permit ip any {{vpc_subnet}} {{subnet_mask}}
      local ident (addr/mask/prot/port): (0.0.0.0/0.0.0.0/0/0)
      remote ident (addr/mask/prot/port): ({{vpc_subnet}}/{{subnet_mask}}/0/0)
      current_peer: integ-ppe1

      #pkts encaps: 0, #pkts encrypt: 0, #pkts digest: 0
      #pkts decaps: 0, #pkts decrypt: 0, #pkts verify: 0
      #pkts compressed: 0, #pkts decompressed: 0
      #pkts not compressed: 0, #pkts comp failed: 0, #pkts decomp failed: 0
      #pre-frag successes: 0, #pre-frag failures: 0, #fragments created: 0
      #PMTUs sent: 0, #PMTUs rcvd: 0, #decapsulated frgs needing reassembly: 0
      #send errors: 0, #recv errors: 0

      local crypto endpt.: 172.25.50.101, remote crypto endpt.: {{AWS_ENDPOINT_1}}

      path mtu 1500, ipsec overhead 74, media mtu 1500
      current outbound spi: 6D9F8D3B
      current inbound spi : 48B456A6

    inbound esp sas:
      spi: 0x48B456A6 (1219778214)
         transform: esp-aes esp-sha-hmac no compression
         in use settings ={L2L, Tunnel, PFS Group 2, }
         slot: 0, conn_id: 4710400, crypto-map: VPN_cry_map_1
         sa timing: remaining key lifetime (kB/sec): (4374000/3593)
         IV size: 16 bytes
         replay detection support: Y
         Anti replay bitmap:
          0x00000000 0x00000001
    outbound esp sas:
      spi: 0x6D9F8D3B (1839172923)
         transform: esp-aes esp-sha-hmac no compression
         in use settings ={L2L, Tunnel, PFS Group 2, }
         slot: 0, conn_id: 4710400, crypto-map: VPN_cry_map_1
         sa timing: remaining key lifetime (kB/sec): (4374000/3593)
         IV size: 16 bytes
         replay detection support: Y
         Anti replay bitmap:
         0x00000000 0x00000001
```

对于每个隧道接口，您应该可以看到 `inbound esp sas` 和 `outbound esp sas`。这假设已列出一个 SA（例如`spi: 0x48B456A6`），并且配置 IPsec 正确。

在 Cisco ASA 中， IPsec 只有在发送相关流量（应加密的流量）之后才会出现。为了始终保持 IPsec 活动状态，我们建议配置 SLA 监视器。SLA 监控器继续发送感兴趣的流量，使流量保持 IPsec活动状态。

你也可以使用以下 ping 命令强制你 IPsec 开始协商并继续协商。

```
ping {{ec2_instance_ip_address}}
```

```
Pinging {{ec2_instance_ip_address}} with 32 bytes of data:

Reply from {{ec2_instance_ip_address}}: bytes=32 time<1ms TTL=128
Reply from {{ec2_instance_ip_address}}: bytes=32 time<1ms TTL=128
Reply from {{ec2_instance_ip_address}}: bytes=32 time<1ms TTL=128

Ping statistics for 10.0.0.4:
Packets: Sent = 3, Received = 3, Lost = 0 (0% loss),

Approximate round trip times in milliseconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
```

如需进一步排除故障，请使用下面的命令启用调试。

```
router# debug crypto ipsec
```

要禁用调试，请使用下面的命令。

```
router# no debug crypto ipsec
```

## 路由
<a name="ASA_Tunnel"></a>

向隧道的另一端发出 ping。如果这行得通，那么你 IPsec 应该被确定下来。如果这不起作用，请检查您的访问列表，并参考上一 IPsec 节。

如果您无法访问实例，请核查以下信息。

1. 验证是否已将访问列表配置为允许与保密图关联的流量。

   您可以使用下面的命令进行这项操作。

   ```
   ciscoasa# show run crypto
   ```

   ```
   crypto ipsec transform-set transform-amzn esp-aes esp-sha-hmac
   crypto map VPN_crypto_map_name 1 match address access-list-name
   crypto map VPN_crypto_map_name 1 set pfs
   crypto map VPN_crypto_map_name 1 set peer {{AWS_ENDPOINT_1}} {{AWS_ENDPOINT_2}}
   crypto map VPN_crypto_map_name 1 set transform-set transform-amzn
   crypto map VPN_crypto_map_name 1 set security-association lifetime seconds 3600
   ```

1. 使用以下命令检查访问列表。

   ```
   ciscoasa# show run access-list access-list-name
   ```

   ```
   access-list access-list-name extended permit ip any {{vpc_subnet}} {{subnet_mask}}
   ```

1. 验证访问列表是否正确。以下示例访问列表允许所有流向 VPC 子网 10.0.0.0/16 的内部流量。

   ```
   access-list access-list-name extended permit ip any 10.0.0.0 255.255.0.0
   ```

1. 从 Cisco ASA 设备运行 traceroute，看看它是否到达了 Amazon 路由器（例如，{{AWS\_ENDPOINT\_1}}/）。{{AWS\_ENDPOINT\_2}}

   如果能访问 Amazon 路由器，则检查您在 Amazon VPC 控制台中添加的静态路由，同时检查特定实例的安全组。

1. 如需进一步排查问题，请核查配置。

## 反弹隧道接口
<a name="ASA_Tunnel-bounce"></a>

如果隧道显示正常但流量未正常传输，则反弹（禁用和重新启用）隧道接口通常可以解决连接问题。要反弹 Cisco ASA 上的隧道接口，请执行以下操作：

1. 运行以下命令：

   ```
   ciscoasa# conf t
   ciscoasa(config)# interface tunnel X  (where X is your tunnel ID)
   ciscoasa(config-if)# shutdown
   ciscoasa(config-if)# no shutdown
   ciscoasa(config-if)# end
   ```

   或者，您可以使用一行命令：

   ```
   ciscoasa# conf t ; interface tunnel X ; shutdown ; no shutdown ; end
   ```

1. 反弹接口后，检查 VPN 连接是否已重新建立，以及流量是否已正常传输。