为什么我无法从 Internet 连接至 Amazon VPC 内的 Amazon EC2 实例?
上次更新时间:2019 年 2 月 11 日
我无法从 Internet 连接至 Amazon Virtual Private Cloud (Amazon VPC) 内的 Amazon Elastic Compute Cloud (Amazon EC2) 实例。如何修复此问题?
简短描述
连接到 Amazon VPC 中 Amazon EC2 实例的问题通常与安全组、网络访问控制列表 (ACL) 或路由表的配置相关。
解决方法
开始之前,确保 Amazon EC2 实例通过系统状态检查和实例状态检查。
检查安全组
确保与实例的弹性网络接口关联的安全组允许从所需端口连接。
重要提示:在生产环境中,只允许特定 IP 地址或地址范围访问您的实例。出于测试目的,您可以指定自定义 IP 地址 0.0.0.0/0,允许所有 IP 地址使用 SSH 或 RDP 来访问实例。
注意:您不需要配置安全组传出规则,因为安全组是有状态的。
检查网络 ACL
在网络 ACL 中检查以下事项:
- 确保与 VPC 子网关联的网络 ACL 允许流量流经所需端口。
注意:有关更多信息,请参阅您的 VPC 的推荐网络 ACL 规则和添加和删除规则。 - 确保同时允许入站和出站流量。
注意:网络 ACL 没有任何状态。对允许入站数据流的响应会随着出站数据流规则的变化而改变,但对允许出站数据流的响应会随着入站数据流规则的变化而改变。 - 确保只打开出站 ACL 中的临时端口。
注意:最好只允许您需要的端口。
重要提示:如果您仍然不确定是什么阻止流量访问您的实例,请考虑启用 VPC 流日志。流日志会捕获流经您的 VPC 的 IP 地址流量。如果您在流日志中看到被拒绝流量,请确保再次检查安全组和网络 ACL 设置。
检查路由表
要检查 Internet 网关是否已连接到 VPC,请完成以下步骤:
- 登录 Amazon VPC 控制台。
- 在导航窗格的 Virtual Private Cloud 部分中,选择 Internet 网关。
- 在搜索框中,搜索已连接到您的 VPC 的 Internet 网关。您也可以使用页面上的搜索栏来搜索连接的 VPC ID(例如,vpc-xxxxxxxx)。
- 记下 Internet 网关的 ID(例如,igw-xxxxxxxx)。
如果 Internet 网关已连接到 VPC,请完成以下步骤:
- 检查 VPC 的路由表是否具有指向 Internet 网关的路由。查找其目标为已连接到 VPC 的 Internet 网关的 ID(例如,igw-xxxxxxxx)的路由条目,以及其目的地为 0.0.0.0/0 的路由条目。
- 如果路由不存在,请添加具有 Internet 网关的路由条目作为目标,及添加 0.0.0.0/0 作为目的地。
- 确保子网路由表也具有指向 Internet 网关的路由条目。如果此条目不存在,则实例在私有子网中,且无法从 Internet 访问。
注意:确保操作系统级 (OS-level) 路由表允许来自 Internet 的流量。使用命令 route -n(Linux 实例)或 netstat -rn(Linux 或 Windows 实例),具体取决于您的配置。
检查 IP 地址
- 检查是否向 VPC 实例分配了公有 IP 地址,或者已将弹性 IP 地址连接到实例的网络接口。如果未向实例的网络接口分配公有 IP 地址或弹性 IP 地址,则请分配一个地址。
注意:有关更多信息,请参阅使用 IP 地址和使用弹性 IP 地址。 - 确保实例上的操作系统级别的软件或防火墙允许流量通过所需端口。