请注意,这个问题不同于这个他们使用的是标准 AMI,而不是 NAT AMI(就我而言)。此外,就我而言,私有实例可以通过 ipaddress 访问互联网,但不能通过主机名解析访问互联网。
这是我的设置:
- 具有 1 个公共子网和 1 个私有子网的非默认 VPC。
- 具有弹性 IP 的公共子网上的 NAT 实例。使用的 Amazon Community NAT AMI:amzn-ami-vpc-nat-hvm-2017.09.1.20180108-x86_64-ebs ami-d4a883b1。Amazon Linux AMI 2017.09.1.20180108 x86_64 VPC NAT HVM EBS
- 安全组按照NAT 安全组文档附加到上面的 NAT 实例
- 私有实例(在私有子网上)只要使用 IP 地址,就可以通过 NAT 实例访问互联网。例如:
curl http://74.125.135.99/
有效但curl http://www.google.com
无效
私有实例:
$cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1
search us-east-2.compute.internal
$ curl http://74.125.135.99/
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>
$ curl http://www.google.com/
curl: (6) Could not resolve host: www.google.com
NAT 实例:
$ cat /etc/resolv.conf
; generated by /sbin/dhclient-script
search us-east-2.compute.internal
options timeout:2 attempts:5
nameserver 10.0.0.2
更新:我的 VPC 上的 DNS 设置如下:
DNS resolution: yes
DNS hostnames: yes
答案1
VPC 中的 DNS 解析不依赖于 NAT 设备(无论是 NAT 实例还是 NAT 网关),并且由于其实施方式,通过网络配置错误来破坏 DNS 是非常困难的(甚至是不可能的),因为流量不需要通过安全组和网络 ACL 来允许。
如果它不工作,则表明它没有打开。
确保enableDnsSupport
设置为true
。
https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-dns.html#vpc-dns-support
您可能希望enableDnsHostnames
在那里激活。它不会将您的实例“公开”,尽管文档描述暗示它会这样做。
很少会出现不启用这两个选项的情况。