AWS EC2连接不稳定,如何逐层排查网络问题?

EC2偶尔无法连接、SSH突然断开或者网站时快时慢,不一定都是公网线路问题。安全组、网络ACL、路由表、实例网络额度、系统负载和负载均衡配置,都可能造成间歇性连接异常。

“服务器平时可以连接,但偶尔会突然断开。重试几次以后,又恢复正常了。”

相比完全无法连接,这类间歇性故障更难处理。

因为检查人员登录服务器时,服务可能已经恢复,监控曲线也没有明显异常。于是问题很容易被归结为“网络波动”,却没有找到真正原因。

排查AWS EC2连接不稳定,关键不是反复重启实例,而是先确定故障发生在哪一段链路。

一、先区分不同的连接现象

开始检查前,最好记录完整错误提示。

常见现象包括:

  • Connection timed out

  • Connection refused

  • Connection reset

  • SSH连接一段时间后断开

  • 网站能够打开,但响应速度不稳定

  • 部分用户正常,部分用户连接失败

  • 通过私网正常,通过公网不稳定

这些现象代表的问题方向不同。

连接超时通常表示请求没有顺利到达目标服务,可能与安全组、网络ACL、路由或公网线路有关。

连接被拒绝,往往说明请求已经到达实例,但目标端口没有服务监听,或者操作系统防火墙拒绝了连接。

连接建立后又被重置,则要继续检查应用程序、连接超时设置、负载均衡和服务器资源。

错误提示不同,排查起点也应该不同。

二、记录问题发生的范围和时间

间歇性故障最重要的证据,是准确的发生时间。

建议至少记录:

  • 故障开始和恢复时间

  • 客户所在地区和网络运营商

  • 访问的公网IP或域名

  • 使用的端口和协议

  • 是否经过负载均衡

  • 哪些用户正常,哪些用户异常

  • 同一时间实例监控是否出现变化

如果只有某个办公网络连接失败,问题可能出在客户出口、防火墙或互联网线路。

如果所有地区同时异常,应优先检查EC2实例、负载均衡、路由和AWS服务事件。

如果只有负载均衡后面的部分请求失败,则可能是某台后端实例或某个可用区出现异常。

三、先看EC2状态检查

进入EC2控制台,确认实例是否通过系统状态检查和实例状态检查。

系统状态检查主要反映底层宿主机、网络和电源等基础设施状况;实例状态检查则更接近操作系统内部的网络和启动状态。

如果状态检查曾经失败,应当查看对应时间段的事件记录,不要只看当前是否已经恢复。

同时查看CloudWatch中的以下指标:

  • CPU使用率

  • 网络流入和流出

  • 网络包数量

  • 实例状态检查

  • 磁盘读写情况

  • 突发型实例的CPU积分

需要注意,CPU正常并不代表网络一定正常。连接数、每秒数据包数量和实例网络额度达到限制时,也可能出现延迟或丢包。

四、确认实例是否具备正确的连接路径

如果通过互联网连接EC2,需要确认实例是否具备公网访问条件。

重点检查:

  • 实例是否关联公网IP或弹性IP。

  • 实例所在子网是否使用正确的路由表。

  • 路由表是否具有指向互联网网关的路由。

  • VPC是否已经关联互联网网关。

  • 当前连接地址是否仍然是实例最新的公网地址。

普通公网IP可能在实例停止并重新启动后发生变化。如果DNS记录或运维文档仍然保存旧地址,就会出现部分人员能够连接、部分人员连接到错误地址的情况。

如果实例位于私有子网,则不能简单依靠互联网网关直接连接。通常需要使用堡垒机、VPN、Direct Connect、Session Manager或其他私网接入方式。

五、安全组要检查来源和端口

安全组是EC2实例的重要访问控制层。

检查时不要只看“端口是否开放”,还要确认:

  • 规则是否绑定到正确的实例网卡。

  • 入站规则中的协议是否正确。

  • 目标端口是否与服务监听端口一致。

  • 来源IP是否包含当前客户的公网出口地址。

  • 实例是否关联了多个安全组。

  • 出站规则是否限制应用访问外部服务。

例如,SSH通常使用22端口,Windows远程桌面通常使用3389端口。如果业务修改了默认端口,安全组也要同步调整。

办公网络的公网出口IP发生变化后,原来只允许固定地址的安全组规则也可能失效。

不建议为了排障长期向所有来源开放SSH或远程桌面端口。更合适的方式是确认当前出口IP,只允许必要来源访问。

六、网络ACL容易漏掉返回流量

安全组和网络ACL经常被混为一谈,但两者工作方式不同。

安全组具有状态跟踪能力。已经允许进入的连接,其返回流量通常不需要再单独配置对应的入站规则。

网络ACL则是无状态的,需要分别允许请求和返回流量。

因此,网络ACL不仅要允许SSH、HTTPS等业务端口,还要考虑客户端使用的临时端口范围。如果只允许请求进入,却拦截了返回流量,连接可能超时或者表现不稳定。

还要注意:

  • 网络ACL按照规则编号匹配。

  • 较小编号的规则会优先处理。

  • 允许规则前面可能存在范围更大的拒绝规则。

  • 入站和出站需要分别检查。

AWS官方的EC2连接排障说明也建议同时检查安全组、网络ACL和路由表,并确认网络ACL允许返回使用的临时端口。AWS EC2连接问题排查

七、检查操作系统内部状态

如果AWS网络配置没有明显问题,就要继续检查实例内部。

重点关注:

  • SSH或远程桌面服务是否正常运行。

  • Nginx、Apache或业务程序是否出现重启。

  • 操作系统防火墙是否修改过规则。

  • CPU、内存和磁盘等待是否过高。

  • TCP连接数量是否异常增长。

  • 文件句柄或连接队列是否达到上限。

  • 系统日志中是否出现网卡、内核或内存错误。

有些实例在平时负载较低时表现正常,业务高峰到来后,连接队列或内存资源达到限制,就会开始拒绝新连接。

如果重启后短时间恢复,但运行一段时间又出现问题,更应该检查资源泄漏、连接未释放和应用进程状态,而不是把重启当成最终解决方案。

八、关注实例网络额度

不同EC2实例类型具有不同的网络性能和数据包处理能力。

如果流量持续增长,实例可能碰到带宽、每秒数据包数量或连接跟踪额度。此时,CloudWatch中看到的平均网络流量未必特别高,但用户仍可能遇到丢包、延迟或新连接建立失败。

AWS提供了ENA网络指标,可以辅助判断是否超过实例网络额度,例如:

  • 入方向或出方向带宽额度被超过

  • 每秒数据包额度被超过

  • 连接跟踪额度不足

  • 链路本地数据包处理额度被超过

部分较小实例的网络性能采用基线加突发模式。短时间测试可能正常,持续高流量后性能才开始下降。

AWS官方说明,实例超过网络额度时可能出现数据包排队、丢包、延迟升高和连接被迫关闭等现象。AWS EC2网络额度排障

九、使用负载均衡时检查所有后端

如果用户通过ALB或NLB访问EC2,不能只检查其中一台实例。

需要查看:

  • 目标组中是否有实例健康检查失败。

  • 不同可用区是否都有健康目标。

  • 健康检查端口和业务端口是否一致。

  • 应用是否能够正确响应健康检查路径。

  • 安全组是否允许负载均衡访问后端。

  • 连接空闲超时是否符合业务需要。

  • 实例下线时是否完成连接排空。

  • 某个可用区是否存在异常后端。

如果三台后端实例中有一台异常,用户的请求可能有时成功、有时失败。这种现象经常被误判为公网线路不稳定。

应该分别查看每台目标实例的健康状态和应用日志,而不是只看负载均衡的整体访问量。

十、比较不同网络的访问结果

如果AWS侧配置和实例资源都正常,可以从不同客户端进行对照测试。

例如:

  • 办公宽带

  • 家庭网络

  • 手机热点

  • 不同地区的测试节点

  • 同一区域内的另一台EC2实例

如果内网访问一直正常,只有某个地区的公网用户不稳定,问题更可能出现在公网链路或客户本地网络。

检查网络路径时,不要只看到中间某一跳丢包就下结论。部分路由设备会限制探测请求的响应,如果后续节点和最终目标没有持续丢包,中间节点的单独丢包不一定影响真实业务。

AWS建议同时关注最终目标是否丢包,以及异常是否持续到后续节点。AWS网络性能排障说明

十一、使用VPC Flow Logs查看流量结果

VPC Flow Logs可以记录经过网络接口的流量信息。

排查时可以根据故障时间、源地址、目标地址和端口,查看流量是被接受还是被拒绝。

如果记录显示请求被拒绝,应继续检查安全组、网络ACL和网络路径。

如果请求已经被接受,但应用仍然没有响应,则应把重点转向操作系统防火墙、服务监听和应用处理能力。

需要注意,Flow Logs适合判断流量是否经过和是否被拒绝,但它不能完全说明应用为什么响应缓慢。

十二、用Reachability Analyzer检查配置路径

VPC Reachability Analyzer可以分析源和目标之间的配置路径,帮助定位安全组、网络ACL、路由表或网关配置中的阻断点。

它比较适合检查:

  • 互联网网关到EC2的访问路径

  • 两台EC2之间的私网连接

  • 跨VPC连接

  • 负载均衡到后端实例的路径

  • VPC端点访问路径

但它分析的是网络配置模型,不是实时发送数据包,也不能代替延迟、丢包和应用性能测试。AWS Reachability Analyzer说明

推荐的排查顺序

遇到EC2连接不稳定,可以按照下面的顺序处理:

  1. 记录准确的故障时间和错误提示。

  2. 判断是单个用户异常还是所有用户异常。

  3. 检查EC2状态检查和CloudWatch监控。

  4. 确认公网IP、互联网网关和路由表。

  5. 检查安全组的来源、协议和端口。

  6. 检查网络ACL的入站、出站和临时端口。

  7. 查看操作系统防火墙和服务状态。

  8. 检查实例网络额度及连接数量。

  9. 使用负载均衡时逐台检查后端目标。

  10. 结合VPC Flow Logs和Reachability Analyzer定位网络层问题。

  11. 对比不同地区和不同运营商的访问结果。

每次只修改一个环节,并记录修改前后的测试结果。这样即使故障是间歇性的,也能逐步缩小范围。

结语

AWS EC2连接不稳定,可能发生在客户端、公网线路、VPC网络、实例操作系统或者应用程序中的任何一层。

可以把连接链路理解为:

客户端 → 公网或专线 → VPC路由 → 网络ACL → 安全组 → EC2系统 → 应用服务

先判断问题影响范围,再按照这条链路逐层检查,比直接重启实例或开放全部端口更容易找到真正原因。