使用 VM 或 Azure DNS 专用解析程序为 Azure 文件配置 DNS 转发

使用 Azure 文件存储,可为包含文件共享的存储帐户创建专用终结点。 专用终结点可在许多不同的应用场合下发挥作用,而且特别适合用于通过专用对等互连使用 VPN 或 ExpressRoute 连接从本地网络连接到 Azure 文件共享。

为了让你的存储账户连接通过网络隧道,存储账户的完全限定域名(FQDN)必须解析到你私有端点的私有IP地址。 若要实现此解析,必须将存储终结点后缀(core.chinacloudapi.cn适用于世纪互联运营的Microsoft Azure区域)转发到可从虚拟网络中访问的Azure专用 DNS 服务。 本文介绍如何设置和配置 DNS 转发,以正确解析到存储帐户的专用终结点 IP 地址。

在开始之前,请参见《Azure 文件存储部署规划》和《Azure 文件存储网络考虑因素》。

Azure 文件存储 的 DNS 转发工作原理

Azure 文件存储 提供以下终结点类型,用于访问 Azure 文件共享:

  • 公共终结点:使用公共 IP 地址,可从全球任意位置访问。
  • 专用终结点:位于某个虚拟网络中,并使用该虚拟网络的地址空间内部的专用 IP 地址。
  • 服务终结点,用于限制对特定虚拟网络的公共终结点的访问。 仍可通过公共 IP 地址访问存储帐户,但只能从配置中指定的位置访问。

公共和专用终结点位于 Azure 存储帐户中。 存储帐户是代表共享存储池的管理结构,你可以在其中部署多个文件共享以及其他存储资源(例如,Blob 容器或队列)。

每个存储帐户都有一个完全限定的域名(FQDN)。 对于由世纪互联运营的 Microsoft Azure 区域,此 FQDN 遵循storageaccount.file.core.chinacloudapi.cn的模式,其中storageaccount是存储帐户的名称。 对此名称发出请求时(例如,在工作站上装载共享时),操作系统会执行 DNS 查找,以将完全限定的域名解析为 IP 地址。

默认情况下,storageaccount.file.core.chinacloudapi.cn 解析为公共终结点的 IP 地址。 存储帐户的公共终结点托管在托管许多其他存储帐户的公共终结点的 Azure 存储群集上。 创建专用终结点时,专用 DNS 区域将会链接到它被添加到的虚拟网络。在此过程中,CNAME 记录会将 storageaccount.file.core.chinacloudapi.cn 映射到一个 A 记录条目,该条目代表存储帐户专用终结点的专用 IP 地址。 这样,便可以在虚拟网络中使用 storageaccount.file.core.chinacloudapi.cn FQDN,并将其解析为专用终结点的 IP 地址。

由于最终目标是使用 VPN 或 ExpressRoute 连接等网络隧道从本地访问存储帐户中托管的 Azure 文件共享,因此必须将本地 DNS 服务器配置为将向 Azure 文件服务发出的请求转发到 Azure 专用 DNS 服务。

可以通过以下两种方式之一配置 DNS 转发:

  • 使用 DNS 服务器 VM:将 设置为按条件转发到 Azure 虚拟网络中托管的 DNS 服务器虚拟机。*.core.chinacloudapi.cn 然后,此 DNS 服务器将以递归方式将请求转发到 Azure 的专用 DNS 服务,该服务会将存储帐户的 FQDN 解析为适当的专用 IP 地址。 这是针对虚拟网络中托管的所有 Azure 文件共享的一次性步骤。

  • 使用 Azure DNS 专用解析程序: 如果不想部署基于 VM 的 DNS 服务器,可以使用 Azure DNS 专用解析程序完成相同的任务。

除了 Azure 文件存储之外,其他 Azure 存储服务的 DNS 名称解析请求(Azure Blob 存储、Azure 表存储、Azure 队列存储等)也将转发到 Azure 的专用 DNS 服务。 如果需要,可以为其他 Azure 服务添加其他终结点。

先决条件

在设置到 Azure 文件存储的 DNS 转发之前,需要以下各项:

使用 VM 配置 DNS 转发

如果已在 Azure 虚拟网络中安装了 DNS 服务器,或者希望通过组织使用的任何方法部署自己的 DNS 服务器 VM,则可以使用内置的 DNS 服务器 PowerShell cmdlet 配置 DNS。

此图显示了使用 Azure 中的虚拟机配置 D N S 转发的网络拓扑。

重要

本文假设你在本地环境中使用 Windows Server 内的 DNS 服务器。 你可以使用任何DNS服务器来完成这里描述的所有步骤,而不仅仅是Windows的DNS服务器。

在本地 DNS 服务器上,使用 Add-DnsServerConditionalForwarderZone 创建条件转发器。 必须在所有本地 DNS 服务器上部署此条件转发器,才能在正确将流量转发到 Azure 时有效。 请记住,请将 <azure-dns-server-ip> 条目替换为适合你的环境的 IP 地址。

$vnetDnsServers = "<azure-dns-server-ip>", "<azure-dns-server-ip>"

$storageAccountEndpoint = Get-AzContext | `
    Select-Object -ExpandProperty Environment | `
    Select-Object -ExpandProperty StorageEndpointSuffix

Add-DnsServerConditionalForwarderZone `
        -Name $storageAccountEndpoint `
        -MasterServers $vnetDnsServers

在 Azure 虚拟网络中的 DNS 服务器上,还需要配置一个转发器,以便将存储帐户 DNS 区域的请求定向到 Azure 专用 DNS 服务,该服务通过保留 IP 地址 168.63.129.16 进行访问。 (请记住,如果要在不同的 PowerShell 会话中运行命令,请填充 $storageAccountEndpoint 。

Add-DnsServerConditionalForwarderZone `
        -Name $storageAccountEndpoint `
        -MasterServers "168.63.129.16"

使用 Azure DNS 专用解析程序配置 DNS 转发

如果不想部署 DNS 服务器 VM,可以使用 Azure DNS 专用解析程序完成相同的任务。 请参阅 使用 Azure 门户创建 Azure DNS 专用解析程序。

示意图显示了使用 Azure D N S 专用解析程序配置 D N S 转发的网络拓扑。

配置本地 DNS 服务器的操作方式没有什么不同,只是要指向解析程序的入站终结点 IP 地址,而不是 Azure 中 DNS 服务器的 IP 地址。 解析程序不需要任何配置,因为它默认会将查询转发到 Azure 专用 DNS 服务器。 如果专用 DNS 区域链接到部署解析程序的 VNet,则解析程序将能够回复来自该 DNS 区域的记录。

警告

为 core.chinacloudapi.cn 区域配置转发器时,此公共域的所有查询都将转发到 Azure DNS 基础结构。 这会导致尝试访问已配置了专用终结点的其他租户的存储帐户时出现问题,因为 Azure DNS 将使用专用 DNS 区域中不存在的 CNAME 回答存储帐户公共名称的查询。 此问题的一种解决方法是在环境中创建跨租户专用终结点以连接到该存储帐户。

若要使用 Azure DNS 专用解析程序配置 DNS 转发,请在本地 DNS 服务器上运行此脚本。 将 <resolver-ip> 替换为解析程序的入站终结点 IP 地址。

$privateResolver = "<resolver-ip>"

$storageAccountEndpoint = Get-AzContext | `
    Select-Object -ExpandProperty Environment | `
    Select-Object -ExpandProperty StorageEndpointSuffix

Add-DnsServerConditionalForwarderZone `
        -Name $storageAccountEndpoint `
        -MasterServers $privateResolver

验证DNS转发是否正常

在测试 DNS 转发器是否正常工作之前,先用 Clear-DnsClientCache清除本地工作站的 DNS 缓存。 若要测试是否可以成功解析存储帐户的 FQDN,请使用 Resolve-DnsName 或 nslookup。

# Replace storageaccount.file.core.chinacloudapi.cn with the appropriate FQDN for your storage account.
# Note that the proper suffix (core.chinacloudapi.cn) depends on the cloud you're deployed in.
Resolve-DnsName -Name storageaccount.file.core.chinacloudapi.cn

如果名称解析成功,解析后的IP地址会与你存储账户私有端点的私有IP地址匹配。

Name                                       Type   TTL   Section    NameHost
----                                       ----   ---   -------    --------
storageaccount.file.core.chinacloudapi.cn  CNAME  29    Answer     storageaccount.privatelink.file.core.chinacloudapi.cn


Name       : storageaccount.privatelink.file.core.chinacloudapi.cn
QueryType  : A
TTL        : 1769
Section    : Answer
IP4Address : 192.168.0.4

如果你是在装载 SMB 文件共享,则还可以使用 Test-NetConnection 命令确认是否可以成功建立到存储帐户的 TCP 连接。

Test-NetConnection -ComputerName storageaccount.file.core.chinacloudapi.cn -CommonTCPPort SMB

另请参阅