我有一个正在运行的 RDS 实例并且可以通过互联网访问。
我希望 VPC 内的实例能够从内部而不是通过互联网进行连接。
根据另一个问题(https://stackoverflow.com/questions/21089582/amazon-rds-endpoint-internal) 如果从 VPC 内部查询,主机连接字符串应映射到内部 IP。这不起作用,无论如何我都会获得外部 IP。
- 我只有一个 VPC,因此没有使用对等连接。
- 我确实设置了自定义 DHCP 选项,这可能是我的问题所在。
我的 VPC 的 DHCP 选项集是
domain-name = mysite.local;domain-name-servers = 10.10.51.254;
我感觉这就是它坏了的地方,因为我设置了自定义 DHCP 选项。mysite.local
是本地域,并且10.10.51.254
是本地绑定服务器(不使用 Route53)。
我是否需要在我的 DNS 服务器上配置某种正向查找us-east-1.rds.amazonaws.com
,或者我是否遗漏了某些配置?我认为这在 VPC 中应该是“自动”的,所以我想我错了。
答案1
所以这里的问题确实是我使用的是私有 DNS 服务器,而不是 Amazon 提供的 DNS。没有任何“来自 Amazon 的自动 VPC 魔法”可以帮助这些 AWS 服务进行域查找(我有点错误地认为是这样)
这里的秘密是,即使您不使用 Amazon 提供的 DNS,您也可以针对 VPC 的 DNS 服务器进行查找。
如果 VPC 已DNS resolution
设置DNS hostnames
为YES
然后您可以在位于 VPC CIDR 块基地址 +2 的 VPC DNS 服务器上进行查找(因此,如果您的 VPC 是,那么10.10.0.0/16
DNS 查找地址就是10.10.0.2
) - 我在查找这个时从一些随机博客文章中找到了这一点,不确定它是否在官方文档中,因为我通过亚马逊文档进行的所有 DNS 搜索都充斥着 Route 53 的内容。
现在我们已经有了可用的 DNS 正向查找,我们需要做的就是在绑定服务器中添加正向查找。这里的问题是,RDS 实例的主机名实际上是 CNAME 查找。
例如:
user@host:~$ nslookup mydb.cvxj3uli9kc.us-east-1.rds.amazonaws.com
Server: 10.10.51.254
Address: 10.10.51.254#53
Non-authoritative answer:
mydb.cvxj3uli9kc.us-east-1.rds.amazonaws.com canonical name = ec2-34-204-131-19.compute-1.amazonaws.com.
Name: ec2-34-204-141-206.compute-1.amazonaws.com
Address: 34.204.131.19
查找实际上是一个 CNAME 记录,compute-1.amazonaws.com
因此两者都需要转发规则。
总结:假设我的 VPC 的 CIDR 是10.10.0.0/16
,下面是解决我的问题并回答了这个问题的示例前向块:
zone "mydb.cvxj3uli9kc.us-east-1.rds.amazonaws.com" {
type forward;
forward only;
forwarders { 10.10.0.2; };
};
zone "compute-1.amazonaws.com" {
type forward;
forward only;
forwarders { 10.10.0.2; };
};
现在,本地 VPC 中的所有服务都可以查找 RDS 实例的私有 IP,并且公共解析在 VPC 外部仍然有效。