如何在 Amazon AWS 上的 VPC 内的公共子网中的 EC2 上启用传出 HTTP/HTTPS 请求

如何在 Amazon AWS 上的 VPC 内的公共子网中的 EC2 上启用传出 HTTP/HTTPS 请求

我使用 AWS 文档中的场景 2 设置了一个 VPC: http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Scenario2.html

我已为在公共子网中运行的 EC2 实例分配了弹性 IP。SSH 运行正常,我可以访问在其上运行的网站。但是,我无法发出传出 HTTP 或 HTTPS 请求(我在尝试运行时注意到了这一点yum update)。

我相信我的所有安全设置都是正确的。我是否无法通过互联网网关发出传出 HTTP/HTTPS 请求?我特别要求在创建时不要为该实例分配公共 IP,因为我知道我将为网站 DNS 分配一个与之匹配的弹性 IP。我在私有子网中为实例设置了 NAT,但我目前只在那里运行 RDS 实例,所以我没有测试从那里发出的传出请求。

该 EC2 实例的安全组具有以下出站规则: 在此处输入图片描述

该子网的路由表具有以下设置: 在此处输入图片描述

网络 ACL 具有以下设置: 在此处输入图片描述

默认 DHCP 选项集具有以下设置:

domain-name = ec2.internal
domain-name-servers = AmazonProvidedDNS

默认/etc/resolv.conf设置为:

search ec2.internal
nameserver 10.0.0.2

VPC 和子网的 CIDR 块如下:

VPC: 10.0.0.0/16
Public Subnet: 10.0.0.0/24
Private DB Subnet in US East 1A: 10.0.1.0/24
Private DB Subnet in US East 1C: 10.0.2.0/24

答案1

仍有疑问

为什么在这种情况下提供的 AWS DNS 服务器不起作用?

问题

问题是 DNS 名称无法通过本地 DNS 服务器,而不是 Amazon 在最初创建 VPC 时提供的服务器。我发现我可以与 IP 地址建立传出 HTTP/HTTPS 连接,而不需要联系 DNS 服务器来解析。

解决方案

我必须在 Amazon VPC AWS 控制台内创建自定义 DHCP 选项集,并将 Google 的公共 DNS IP 设置为domain-name-servers = 8.8.8.8, 8.8.4.4

然后我必须更新/etc/resolv.conf设置相同的内容: nameserver 8.8.8.8 nameserver 8.8.4.4

相关内容