我使用 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