使用针对基于地理位置的流量管理和主服务器的 DNS 策略

适用范围:Windows Server 2022、Windows Server 2019、Windows Server 2016

可以使用本主题来了解如何配置 DNS 策略,以允许主要 DNS 服务器根据客户端和客户端尝试连接的资源的地理位置来响应 DNS 客户端查询,为客户端提供最近的资源的 IP 地址。

重要

此方案演示了在仅使用主要 DNS 服务器时如何为基于地理位置的流量管理部署 DNS 策略。 如果你同时拥有主要和辅助 DNS 服务器,则也可以实现基于地理位置的流量管理。 如果你采用主要-辅助部署,请先完成本主题中的步骤,然后完成主题使用 DNS 策略对主要-辅助部署进行基于地理位置的流量管理中提供的步骤。

使用新的 DNS 策略,可以创建一个 DNS 策略来允许 DNS 服务器响应请求 Web 服务器 IP 地址的客户端查询。 Web 服务器的实例可能位于不同物理位置的不同数据中心。 DNS 可以评估客户端和 Web 服务器的位置,然后通过为客户端提供物理位置更靠近客户端的 Web 服务器的 Web 服务器 IP 地址来响应客户端请求。

可以使用以下 DNS 策略参数来控制 DNS 服务器对 DNS 客户端发出的查询的响应。

  • 客户端子网。 预定义客户端子网的名称。 用于验证从中发送查询的子网。
  • 传输协议。 查询中使用的传输协议。 可能的项为“UDP”和“TCP”
  • Internet 协议。 查询中使用的网络协议。 可能的项为“IPv4”和“IPv6”
  • 服务器接口 IP 地址。 接收了 DNS 请求的 DNS 服务器的网络接口的 IP 地址。
  • FQDN。 查询中记录的完全限定域名 (FQDN),可以使用通配符。
  • 查询类型。 查询的记录类型(A、SRV、TXT 等)。
  • 时间。 收到查询的时间。

可以结合使用以下条件和逻辑运算符 (AND/OR) 来构建策略表达式。 当这些表达式匹配时,策略预期会执行以下操作之一。

  • 忽略。 DNS 服务器以无提示方式删除查询。
  • 拒绝。 DNS 服务器使用失败响应来响应该查询。
  • 允许。 DNS 服务器使用流量托管响应返回响应。

基于地理位置的流量管理示例

以下示例演示如何使用 DNS 策略根据执行 DNS 查询的客户端的物理位置实现流量重定向。

此示例使用两个虚构的公司 - 提供 Web 和域托管解决方案的 Contoso 云服务;以及 Woodgrove Food Services(伍德格罗夫食品服务公司),该公司在全球多个城市提供食品配送服务,并拥有一个名为 woodgrove.com 的网站。

Contoso 云服务有两个数据中心,一个位于美国,另一个位于欧洲。 欧洲数据中心托管 woodgrove.com 的食品订购门户。

为了确保 woodgrove.com 客户从其网站获得快速响应的体验,Woodgrove 希望将欧洲客户定向到欧洲数据中心,将美国客户定向到美国数据中心。 位于世界其他地方的客户可以被定向到任何一个数据中心。

下图描绘了此方案。

Geo-Location Based Traffic Management Example

DNS 名称解析过程的工作原理

在名称解析过程中,用户尝试连接到 www.woodgrove.com。 这会导致将 DNS 名称解析请求发送到在用户计算机上的“网络连接”属性中配置的 DNS 服务器。 通常,此服务器是由本地 ISP 提供的 DNS 服务器,它充当缓存解析器,称为 LDNS。

如果 DNS 名称不存在于 LDNS 的本地缓存中,则 LDNS 服务器会将查询转发到 woodgrove.com 的权威 DNS 服务器。 权威 DNS 服务器使用请求的记录 (www.woodgrove.com) 对 LDNS 服务器做出响应,后者将此记录缓存在本地,然后将其发送到用户的计算机。

由于 Contoso 云服务使用 DNS 服务器策略,因此托管 contoso.com 的权威 DNS 服务器配置为返回基于地理位置的流量管理响应。 如图所示,这会导致将欧洲客户端定向到欧洲数据中心,将美国客户端定向到美国数据中心。

在此方案中,权威 DNS 服务器通常会看到来自 LDNS 服务器的名称解析请求,而很少会看到来自用户计算机的请求。 因此,权威 DNS 服务器看到的名称解析请求中的源 IP 地址是 LDNS 服务器的 IP 地址,而不是用户计算机的 IP 地址。 但是,在配置基于地理位置的查询响应时,使用 LDNS 服务器的 IP 地址可以合理地估计用户的地理位置,因为用户正在查询其本地 ISP 的 DNS 服务器。

注意

DNS 策略利用包含 DNS 查询的 UDP/TCP 数据包中的发送方 IP。 如果查询通过多个解析器/LDNS 跃点访问主服务器,则策略只会考虑 DNS 服务器从中接收查询的最后一个分析器的 IP。

如何为基于地理位置的查询响应配置 DNS 策略

若要为基于地理位置的查询响应配置 DNS 策略,必须执行以下步骤。

  1. 创建 DNS 客户端子网
  2. 创建区域的范围
  3. 将记录添加到区域范围
  4. 创建策略

注意

需要在对要配置的区域具有权限的 DNS 服务器上执行这些步骤。 执行以下过程需要 DnsAdmins 的成员身份或同等身份。

以下部分提供了详细的配置说明。

重要

以下部分包括示例 Windows PowerShell 命令,其中包含许多参数的示例值。 运行这些命令之前,请确保将这些命令中的示例值替换为适合部署的值。

创建 DNS 客户端子网

第一步是确定要重定向流量的区域的子网或 IP 地址空间。 例如,如果要重定向美国和欧洲的流量,需要确定这些区域的子网或 IP 地址空间。

可以通过 Geo-IP 映射获取此信息。 需要基于这些 Geo-IP 分布来创建“DNS 客户端子网”。DNS 客户端子网是 IPv4 或 IPv6 子网的逻辑分组,查询从中发送到 DNS 服务器。

可以使用以下 Windows PowerShell 命令创建 DNS 客户端子网。

Add-DnsServerClientSubnet -Name "USSubnet" -IPv4Subnet "192.0.0.0/24"
Add-DnsServerClientSubnet -Name "EuropeSubnet" -IPv4Subnet "141.1.0.0/24"

有关详细信息,请参阅 Add-DnsServerClientSubnet

创建区域范围

配置客户端子网后,需要将要重定向其流量的区域划分为两个不同的区域范围,一个范围用于已配置的每个 DNS 客户端子网。

例如,如果要重定向 DNS 名称 www.woodgrove.com 的流量,需要在 woodgrove.com 区域中创建两个不同的区域范围,一个用于美国,一个用于欧洲。

区域范围是区域的唯一实例。 一个 DNS 区域可以有多个区域范围,且每个区域范围都包含自己的一组 DNS 记录。 同一记录可以存在于具有不同 IP 地址或相同 IP 地址的多个范围中。

注意

默认情况下,区域范围存在于 DNS 区域中。 此区域范围与区域同名,旧的 DNS 操作在此范围中运行。

可以使用以下 Windows PowerShell 命令创建区域范围。

Add-DnsServerZoneScope -ZoneName "woodgrove.com" -Name "USZoneScope"
Add-DnsServerZoneScope -ZoneName "woodgrove.com" -Name "EuropeZoneScope"

有关详细信息,请参阅 Add-DnsServerZoneScope

将记录添加到区域范围

现在,需要将代表 Web 服务器主机的记录添加到两个区域范围中。

例如,USZoneScope 和 EuropeZoneScope。 在 USZoneScope 中,可以添加记录 www.woodgrove.com,其 IP 地址为 192.0.0.1,位于美国数据中心;在 EuropeZoneScope 中,可以添加相同的记录 (www.woodgrove.com),但其 IP 地址为 141.1.0.1,位于欧洲数据中心。

可以使用以下 Windows PowerShell 命令,将记录添加到区域范围。

Add-DnsServerResourceRecord -ZoneName "woodgrove.com" -A -Name "www" -IPv4Address "192.0.0.1" -ZoneScope "USZoneScope"
Add-DnsServerResourceRecord -ZoneName "woodgrove.com" -A -Name "www" -IPv4Address "141.1.0.1" -ZoneScope "EuropeZoneScope"

在此示例中,还必须使用以下 Windows PowerShell 命令将记录添加到默认区域范围,以确保仍可在世界其他位置从两个数据中心之一访问 woodgrove.com Web 服务器。

Add-DnsServerResourceRecord -ZoneName "woodgrove.com" -A -Name "www" -IPv4Address "192.0.0.1"
Add-DnsServerResourceRecord -ZoneName "woodgrove.com" -A -Name "www" -IPv4Address "141.1.0.1"

在默认范围中添加记录时,不包括 ZoneScope 参数。 这与将记录添加到标准 DNS 区域时相同。

有关详细信息,请参阅 Add-DnsServerResourceRecord

创建策略

创建子网、分区(区域范围)并添加记录后,必须创建连接子网和分区的策略,以便当查询来自其中一个 DNS 客户端子网中的源时,查询响应将从正确的区域范围返回。 映射默认区域范围不需要任何策略。

可以使用以下 Windows PowerShell 命令创建链接 DNS 客户端子网和区域范围的 DNS 策略。

Add-DnsServerQueryResolutionPolicy -Name "USPolicy" -Action ALLOW -ClientSubnet "eq,USSubnet" -ZoneScope "USZoneScope,1" -ZoneName "woodgrove.com"
Add-DnsServerQueryResolutionPolicy -Name "EuropePolicy" -Action ALLOW -ClientSubnet "eq,EuropeSubnet" -ZoneScope "EuropeZoneScope,1" -ZoneName "woodgrove.com"

有关详细信息,请参阅 Add-DnsServerQueryResolutionPolicy

现已为 DNS 服务器配置所需的 DNS 策略,可以基于地理位置重定向流量。

当 DNS 服务器接收名称解析查询时,DNS 服务器会根据配置的 DNS 策略评估 DNS 请求中的字段。 如果名称解析请求中的源 IP 地址与任何策略匹配,将使用关联的区域范围来响应查询,并且会将用户定向到地理上最接近他们的资源。

可以根据流量管理要求创建数以千计的 DNS 策略,所有新策略都会动态应用于传入的查询,且无需重启 DNS 服务器。