我正在使用 NAT 实例将实例连接到 Amazon Virtual Private Cloud(Amazon VPC)子网中的互联网。但是,这些实例存在间歇性连接问题。
简短描述
间歇性连接问题可能与以下内容有关:
- 源端的端口耗尽
- 网络访问控制列表(网络 ACL)规则
- 网络问题
解决方法
减少源端的端口耗尽
验证私有子网中的实例是否已达到其操作系统级别连接限制。如需获取活动连接的数量,请运行 netstat 命令。
Linux:
netstat -ano | grep ESTABLISHED | wc --l
netstat -ano | grep TIME_WAIT | wc --l
Windows:
netstat -ano | find /i "estab" /c
netstat -ano | find /i "TIME_WAIT" /c
**注意:**如果您将 TCP 参数配置为在 TIME_WAIT 状态下重用端口,请从前面的命令中删除 TIME_WAIT。
如果该命令返回的值接近允许的本地端口范围(客户端连接的源端口),则可能会出现端口耗尽的情况。如需减少端口耗尽,请尝试下列其中一个解决方案。
运行下列命令来增加操作系统的临时端口范围:
对于 Windows,以管理员身份运行:
netsh int ipv4 set dynamicport tcp start=1025 num=61000
对于 Linux,以 root 用户身份运行:
$echo 1024 65535 > /proc/sys/net/ipv4/ip_local_port_range
**注意:**根据分配的类型,请在重启期间永久设置前面的参数。
-或者-
解决耗尽可用连接的任何应用程序级别问题。
验证网络 ACL 规则是否允许临时端口范围的流量
公有子网和私有子网的网络 ACL 必须允许临时端口范围(1024-65535)的流量。
例如,如需允许您的 Amazon Elastic Compute Cloud(Amazon EC2)实例访问 HTTPS 网站,与私有子网关联的网络 ACL 必须具有下列规则:
入站规则:
| | | |
---|
源 | 协议 | 端口范围 | 允许/拒绝 |
PUBLIC_IP | TCP | 1024-65535 | 允许 |
出站规则:
| | | |
---|
目标 | 协议 | 端口范围 | 允许/拒绝 |
PUBLIC_IP | TCP | 443 | 允许 |
与 NAT 实例子网关联的网络 ACL 必须具有下列规则:
入站规则:
| | | |
---|
源 | 协议 | 端口范围 | 允许/拒绝 |
VPC CIDR | TCP | 443 | 允许 |
PUBLIC_IP | TCP | 1024-65535 | 允许 |
出站规则:
| | | |
---|
目标 | 协议 | 端口范围 | 允许/拒绝 |
PUBLIC_IP | TCP | 443 | 允许 |
VPC CIDR | TCP | 1024-65535 | 允许 |
如果出现以下情况,则流量会中断:
- 网络 ACL 仅允许临时端口范围的子集。
- 私有子网或 NAT 实例中的实例使用临时端口范围之外的源端口。
检查是否存在网络问题
如果源、NAT、网络介质或目标的网络性能下降,则可能会遇到连接问题。要解决此问题,请参阅如何通过互联网网关解决 VPC 中的 Amazon EC2 Linux 实例与本地主机之间的网络性能问题?
当网络超过实例级别的最大值时,您也可能会遇到网络问题。对于支持的实例类型,您可以使用 Elastic Network Adaptor(ENA)中的网络性能指标来监控流量何时超过最大值。要了解详细信息,请参阅监控 EC2 实例的网络性能。
相关信息
临时端口