我创建了一个 NAT 网关,用于从我的 Amazon Elastic Compute Cloud(Amazon EC2)实例访问互联网。我的实例使用私有子网中的 HTTP 或 HTTPS 端口,但无法访问互联网。
解决方法
验证实例是否满足以下条件:
1. 使用公有 IP 地址从其他源对目标执行 ping 操作,即可访问目标。
2. NAT 网关处于可用状态。如果 NAT 网关处于失败状态,请参阅 NAT gateway creation fails。
注意:处于失败状态的 NAT 网关会在大约一小时后被自动删除。
3. 您在公有子网中创建了 NAT 网关,并且公有路由表具有指向互联网网关的默认路由。
4. 私有子网的路由表具有指向 NAT 网关的默认路由。
**重要信息:**确保未对私有子网和公有子网使用相同的路由表。使用同一个路由表意味着流量不会路由到互联网。
5. 在 VPC 中,enableDnsSupport 属性设置为 true。有关更多信息,请参阅 View and update DNS attributes for your VPC。
**注意:**启用 DNS 可防止 DNS 解析失败。
6. 防火墙不会阻止通过端口 80(用于 HTTP 流量)和 443(用于 HTTPS 流量)的流量。务必检查目标主机上是否存在阻止流量的防火墙。您可以使用以下示例命令来检查防火墙:
$ telnet PUBLIC_IP TCP_PORT
7. 附加到实例的弹性网络接口的安全组允许流向端口 80 和 443 的出站流量。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 安全组或适用于 Windows 实例的 Amazon EC2 安全组。
8. 以下示例包含的规则允许使用目标 IP 地址 0.0.0.0/0 在端口 80 和 443 上进行入站和出站流量:
- 与实例所在私有子网关联的网络访问控制列表(ACL)。
- 与 NAT 网关所在的公有子网关联的网络 ACL。
要允许您的 Amazon EC2 实例访问 HTTPS 网站,与 NAT 网关子网关联的网络 ACL 必须具有以下规则:
入站规则
| | | |
---|
源 | 协议 | 端口范围 | 允许/拒绝 |
VPC CIDR | TCP | 443 | 允许 |
PUBLIC_IP | TCP | 1024-65535 | 允许 |
出站规则
| | | |
---|
目标 | 协议 | 端口范围 | 允许/拒绝 |
PUBLIC_IP | TCP | 443 | 允许 |
VPC CIDR | TCP | 1024-65535 | 允许 |
有关配置网络 ACL 的更多信息,请参阅 Work with network ACLs。
相关信息
NAT gateways
Configure route tables