你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure 虚拟网络中资源的名称解析

可以使用 Azure 来托管基础结构即服务 (IaaS)、平台即服务 (PaaS) 和混合解决方案。 为了推动虚拟机(VM)和虚拟网络中部署的其他资源之间的通信,可能需要允许它们相互通信。 使用易于记住和不变的名称可简化通信过程,而不是依赖于 IP 地址。

当部署在虚拟网络中的资源需要将域名解析到内部 IP 地址时,它们可以使用以下四种方法之一:

使用的名称解析类型取决于资源需要以怎样的方式进行相互通信。 下表说明了各种方案及相应的名称解析解决方案。

Azure 专用 DNS 区域是首选的解决方案,可让你灵活管理 DNS 区域和记录。 有关详细信息,请参阅在专用域中使用 Azure DNS

注意

如果使用 Azure 提供的 DNS,则相应的 DNS 后缀会自动应用到 VM。 对于所有其他选项,必须使用完全限定的域名 (FQDN),或手动将相应的 DNS 后缀应用到 VM。

方案 解决方案 DNS 后缀
位于相同虚拟网络的 VM 或位于相同云服务的 Azure 云服务角色实例之间的名称解析。 Azure 专用 DNS 区域Azure 提供的名称解析 主机名或 FQDN
位于不同虚拟网络的 VM 或位于不同云服务的角色实例之间的名称解析。 Azure 专用 DNS 区域Azure DNS 专用解析程序或客户托管的 DNS 服务器,该服务器在虚拟网络之间转发查询,并由 Azure 进行解析(DNS 代理)。 请参阅使用自己的 DNS 服务器进行名称解析 仅 FQDN
通过 Azure 应用服务(Web 应用、函数或自动程序)实现的名称解析:对同一虚拟网络中的角色实例或 VM 使用虚拟网络集成。 Azure DNS 专用解析程序或客户托管的 DNS 服务器,该服务器在虚拟网络之间转发查询,并由 Azure 进行解析(DNS 代理)。 请参阅使用自己的 DNS 服务器进行名称解析 仅 FQDN
从应用服务 Web 应用到同一虚拟网络中 VM 之间的名称解析。 Azure DNS 专用解析程序或客户托管的 DNS 服务器,该服务器在虚拟网络之间转发查询,并由 Azure 进行解析(DNS 代理)。 请参阅使用自己的 DNS 服务器进行名称解析 仅 FQDN
从应用服务 Web 应用到不同虚拟网络中 VM 之间的名称解析。 Azure DNS 专用解析程序或客户托管的 DNS 服务器,该服务器在虚拟网络之间转发查询,并由 Azure 进行解析(DNS 代理)。 请参阅使用自己的 DNS 服务器进行名称解析 仅 FQDN
解析来自 Azure 中 VM 或角色实例的本地计算机和服务名称。 Azure DNS 专用解析程序或客户托管的 DNS 服务器(例如本地域控制器、本地只读域控制器或使用区域传送同步的 DNS 辅助服务器)。 请参阅使用自己的 DNS 服务器进行名称解析 仅 FQDN
解析本地计算机中的 Azure 主机名。 将查询转发到相应虚拟网络中客户托管的 DNS 代理服务器。 代理服务器将查询转发到 Azure 进行解析。 请参阅使用自己的 DNS 服务器进行名称解析 仅 FQDN
针对内部 IP 的反向 DNS。 Azure 专用 DNS 区域Azure 提供的名称解析Azure DNS 专用解析程序使用你自己的 DNS 服务器的名称解析 不适用
位于不同云服务(而非虚拟网络)中的 VM 或角色实例之间的名称解析。 不适用。 不同云服务中的 VM 和角色实例之间的连接在虚拟网络外部不受支持。 不适用

Azure 提供的名称解析

Azure 提供的名称解析仅提供基本的权威 DNS 功能。 如果使用 Azure 提供的 DNS,Azure 会管理 DNS 区域名称和记录。 无法控制 DNS 区域名称或 DNS 记录的生命周期。 如果需要对虚拟网络使用全功能 DNS 解决方案,可以结合使用 Azure 专用 DNS 区域客户管理的 DNS 服务器Azure DNS 专用解析程序

除公共 DNS 名称解析之外,Azure 还为驻留在相同虚拟网络或云服务中的 VM 和角色实例提供内部名称解析。 云服务中的 VM 和实例共享相同的 DNS 后缀,因此仅使用主机名便可。 但在使用经典部署模型部署的虚拟网络中,不同云服务具有不同的 DNS 后缀。 在这种情况下,需要使用 FQDN 解析不同云服务的名称。

在使用 Azure 资源管理器部署模型部署的虚拟网络中,某个虚拟网络中的所有 VM 的 DNS 后缀是一致的,因此无需 FQDN。 可以将 DNS 名称分配给 VM 和网络接口。 虽然 Azure 提供的名称解析无需任何配置,但并不适合所有部署方案,详见上表。

注意

在使用 Azure 云服务 Web 和辅助角色的情况下,还可以使用 Azure 服务管理 REST API 访问角色实例的内部 IP 地址。 有关详细信息,请参阅服务管理 REST API 参考。 地址基于角色名称和实例编号。

功能

Azure 提供的名称解析包括以下功能:

  • 你不需要配置任何内容。
  • 由于高可用性,你无需创建和管理自己 DNS 服务器的群集。
  • 可以将该服务与自己的 DNS 服务器结合使用,从而解析本地主机名和 Azure 主机名。
  • 可以在同一云服务中的 VM 和角色实例之间使用名称解析,无需 FQDN。
  • 可以在使用资源管理器部署模型的虚拟网络中的 VM 之间使用名称解析,无需 FQDN。 经典部署模型中的虚拟网络需要使用 FQDN 来解析不同云服务中的名称。
  • 可以使用最能描述部署的主机名,而不是使用自动生成的名称。

注意事项

使用 Azure 提供的名称解析时,请考虑以下几点:

  • 无法修改 Azure 创建的 DNS 后缀。
  • DNS 查找范围限定为虚拟网络。 无法从其他虚拟网络解析针对一个虚拟网络创建的 DNS 名称。
  • 不允许手动注册自己的记录。
  • 不支持 WINS 和 NetBIOS。 在 Windows 资源管理器中看不到你的 VM。
  • 主机名必须符合 DNS。 名称只能使用 0 到 9 的数字、A 到 Z 的字母和连字符 (-)。 名称不能以连字符开头或结尾。
  • DNS 查询流量按照 VM 进行限制。 限制不会影响大多数应用程序。 如果遵循请求限制,请确保启用客户端缓存。 有关详细信息,请参阅 DNS 客户端配置
  • 必须为虚拟网络中的每个 VM 使用不同的名称,以避免 DNS 解析问题。
  • 在经典部署模型中,每个虚拟网络仅注册前 180 个云服务中的 VM。 此限制不适用于资源管理器中的虚拟网络。
  • Azure DNS IP 地址为 168.63.129.16。 此地址是静态 IP 地址,不会更改。

反向 DNS 注意事项

所有基于 Azure 资源管理器的虚拟网络都支持 VM 的反向 DNS。 启动 VM 时,Azure 托管的反向 DNS(也称为指针 (PTR)),\[vmname\].internal.cloudapp.net 格式的记录会自动添加到 DNS。 停止 VM 时会删除这些内容(解除分配)。 请参阅以下示例:

C:\>nslookup -type=ptr 10.11.0.4
Server:  UnKnown
Address:  168.63.129.16

Non-authoritative answer:
4.0.11.10.in-addr.arpa  name = myeastspokevm1.internal.cloudapp.net

internal.cloudapp.net 反向 DNS 区域由 Azure 管理,无法直接查看或编辑。 对 \[vmname\].internal.cloudapp.net 格式的 FQDN 执行前向查找可解析为分配给 VM 的 IP 地址。

如果 Azure 专用 DNS 区域通过虚拟网络链接链接到虚拟网络,并且在该链接上已启用自动注册,反向 DNS 查询会返回两条记录。 一条记录的格式为 \[vmname\].[privatednszonename],另一条记录的格式为 \[vmname\].internal.cloudapp.net。 请参阅以下示例:

C:\>nslookup -type=ptr 10.20.2.4
Server:  UnKnown
Address:  168.63.129.16

Non-authoritative answer:
4.2.20.10.in-addr.arpa  name = mywestvm1.internal.cloudapp.net
4.2.20.10.in-addr.arpa  name = mywestvm1.azure.contoso.com

返回两条 PTR 记录时(如之前所示),对任一 FQDN 执行前向查找都会返回 VM 的 IP 地址。

反向 DNS 查找的范围限定为特定虚拟网络,即使该虚拟网络已对等互连到其他虚拟网络。 对位于对等互连虚拟网络中的 VM 的 IP 地址执行反向 DNS 查询会返回 NXDOMAIN

反向 DNS (PTR) 记录不会存储在正向专用 DNS 区域中。 反向 DNS 记录存储在反向 DNS (in-addr.arpa)区域中。 不可查看或编辑与虚拟网络关联的默认反向 DNS 区域。

可以在虚拟网络中禁用反向 DNS 函数。 使用 Azure 专用 DNS 区域创建自己的反向查找区域。 然后,将此区域链接到虚拟网络。 例如,如果虚拟网络的 IP 地址空间是 10.20.0.0/16,则你可以创建空的专用 DNS 区域 20.10.in-addr.arpa,并将其链接到该虚拟网络。 此区域替代虚拟网络的默认反向查找区域。 此区域为空。 反向 DNS 会返回 NXDOMAIN,除非手动创建这些条目。

不支持自动注册 PTR 记录。 如果要创建条目,请手动输入。 如果已为其他区域启用自动注册,必须在虚拟网络中禁用自动注册。 此限制是由于已启用自动注册时仅允许链接一个专用区域的 限制。 有关如何创建专用 DNS 区域并将其链接到虚拟网络的信息,请参阅 Azure 专用 DNS 快速入门

注意

由于 Azure DNS 专用区域是全球性的,你可以创建反向 DNS 查找以跨越多个虚拟网络。 需要创建一个 Azure 专用 DNS 区域用于反向查找(in-addr.arpa 区域),然后将其链接到虚拟网络。 必须手动管理 VM 的反向 DNS 记录。

DNS 客户端配置

本部分介绍客户端缓存和客户端重试。

客户端缓存

不是每个 DNS 查询都需要跨网络发送。 通过解析本地缓存中的重复性 DNS 查询,客户端缓存有助于减少延迟和提高网络信号的恢复能力。 DNS 记录包含生存时间机制,这允许缓存尽可能长时间存储记录,而不影响记录刷新。 客户端缓存适用于大多数情况。

默认 Windows DNS 客户端具有内置的 DNS 缓存。 默认情况下,某些 Linux 发行版不包括缓存。 如果没有本地缓存,请向每个 Linux VM 添加 DNS 缓存。

有许多不同的 DNS 缓存包可用(例如 dnsmasq)。 下面介绍如何在最常见的发行版上安装 dnsmasq

RHEL(使用 NetworkManager)

  1. 使用以下命令安装 dnsmasq 包:

    sudo yum install dnsmasq
    
  2. 使用以下命令启用 dnsmasq 服务:

    systemctl enable dnsmasq.service
    
  3. 使用以下命令启动 dnsmasq 服务:

    systemctl start dnsmasq.service
    
  4. 使用文本编辑器将 prepend domain-name-servers 127.0.0.1; 添加到 /etc/dhclient-eth0.conf

  5. 使用以下命令重启网络服务:

    service network restart
    

注意

dnsmasq 包只是适用于 Linux 的众多 DNS 缓存中的一个。 在使用之前,请检查其是否适合特定需求,且没有安装其他缓存。

客户端重试

DNS 主要是用户数据报协议 (UDP)。 因为 UDP 协议无法保证消息传递,所以重试逻辑在DNS 协议本身中处理。 每个 DNS 客户端(操作系统)可能会表现出不同的重试逻辑,具体取决于创建者的偏好:

  • Windows 操作系统在 1 秒后重试,然后再在 2 秒后、4 秒后和额外 4 秒后再次重试。
  • 默认 Linux 设置在 5 秒后重试。 我们建议将重试规范更改为 5 次,每隔 1 秒一次。

使用 cat /etc/resolv.conf 检查 Linux VM 上的当前设置。 查看 options 行,例如:

options timeout:1 attempts:5

resolv.conf 文件是自动生成的,不应进行编辑。 添加 options 行的具体步骤因发行版而异。

RHEL(使用 NetworkManager)

  1. 使用文本编辑器将行 RES_OPTIONS="options timeout:1 attempts:5" 添加到文件 /etc/sysconfig/network-scripts/ifcfg-eth0

  2. 使用以下命令重启 NetworkManager 服务:

    systemctl restart NetworkManager.service
    

使用自己的 DNS 服务器的名称解析

本部分介绍 VM、角色实例以及 Web 应用。

注意

Azure DNS 专用解析程序取代了在虚拟网络中使用基于 VM 的 DNS 服务器的需求。 以下部分适用于你想使用基于 VM 的 DNS 解决方案的情况。 使用 Azure DNS 专用解析程序的诸多优势包括:降低成本、内置高可用性、可伸缩性和灵活性。

VM 和角色实例

Azure 提供的功能可能无法满足名称解析的需求。 例如,可能需要使用 Windows Server Active Directory 域来解析虚拟网络之间的 DNS 名称。 为涵盖这些情况,可以使用你自己的 DNS 服务器。

虚拟网络中的 DNS 服务器可将 DNS 查询转发到 Azure 的递归解析程序。 此过程使你能够解析该虚拟网络内的主机名。 例如,在 Azure 中运行的域控制器 (DC) 可以响应自身域的 DNS 查询,而将所有其他查询转发到 Azure。 转发查询,VM 就可以(通过 DC)查看本地资源以及(通过转发器)查看 Azure 提供的主机名。 可以通过虚拟 IP 168.63.129.16 访问 Azure 中的递归解析程序。

重要

如果在此设置中使用 VPN 网关以及虚拟网络上的自定义 DNS 服务器 IP,必须将 Azure DNS IP (168.63.129.16) 添加到列表中才能确保服务不中断。

DNS 转发还可用于在虚拟网络之间进行 DNS 解析,可以通过本地计算机来解析 Azure 提供的主机名。 要解析 VM 的主机名,DNS 服务器 VM 必须驻留在同一虚拟网络中,并且必须配置为将主机名查询转发到 Azure。 由于 DNS 后缀在每个虚拟网络中是不同的,因此可使用条件性转发规则将 DNS 查询发送到正确的虚拟网络进行解析。

在下图中,有两个虚拟网络和一个本地网络使用此方法在虚拟网络之间进行 DNS 解析。 DNS 转发器示例可在 Azure 快速入门模板库GitHub 中获取。

注意

角色实例可对同一虚拟网络中的 VM 执行名称解析, 它使用完全限定域名 (FQDN),该域名由 VM 的主机名和 internal.cloudapp.net DNS 后缀组成。 在这种情况下,仅当角色实例在角色架构(.cscfg 文件):<Role name="<role-name>" vmName="<vm-name>">中定义了 VM 名称时,名称解析才会成功。

需要在另一个虚拟网络中执行 VM 名称解析的角色实例(使用 internal.cloudapp.net 后缀的 FQDN)必须使用本部分所述的方法(在两个虚拟网络之间进行自定义 DNS 服务器转发)。

显示虚拟网络之间的 DNS 的示意图

使用 Azure 提供的名称解析时,Azure 动态主机配置协议 (DHCP) 将为每个 VM 提供内部 DNS 后缀 (.internal.cloudapp.net)。 此后缀可实现主机名解析,因为主机名记录位于 internal.cloudapp.net 区域中。 当你使用自己的名称解析解决方案时,此后缀不会提供给 VM,因为它会干扰其他 DNS 体系结构(例如已加入域的方案)。 相反,Azure 会提供无法正常运行的占位符(reddog.microsoft.com)

如果需要,可以使用 PowerShell 或 API 确定内部 DNS 后缀。

对于资源管理器部署模型中的虚拟网络,可以通过网络接口 REST APIGet-AzNetworkInterface PowerShell cmdlet 和 az network nic show Azure CLI 命令获取该后缀。

如果不想将查询转发到 Azure,请提供你自己的 DNS 解决方案或部署 Azure DNS 专用解析程序

如果你提供自己的 DNS 解决方案,该解决方案需要:

  • 提供合适的主机名解析方式(例如通过动态 DNS (DDNS) 进行解析)。 如果使用 DDNS,可能需要禁用 DNS 记录清理。 Azure DHCP 租约时间很长,进行清理可能会导致 DNS 记录过早删除。
  • 提供适当的递归式解析来解析外部域名。
  • 可以从其所服务的客户端进行访问(端口 53 上的 TCP 和 UDP),并可访问 Internet。
  • 禁止从 Internet 进行访问,减少外部代理带来的威胁。

为获得最佳性能,在将 Azure VM 用作 DNS 服务器时,应禁用 IPv6。

网络安全组 (NSG) 充当 DNS 解析程序终结点的防火墙。 修改或替代 NSG 安全规则,以允许 UDP 端口 53(也可选择 TCP 端口 53)访问 DNS 侦听器终结点。 在网络中设置自定义 DNS 服务器后,通过端口 53 的流量将绕过子网的 NSG。

重要

如果使用 Windows DNS 服务器作为将 DNS 请求转发到 Azure DNS 服务器的自定义 DNS 服务器,请确保将“转发超时”值增大至 4 秒以上,使 Azure 递归 DNS 服务器能够执行正确的递归操作。

有关此问题的详细信息,请参阅转发器和条件转发器解析超时

此项建议同样适用于转发超时值为 3 秒或更低的其他 DNS 服务器平台。

不这样做可能会导致使用公共 IP 地址解析专用 DNS 区域记录。

Web 应用

假设你需要执行从使用应用服务生成的、已链接到某个虚拟网络的 Web 应用到同一虚拟网络中的 VM 的名称解析。 除了设置具有 DNS 转发程序(可向 Azure 转发查询)的自定义 DNS 服务器(虚拟 IP 为 168.63.129.16)以外,还需要执行以下步骤:

  • 根据将应用与虚拟网络集成中所述,为 Web 应用启用虚拟网络集成(如果尚未启用)。
  • 如果需要执行从链接到虚拟网络的 Web 应用(通过应用服务生成)到另一虚拟网络(未链接到同一专用区域)中的 VM 的名称解析,请在这两个虚拟网络上使用自定义 DNS 服务器或 Azure DNS 专用解析程序

若要使用自定义 DNS 服务器,请执行以下操作:

  • 在某个也可向 Azure 中的递归解析程序(虚拟 IP 为 168.63.129.16)转发查询的 VM 上的目标虚拟网络中设置 DNS 服务器。 DNS 转发器示例可在 Azure 快速入门模板库GitHub 中获取。
  • 在某个 VM 上的源虚拟网络中设置 DNS 转发程序。 将此 DNS 转发器配置为向目标虚拟网络中的 DNS 服务器转发查询。
  • 在源虚拟网络的设置中配置源 DNS 服务器。
  • 遵照将应用与虚拟网络集成中的说明,为 Web 应用启用虚拟网络集成以链接到源虚拟网络。

要使用 Azure DNS 专用解析程序,请参阅规则集链接

指定 DNS 服务器

使用自己的 DNS 服务器时,可为每个虚拟网络指定多个 DNS 服务器。 也可以针对每个网络接口(适用于资源管理器)或云服务(适用于经典部署模型)指定多个 DNS 服务器。 为网络接口或云服务指定 DNS 服务器时,其优先级高于为虚拟网络指定的 DNS 服务器。

注意

不应直接在 VM 中编辑网络连接属性,例如 DNS 服务器 IP。 在更换虚拟网络适配器后,可能会在服务修复过程中擦除这些属性。 此警告适用于 Windows 和 Linux VM。

使用资源管理器部署模型时,可为虚拟网络和网络接口指定 DNS 服务器。 有关详细信息,请参阅管理虚拟网络管理网络接口

如果选择虚拟网络的自定义 DNS 服务器,则必须指定至少一个 DNS 服务器 IP 地址。 否则,虚拟网络将忽略该配置并改用 Azure 提供的 DNS。

注意

如果更改已部署的虚拟网络或 VM 的 DNS 设置,要使新的 DNS 设置生效,必须对虚拟网络中所有受影响的 VM 执行 DHCP 租约续订。 对于运行 Windows OS 的 VM,请直接在 VM 中输入 ipconfig /renew。 步骤因 OS 而异。 请参阅 OS 类型的相关文档。

Azure 资源管理器部署模型