

# VPC 中的 DNS 属性
<a name="vpc-dns"></a>

域名系统 (DNS) 是 Internet 中名称使用的标准，以将名称解析到各自相应的 IP 地址。DNS 主机名是可以唯一并绝对区分计算机的名称；它由主机名和域名组成。DNS 服务器会将 DNS 主机名称解析到其相应的 IP 地址。

公有 IPv4 地址可实现 Internet 间的通信，而私有 IPv4 地址可实现实例网络内的通信。有关更多信息，请参阅 [为 VPC 和子网分配 IP 地址](vpc-ip-addressing.md)。

Amazon 为您的 VPC 提供 DNS 服务器（[Amazon Route 53 Resolver](AmazonDNS-concepts.md#AmazonDNS)）。要使用您自己的 DNS 服务器，请为您的 VPC 创建一组新的 DHCP 选项。有关更多信息，请参阅 [Amazon VPC 中的 DHCP 选项集](VPC_DHCP_Options.md)。

**Topics**
+ [了解 Amazon DNS](AmazonDNS-concepts.md)
+ [查看您的 EC2 实例的 DNS 主机名称](vpc-dns-viewing.md)
+ [查看和更新 VPC 的 DNS 属性](vpc-dns-updating.md)

# 了解 Amazon DNS
<a name="AmazonDNS-concepts"></a>

身为 Amazon 架构师或管理员，您会遇到的一种基本联网组件是 Amazon DNS 服务器，也称为 Route 53 Resolver。此 DNS 解析器服务原生集成到您所在 Amazon 区域的每个可用区中，可为虚拟私有云（VPC）中的域名解析提供可靠且可扩展的解决方案。在本节中，您会了解到 Amazon DNS 服务器的 IP 地址、Amazon DNS 服务器可以解析的私有 DNS 主机名以及管理着 Amazon DNS 服务器使用的规则。

**Topics**
+ [Amazon DNS 服务器](#AmazonDNS)
+ [规则和注意事项](#amazon-dns-rules)
+ [EC2 实例的 DNS 主机名称](#vpc-dns-hostnames)
+ [VPC 中的 DNS 属性](#vpc-dns-support)
+ [DNS 配额](#vpc-dns-limits)
+ [私有托管区域](#vpc-private-hosted-zones)

## Amazon DNS 服务器
<a name="AmazonDNS"></a>

Route 53 Resolver（也称“Amazon DNS 服务器”或“AmazonProvidedDNS”）是一种 DNS 解析程序服务，内置于 Amazon 区域内的每个可用区中。Route 53 Resolver 位于 `169.254.169.253`（IPv4）、`fd00:ec2::253`（IPv6）以及预置到“VPC\$12”的主要私有 IPV4 CIDR 范围。例如，如果您 VPC 的 IPv4 CIDR 为 `10.0.0.0/16`、IPv6 CIDR 为 `2001:db8::/32`，则可通过 `169.254.169.253`（IPv4）、`fd00:ec2::253`（IPv6）或 `10.0.0.2`（IPv4）访问 Route 53 Resolver。VPC 内的资源使用[链路本地地址](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/using-instance-addressing.html#link-local-addresses)进行 DNS 查询。这些查询会私下传输到 Route 53 Resolver，但在网络上不可见。在仅限 IPv6 子网中，只要“AmazonProvidedDNS”是 DHCP 选项集中的域名服务器，便仍可访问 IPv4 链路本地地址（169.254.169.253）。

当您将实例启动到 VPC 中时，我们会为该实例提供一个私有 DNS 主机名。如果该实例配置了一个公有 IPv4 地址并且启用了 VPC DNS 属性，我们还会提供一个公有 DNS 主机名。

私有 DNS 主机名的格式取决于您在启动 EC2 实例时如何配置它。有关私有 DNS 主机名类型的更多信息，请参阅《*Amazon EC2 用户指南*》中的 [Amazon EC2 实例主机名类型](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2-instance-naming.html)。

您的 VPC 中的 Amazon DNS 服务器用于解析您在 Route 53 中的私有托管区域中指定的 DNS 域名。有关私有托管区域的更多信息，请参阅 *Amazon Route 53 开发人员指南* 中的[使用私有托管区域](https://docs.amazonaws.cn/Route53/latest/DeveloperGuide/hosted-zones-private.html)。

## 规则和注意事项
<a name="amazon-dns-rules"></a>

使用 Amazon DNS 服务器时，适用以下规则和注意事项。
+ 您无法使用网络 ACL 或安全组筛选进出 Amazon DNS 服务器的流量。
+ 使用 Hadoop 框架的服务（如 Amazon EMR）要求实例解析自己的完全限定域名 (FQDN)。这种情况下，如果 `domain-name-servers` 选项设置为自定义值，则 DNS 解析可能会失败。要确保正确解析 DNS，请考虑在您的 DNS 服务器添加条件转发服务器，将针对域 `region-name.compute.internal` 的查询转发到 Amazon DNS 服务器。有关更多信息，请参阅 *Amazon EMR 管理指南*中的[设置 VPC 以托管集群](https://docs.amazonaws.cn/emr/latest/ManagementGuide/emr-vpc-host-job-flows.html)。
+ Amazon Route 53 Resolver 只支持递归 DNS 查询。

## EC2 实例的 DNS 主机名称
<a name="vpc-dns-hostnames"></a>

当您启动实例时，实例始终会收到一个私有 IPv4 地址和一个与其私有 IPv4 地址对应的私有 DNS 主机名。如果您的实例具有公有 IPv4 地址，则该实例 VPC 的 DNS 属性决定实例是否接收与公有 IPv4 地址对应的公有 DNS 主机名。有关更多信息，请参阅 [VPC 中的 DNS 属性](#vpc-dns-support)。

启用 Amazon 提供的 DNS 服务器后，DNS 主机名按如下方式解析。

**私有 IPv4 DNS 名称**  
实例的私有 IPv4 DNS 主机名解析为私有 IPv4 地址。您可以使用私有 IPv4 DNS 主机名，在同一 VPC 中或连接的 VPC 中的实例之间进行通信。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[私有 IPv4 地址](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/using-instance-addressing.html#concepts-private-addresses)。

**公有 IPv4 DNS 名称**  
实例的公有 IPv4 DNS 主机名解析为（该实例网络外）的公有 IPv4 地址或（该实例网络内）的私有 IPv4 地址。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[公有 IPv4 地址](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/using-instance-addressing.html#concepts-public-addresses)。

要通过 VPC 对等连接将公有 IPv4 DNS 名称解析为私有 IPv4 地址，必须启用对等连接的 DNS 解析功能。有关更多信息，请参阅[实现对 VPC 对等连接的 DNS 解析](https://docs.amazonaws.cn/vpc/latest/peering/vpc-peering-dns.html)。

**私有资源 DNS 名称**  
基于 RBN 的 DNS 名称，它可以解析为此实例选择的 A 和 AAAA DNS 记录。此 DNS 主机名在双堆栈和仅 IPv6 子网中的实例的实例详细信息中可见。有关 RBN 的更多信息，请参阅《Amazon EC2 用户指南》**中的 [EC2 实例主机名类型](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2-instance-naming.html)。

## VPC 中的 DNS 属性
<a name="vpc-dns-support"></a>

以下 VPC 属性决定了为您的 VPC 提供的 DNS 支持。如果两项属性均启用，则如果在创建时为启动到 VPC 内的实例分配了公有 IPv4 地址或弹性 IP 地址，则该实例会接收公有 DNS 主机名。如果您为之前未启用两项属性的 VPC 启用这两项属性，则已经启动至该 VPC 的实例将接收公有 DNS 主机名（如果它们具有公有 IPv4 地址或弹性 IP 地址）。

要检查是否为 VPC 启用了这些属性，请参阅[查看和更新 VPC 的 DNS 属性](vpc-dns-updating.md)。


| 属性 | 描述 | 
| --- | --- | 
| enableDnsHostnames |  确定 VPC 是否支持将公有 DNS 主机名分配给具有公有 IP 地址的实例。 除非 VPC 是默认 VPC，否则此属性的默认值为 `false`。请注意下面此属性的**规则和注意事项**。  | 
| enableDnsSupport |  确定 VPC 是否支持通过 Amazon 提供的 DNS 服务器进行 DNS 解析。 如果此属性是 `true`，对 Amazon 提供的 DNS 服务器的查询成功。有关更多信息，请参阅 [Amazon DNS 服务器](#AmazonDNS)。 此属性的默认值为 `true`。请注意下面此属性的**规则和注意事项**。  | 

**规则和注意事项**
+ 如果两个属性都设置为 `true`，则会发生以下情况：
  + 具有公有 IP 地址的实例会收到对应的公有 DNS 主机名。
  + Route 53 Resolver 服务器可以解析 Amazon 提供的私有 DNS 主机名。
+ 如果至少将某个属性设置为 `false`，将出现以下情况：
  + 具有公有 IP 地址的实例不会收到对应的公有 DNS 主机名。
  + Route 53 Resolver 无法解析 Amazon 提供的私有 DNS 主机名。
  + 如果 [DHCP 选项集](VPC_DHCP_Options.md)中存在自定义域名，则实例会收到自定义私有 DNS 主机名。如果未使用 Route 53 Resolver 服务器，您的自定义域名服务器必须正确解析主机名。
+ 如果您使用在 Amazon Route 53 中的私有托管区域中定义的自定义 DNS 域名，或者使用具有接口 VPC 端点的私有 DNS (Amazon PrivateLink)，则必须将 `enableDnsHostnames` 和 `enableDnsSupport` 属性设置为 `true`。
+ Route 53 Resolver 可以将私有 DNS 主机名解析为全部地址空间内的私有 IPv4 地址，包括您的 VPC 的 IPv4 地址范围不在 [RFC 1918](https://tools.ietf.org/html/rfc1918) 指定的私有 IPv4 地址范围内的情况。但是，如果您在 2016 年 10 月之前创建了 VPC，并且您的 VPC 的 IPv4 地址范围不在这些地址范围内，则 Route 53 Resolver 将无法解析私有 DNS 主机名。要支持这种情况，请联系 [Amazon Web Services 支持](https://www.amazonaws.cn/contact-us/)。

## DNS 配额
<a name="vpc-dns-limits"></a>

对于使用[本地链路](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/using-instance-addressing.html#link-local-addresses)地址的服务，每秒数据包数（PPS）限制为 1024 个。此限制是 Route 53 Resolver DNS 查询、[实例元数据服务（IMDS）](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html)请求、[Amazon Time Service 网络时间协议（NTP）](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/set-time.html)请求和 [Windows 许可服务（适用于基于 Microsoft Windows 的实例）](https://www.amazonaws.cn/windows/resources/licensing/)请求的总和。无法提高此配额。

由 Route 53 Resolver 支持的每秒 DNS 查询数量因查询类型、响应大小和所用协议而异。有关可扩展 DNS 架构的更多信息和建议，请参阅[具有 Active Directory 的 Amazon 混合 DNS](https://d1.awsstatic.com/whitepapers/aws-hybrid-dns-with-active-directory.pdf) 技术指南。

如果您达到配额，Route 53 Resolver 将拒绝流量。达到配额的部分原因可能是 DNS 节流问题，或者是使用 Route 53 Resolver 网络接口的实例元数据查询。有关如何解决 VPC DNS 节流问题的信息，请参阅[如何确定我对 Amazon 提供的 DNS 服务器的 DNS 查询是否由于 VPC DNS 节流而失败](https://repost.aws/knowledge-center/vpc-find-cause-of-failed-dns-queries)。有关实例元数据检索的更多信息，请参阅《*Amazon EC2 用户指南*》中的[检索实例元数据](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html)。

## 私有托管区域
<a name="vpc-private-hosted-zones"></a>

要使用自定义 DNS 域名（如 `example.com`）而不是使用私有 IPv4 地址或Amazon提供的私有 DNS 主机名来访问您的 VPC 中的资源，您可以在 Route 53 中创建一个私有托管区域。私有托管区域就是一个容器，其中包含的信息说明您希望如何在一个或多个 VPC 中为某个域及其子域路由流量而不将您的资源公开到 Internet。您可以创建 Route 53 资源记录集，用来确定 Route 53 将如何响应对您的域及其子域的查询。例如，如果您希望将对 example.com 的浏览器请求路由到您 VPC 中的某个 Web 服务器，可以在您的私有托管区域中创建一条 A 记录并指定该 Web 服务器的 IP 地址。有关创建私有托管区域的更多信息，请参阅 *Amazon Route 53 开发人员指南* 中的[使用私有托管区域](https://docs.amazonaws.cn/Route53/latest/DeveloperGuide/hosted-zones-private.html)。

要使用自定义 DNS 域名访问资源，必须连接到您的 VPC 中的实例。在您的实例中，您可通过使用 `ping` 命令来测试是否可从私有托管区域中的资源的自定义 DNS 名称访问该资源；例如，`ping mywebserver.example.com`。(您必须确保您的实例的安全组规则允许入站 ICMP 流量才能使 `ping` 命令正常运行。)

私有托管区域不支持 VPC 外的传递关系；例如，您不能使用资源的自定义私有 DNS 名称从 VPN 连接的另一端访问资源。

**重要**  
如果您使用在 Amazon Route 53 中的私有托管区域中定义的自定义 DNS 域名，则必须将 `enableDnsHostnames` 和 `enableDnsSupport` 属性设置为 `true`。

# 查看您的 EC2 实例的 DNS 主机名称
<a name="vpc-dns-viewing"></a>

您可以使用 Amazon EC2 控制台或命令行查看运行实例或网络接口的 DNS 主机名。知道这些主机名对于连接到您的资源非常重要。

为与实例关联的 VPC 启用了 DNS 选项时，**公有 DNS (IPv4)** 和**私有 DNS 字段**可用。有关更多信息，请参阅 [VPC 中的 DNS 属性](AmazonDNS-concepts.md#vpc-dns-support)。

## 实例
<a name="instance-dns"></a>

**使用控制台查看实例的 DNS 主机名称**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/ec2/)。

1. 在导航窗格中，选择 **Instances (实例)**。

1. 从列表中选择您的 实例。

1. 在详细信息窗格中，**Public DNS (IPv4)** 和 **Private DNS** 字段显示 DNS 主机名 (如适用)。

**使用命令行查看实例的 DNS 主机名**
+ [describe-instances](https://docs.amazonaws.cn/cli/latest/reference/ec2/describe-instances.html)（Amazon CLI）
+ [Get-EC2Instance](https://docs.amazonaws.cn/powershell/latest/reference/items/Get-EC2Instance.html)Amazon Tools for Windows PowerShell

## 网络接口
<a name="eni-dns"></a>

**使用控制台查看网络接口的私有 DNS 主机名**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/ec2/)。

1. 在导航窗格中，选择 **Network Interfaces**。

1. 从列表中选择网络接口。

1. 在详细信息窗格中，**私有 DNS (IPv4)** 字段显示私有 DNS 主机名。

**使用命令行查看网络接口的 DNS 主机名**
+ [describe-network-interfaces](https://docs.amazonaws.cn/cli/latest/reference/ec2/describe-network-interfaces.html) (Amazon CLI)
+ [Get-EC2NetworkInterface](https://docs.amazonaws.cn/powershell/latest/reference/items/Get-EC2NetworkInterface.html) (Amazon Tools for Windows PowerShell)

# 查看和更新 VPC 的 DNS 属性
<a name="vpc-dns-updating"></a>

您可以通过 Amazon VPC 控制台查看并更新您的 VPC 中的 DNS 支持属性。这些设置控制着实例能否获得公有 DNS 主机名以及 Amazon DNS 服务器能否解析私有 DNS 名称。正确配置这些属性对于确保 VPC 内部的无缝通信至关重要。

**使用控制台描述和更新 VPC 的 DNS 支持**

1. 通过以下网址打开 Amazon VPC 控制台：[https://console.aws.amazon.com/vpc/](https://console.amazonaws.cn/vpc/)。

1. 在导航窗格中，选择 **Your VPCs**(您的 VPC)。

1. 选中该 VPC 的复选框。

1. 查看 **Details (详细信息)** 中的信息。在此示例中，已同时启用 **DNS hostnames (DNS 主机名)** 和 **DNS resolution (DNS 解析)**。  
![\[“DNS Settings (DNS 设置)”选项卡\]](http://docs.amazonaws.cn/vpc/latest/userguide/images/dns-settings.png)

1. 要更新这些设置，请选择 **Actions**（操作），然后选择 **Edit VPC settings**（编辑 VPC 设置）。在相应的 DNS 属性上选择或清除 **Enable**（启用），然后选择 **Save changes**（保存更改）。

**使用命令行说明 VPC 的 DNS 支持**
+ [describe-vpc-attribute](https://docs.amazonaws.cn/cli/latest/reference/ec2/describe-vpc-attribute.html) (Amazon CLI)
+ [Get-EC2VpcAttribute](https://docs.amazonaws.cn/powershell/latest/reference/items/Get-EC2VpcAttribute.html) (Amazon Tools for Windows PowerShell)

**使用命令行更新 VPC 的 DNS 支持**
+ [modify-vpc-attribute](https://docs.amazonaws.cn/cli/latest/reference/ec2/modify-vpc-attribute.html) (Amazon CLI)
+ [Edit-EC2VpcAttribute](https://docs.amazonaws.cn/powershell/latest/reference/items/Edit-EC2VpcAttribute.html) (Amazon Tools for Windows PowerShell)