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

T. *_*nes 7 http https subnet amazon-web-services amazon-vpc

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

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

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

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

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

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

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

domain-name = ec2.internal
domain-name-servers = AmazonProvidedDNS
Run Code Online (Sandbox Code Playgroud)

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

search ec2.internal
nameserver 10.0.0.2
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

T. *_*nes 7

还在想

为什么提供的 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