如何诊断和解决常见的 EC2 实例连接问题

本综合指南可帮助您排查和解决常见的 Amazon EC2 实例网络连接问题。了解如何通过检查安全组 (Security Groups)、网络 ACL (NACLs)、路由表 (Route Tables)、Internet 网关 (Internet Gateways)、NAT 网关 (NAT Gateways) 和 VPC 对等 (VPC peering) 来分步诊断问题。包含实用示例和最佳实践,以确保您的 EC2 实例始终可访问并有效通信。

如何诊断和解决常见的EC2实例连接问题

EC2连接问题通常归结于一个被阻塞的跳点:实例、安全组、子网规则、路由表或网关路径。如果您无法SSH到EC2实例、无法访问应用程序端口,或无法从一个实例连接到另一个实例,请按顺序检查网络路径,而不是随机更改规则。

以下检查步骤可帮助您隔离流量停止的位置,并应用最小的修复措施来恢复访问。

EC2连接问题的常见原因

连接问题可能源于AWS网络堆栈的各个层面。确定根本原因通常需要检查以下元素的组合:

  • 安全组: 这些是附加到弹性网络接口的有状态虚拟防火墙。它们在实例级别控制入站和出站流量。
  • 网络访问控制列表(NACL): NACL在子网级别运行,为进出子网的流量提供额外的无状态过滤层。
  • 路由表: 这些决定子网流量的去向,例如VPC内部、互联网网关、NAT网关或传输网关。
  • 实例状态和网络配置: EC2实例本身的问题,例如实例已停止或网络接口设置不正确。
  • 互联网网关(IGW)/ NAT网关: 对于需要互联网访问的实例,IGW(用于公有子网)或NAT网关(用于私有子网)的配置至关重要。
  • VPC对等连接 / 传输网关: 如果在VPC之间进行连接,这些VPC间连接服务需要正确配置。

逐步诊断和解决

从症状开始,然后跟踪数据包路径。

1. 验证实例状态和基本网络可达性

在深入复杂的网络配置之前,确保实例本身处于健康状态并具有基本网络配置:

  • 实例状态检查: 在EC2控制台中,选择实例并检查“状态检查”选项卡。系统和实例检查都应通过。
  • 公有和私有IP: 确认实例具有您期望的地址。公有子网中的实例仍然需要公有IPv4地址或弹性IP才能通过IPv4直接访问互联网。
  • 操作系统监听器: 如果网络路径已打开但端口仍然失败,请确认服务正在实例上监听。例如,除非您更改了守护进程配置,否则SSH应监听TCP 22端口。
  • DNS解析: 如果通过IP连接成功但主机名查找失败,请检查VPC DNS设置、自定义解析器和Linux上的/etc/resolv.conf

2. 检查安全组

安全组是控制进出EC2实例流量的有状态防火墙。它们是连接问题的常见来源。

2.1. 入站规则

如果您无法连接到实例,例如Linux上的SSH或Windows上的RDP:

  • 检查附加到EC2实例的安全组。
  • 验证入站规则: 允许从您的源IP或受信任的CIDR访问所需的TCP端口。对于管理访问,建议使用您的当前公有IP作为<your_ip>/32,而不是0.0.0.0/0
  • 示例: 允许从您的IP地址进行SSH访问:
    类型:SSH
    协议:TCP
    端口范围:22
    源:<your_ip>/32
    

2.2. 出站规则

如果您的实例无法访问外部资源(例如,下载软件包、连接到其他AWS服务):

  • 检查附加到EC2实例的安全组。
  • 验证出站规则: 默认情况下,安全组允许所有出站流量。如果已创建自定义出站规则,请确保它们允许到目标端口和IP的必要流量。
  • 示例: 允许所有出站流量:
    类型:所有流量
    协议:所有
    端口范围:所有
    目标:0.0.0.0/0
    

3. 调查网络访问控制列表(NACL)

NACL是在子网级别运行的无状态防火墙。它们在流量到达安全组或实例之前进行过滤。

  • 识别与实例子网关联的NACL。
  • 检查入站规则: NACL按规则编号顺序评估。确保存在一条入站规则,允许从源IP访问所需端口。
  • 检查出站规则: 同样,验证出站规则允许流量到达目标。
  • 无状态特性: NACL不记住已建立的连接。您需要为流量的两个方向设置入站和出站规则。对于从您的笔记本电脑进行的SSH连接,子网NACL通常需要从您的IP入站TCP 22,以及出站到您的IP的临时端口用于返回流量。临时端口范围因操作系统和客户端而异,因此请使用适合您环境的范围。
  • 规则编号: 较低的规则编号优先评估。谨慎使用显式拒绝规则(例如,规则100拒绝特定流量)和允许规则(例如,规则200允许更广泛的流量)。

4. 审查路由表

路由表决定网络流量从子网发送的方向。不正确的路由可能会阻止流量到达其目标。

  • 找到与实例子网关联的路由表。
  • 检查默认路由: 对于公有子网中的实例访问互联网,必须有一条指向互联网网关(IGW)的0.0.0.0/0路由。
    目标 | 目标
    ----------------|--------
    10.0.0.0/16     | local
    0.0.0.0/0       | igw-xxxxxxxxxxxxxxxxx
    
  • 私有子网和NAT网关: 对于私有子网中的实例发起出站互联网连接,该子网的路由表需要一条指向NAT网关或NAT实例的0.0.0.0/0路由。
    目标 | 目标
    ----------------|--------
    10.0.0.0/16     | local
    0.0.0.0/0       | nat-xxxxxxxxxxxxxxxxx
    
  • VPC对等连接、传输网关或VPN: 如果您的实例需要与另一个VPC或本地网络通信,请在需要路由的两侧添加指向正确目标的远程CIDR块路由。

5. 排查互联网网关(IGW)和NAT网关连接问题

互联网网关

*   确保IGW已创建并附加到您的VPC。
*   验证公有子网的路由表有一条指向IGW的`0.0.0.0/0`路由。
*   确认您的实例已分配公有IP地址或弹性IP地址。
*   安全组和NACL规则必须允许所需的入站和出站流量。除非有明确理由和补偿控制措施,否则不要将敏感端口开放给整个互联网。

NAT网关

*   确保NAT网关已创建并位于公有子网中。
*   验证NAT网关已关联弹性IP地址。
*   确认私有子网的路由表有一条指向NAT网关的`0.0.0.0/0`路由。
*   私有和公有子网上的NACL规则必须允许出站连接和返回流量。NAT网关不使用安全组。

6. VPC对等连接和传输网关

如果您在VPC之间遇到连接问题:

  • VPC对等连接:
    • 确保对等连接处于活动状态并被两个VPC接受。
    • 验证两个VPC中的路由表都已添加路由,以允许流量到达对等VPC的CIDR块。
    • 确保两个VPC中的安全组和NACL允许必要IP范围之间的流量。
  • 传输网关:
    • 确认传输网关已创建,并且相关VPC已附加到它。
    • 检查传输网关路由表,确保它们正确地在VPC附件之间路由流量。
    • 验证每个VPC内的路由表也有指向传输网关的路由,用于发往其他VPC的流量。
    • 每个VPC内的安全组和NACL必须允许跨VPC流量。

7. 使用AWS网络可达性工具

AWS提供了帮助诊断网络问题的工具:

  • VPC可达性分析器: 此工具分析受支持的源和目标资源之间的可达性。它可以识别由安全组、NACL、路由表、网关和相关网络配置导致的路径故障。
  • VPC流日志: 虽然不能直接诊断连接故障,但VPC流日志捕获进出VPC中网络接口的IP流量信息。分析这些日志可以揭示被阻止或意外流量的模式,帮助您识别安全组或NACL中的错误配置。

8. 其他潜在问题

  • 弹性网络接口(ENI): 确保ENI已附加到实例并正确配置。
  • 子网的路由表关联: 验证子网是否正确关联到其预期的路由表。
  • DNS配置: 如果使用自定义DNS,请确保其解析正确。对于默认VPC DNS,请检查是否为您的VPC启用了DNS解析。
  • 代理服务器: 如果您的实例配置为使用代理,请确保代理本身可访问且配置正确。

预防连接问题的最佳实践

  • 最小权限: 使用最小必要权限配置安全组和NACL。除非绝对必要且通过其他方式保护,否则避免对敏感端口使用0.0.0.0/0
  • 标记: 一致地标记您的网络资源(VPC、子网、安全组、路由表),以便轻松识别其用途和关联的实例。
  • 文档: 维护清晰的网络拓扑、IP寻址方案和安全规则文档。
  • 定期审计: 定期审查您的安全组和NACL规则,确保它们仍然相关且安全。
  • 利用AWS工具: 熟悉VPC可达性分析器和VPC流日志,用于主动监控和故障排除。

要点

当EC2连接中断时,按顺序追踪路径:实例健康、监听器、安全组、NACL、路由表、网关和远程侧规则。一次更改一个层,然后再次测试。这样可以使您的修复范围缩小,并使下一次中断更容易诊断。