在 AWS 上更改私有 DNS?

在 AWS 上更改私有 DNS?

有没有办法更改 EC2 服务器的私有 DNS?

我希望能够使用类似 myserver.example.com 而不是 ip-1.1.1.1-uswest-aws-internal 之类的地址在我的服务器之间进行通信。我是系统管理员和网络方面的新手。我尝试在 VPC 中使用 DHCP 选项集,但无法使其正常工作。

编辑#1

为了阐明我想要实现的目标...我正在设置 Jenkins,它将在众多服务器上运行从属服务器。我希望能够使用自己分配的地址而不是任意地址,因此更有意义的是,这取决于作业在哪台机器上运行。

我也确信它在未来也会使其他服务器间的通信变得更加容易。就像我说的,我是系统管理员新手,所以如果我没有找到更简单的方法,请告诉我。

答案1

如果您想通过 my-dns-name 访问您的服务器,您需要设置您自己的 DNS 服务器。

默认情况下,AWS VPC 为您处理 DHCP 并配备 Amazon 的 DNS 服务器。

您可以在此处阅读有关提供您自己的 DNS 服务器的选项: http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_DHCP_Options.html

DHCP 选项名称:域名服务器

最多四个域名服务器的 IP 地址,或 AmazonProvidedDNS。默认 DHCP 选项集指定 AmazonProvidedDNS。

DHCP 选项名称:域名

如果您在美国东部(弗吉尼亚北部)区域使用 AmazonProvidedDNS,请指定 compute-1.amazonaws.com。如果您在其他区域使用 AmazonProvidedDNS,请指定 region.compute.amazonaws.com。否则,请指定域名(例如 MyCompany.com)。

其他相关说明:

如果您想使用 FQDN(myserver.example.com)进行通信,您无需使用自己的 DNS 服务器即可进行通信,因为您的域名已经可以公开访问。

您可以使用“私有”或“公共”IP 地址进行通信,您可以在操作系统级别更改私有 IP,在操作系统级别更改主机名,并利用 /etc/hosts 来获得一种穷人的 DNS。

您可能总是想研究 ElasticIPs、弹性网络接口和弹性负载均衡器,它们都与您的问题在同一个空间中发挥作用。

这完全取决于您想要实现什么以及您想如何实现它!

答案2

除非你部署自己的名称服务器,否则你无法更改它,但你可以轻松地参考通过创建记录将其替换为另一个名称,CNAME这将产生预期的效果。

在您的“example.com”DNS 区域中,无论它是在 Route 53 中,还是由其他 DNS 托管提供商托管,您都应该能够创建CNAME记录:

myserver IN CNAME ip-1.1.1.1-uswest-aws-internal.

当一台机器尝试解析“myserver.example.com”时,它实际上会被“example.com”DNS 服务器告知,它应该查找“真正的”内部主机名(“C匿名的姓名“)。如果机器位于您的 EC2 部署内部,它将要求 EC2 DNS 解析器查找它,然后 EC2 解析器将依次返回内部 IP 地址...导致您想要的行为——您可以通过所需的主机名访问您的内部机器。

如果 EC2 部署之外的系统查找此主机名,则它将失败,这是正确的行为,因为该机器无法从外部访问(如果它只有私有 IP)。

相反,如果你有一台具有公共 IP 和相应公共主机名的机器,那么ec2-x-x-x-x.us-west-2.compute.amazonaws.com使用该主机名作为CNAME目标也会执行相同的操作。当从内部查询时你的EC2 部署,结果将是通过 EC2 透明执行的一些 DNS 魔法获得的内部 IP 地址……或者从外部返回外部公共 IP 地址。

https://stackoverflow.com/a/19148569/1695906

澄清:

DNS 服务器行为有两种——“权威”服务器将响应任何主机对其所具有权威的任何资源记录的请求……以及递归“解析器”,它们代表其授权的客户端查询全球 DNS。DNS 服务器也可以同时执行这两种功能。

您的 EC2 实例(默认情况下)使用 AWS 解析器服务器来查找您的实例尝试访问的任何主机名(内部或外部),并返回 IP 地址...但 AWS 解析器对于“.internal”伪域也具有权威性,因此当实例尝试查找“.internal”主机时,将返回正确的内部 IP。

现在,假设您将内部主机名配置为外部“example.com”DNS 服务器中的 CNAME 目标,然后尝试在内部查找“myserver.example.com”... AWS 解析器将咨询全局 DNS 层次结构,并最终向权威名称服务器之一询问“myserver.example.com”。响应基本上会说“我所知道的是,要找到 myserver.example.com,您应该查找 ip-1.1.1.1-uswest-aws-internal”... AWS 解析器意识到它不需要咨询外部实体来回答这个新问题,因为它对虚假的内部域具有权威性,只需用它已经知道的正确答案进行响应即可。

外部“example.com”不需要或尝试验证 CNAME 目标,因为这不是它的工作。

现在,如果 CNAME 引用外部主机名,则过程相同且结果相同,因为 AWS 解析器(处理内部机器发出的所有 DNS 查询)不会尝试从对“compute.amazonaws.com”域具有权威性的 DNS 服务器实际查找真实且正确的 IP 地址...相反,由于其设计,它再次相信它已经知道您的外部主机名的 IP 地址...但答案再次是您的内部私有 IP 地址。

我上面提到的 AWS 解析器是一个虚拟实体,它仅有的您的实例可以访问它。它包含的有关公共主机名到私有 IP 映射的信息仅当您的实例查询它时才可以访问。它不可从外部访问。

如果您将内部主机名配置为 CNAME 目标,外部查询将获得“内部”答案,这对他们来说将是一条死路。如果您将外部主机名配置为 CNAME 目标,他们最终将获得公共 IP,因为找到 CNAME 会将他们定向到公共权威 DNS 服务器,而不是只有您的实例才能访问的私有内部解析器。

这在实践中其实非常简单,虽然在这里解释起来不那么简单,因为首先需要理解 DNS 的许多基本原理……但这最终是可行的,因为“example.com”DNS 服务器根本不关心您是否为它们配置了它们理解的 CNAME。理解它不是它们的问题——负担在于寻找答案的解析器,以便最终理解 CNAME 中出现的中间答案。

答案3

您可以使用路由 53 中的私有托管区域轻松实现此目的 http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html

答案4

  1. 您需要自己的 DNS 服务器,例如 named。
  2. 看着http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_DHCP_Options.html.domain-name-servers 选项是需要更改的选项。

相关内容