DNS 策略概述

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

可以使用本主题了解 Windows Server 2016 中新增的 DNS 策略。 可以使用 DNS 策略进行基于地理位置的流量管理,使用基于时间的智能 DNS 响应来管理为拆分式部署配置的单个 DNS 服务器,对 DNS 查询应用筛选器,等等。 以下各项提供了有关这些功能的更多详细信息。

  • 应用程序负载均衡。 在不同的位置部署多个应用程序实例时,可以使用 DNS 策略来均衡不同应用程序实例之间的流量负载,并为应用程序动态分配流量负载。

  • 基于地理位置的流量管理。 可以使用 DNS 策略来允许主要和辅助 DNS 服务器根据客户端和客户端尝试连接的资源的地理位置来响应 DNS 客户端查询,为客户端提供最近的资源的 IP 地址。

  • 拆分式 DNS。 使用拆分式 DNS 时,DNS 记录将拆分到同一 DNS 服务器上的不同区域范围,DNS 客户端根据它们是内部客户端还是外部客户端接收响应。 可为 Active Directory 集成区域或独立 DNS 服务器上的区域配置拆分式 DNS。

  • 筛选。 可以配置 DNS 策略以创建基于你提供的条件的查询筛选器。 DNS 策略中的查询筛选器允许将 DNS 服务器配置为根据 DNS 查询和发送 DNS 查询的 DNS 客户端以自定义方式做出响应。

  • 取证。 可以使用 DNS 策略将恶意 DNS 客户端重定向到一个不存在的 IP 地址,而不是将其定向到它们试图访问的计算机。

  • 基于时间的重定向。 可以使用基于时间的 DNS 策略,在分布于不同地理位置的应用程序实例之间分配应用程序流量。

新概念

若要创建支持上面所列方案的策略,需要能够识别区域中的记录组、网络上的客户端组以及其他元素。 这些元素由以下新的 DNS 对象表示:

  • 客户端子网:客户端子网对象表示从中将查询提交到 DNS 服务器的 IPv4 或 IPv6 子网。 可以创建子网,以便稍后根据请求的来源子网定义要应用的策略。 例如,在拆分式 DNS 方案中,可以使用一个内部 IP 地址向内部子网中的客户端答复解析 www.microsoft.com 之类的名称的请求,并使用另一个 IP 地址向外部子网中的客户端做出答复。

  • 递归范围:递归范围是用于控制 DNS 服务器递归的一组设置的唯一实例。 递归范围包含转发器列表,并指定是否启用递归。 一个 DNS 服务器可以有多个递归范围。 DNS 服务器递归策略允许为一组查询选择递归范围。 如果 DNS 服务器对某些查询没有权威性,则可以通过 DNS 服务器递归策略来控制如何解析这些查询。 可以指定要使用的转发器以及是否使用递归。

  • 区域范围:一个 DNS 区域可以有多个区域范围,每个区域范围包含自身的一组 DNS 记录。 同一条记录可以存在于多个范围中并具有不同的 IP 地址。 此外,区域传送是在区域范围级别完成的。 这意味着,主要区域中的区域范围内的记录将传送到辅助区域中的同一区域范围。

策略类型

DNS 策略按级别和类型划分。 可以使用查询解析策略来定义如何处理查询,使用区域传送策略来定义如何进行区域传送。 可以在服务器级别或区域级别应用每种策略类型。

查询解析策略

可以使用 DNS 查询解析策略来指定 DNS 服务器如何处理传入的解析查询。 每个 DNS 查询解析策略包含以下元素:

字段 说明 可能值
名称 策略名称 - 最多 256 个字符
- 可以包含对文件名有效的任何字符
State 策略状态 - 启用(默认)
- 已禁用
Level 策略级别 - 服务器
- 区域
处理顺序 按级别分类查询并对其应用策略后,服务器将查找查询满足条件的第一个策略并将其应用于查询 - 数值
- 每个包含相同级别并应用于值的策略的唯一值
操作 DNS 服务器执行的操作 - 允许(区域级别的默认值)
- 拒绝(服务器级别的默认值)
- 忽略
条件 策略条件 (AND/OR) 和要应用的策略所要满足的条件列表 - 条件运算符 (AND/OR)
- 条件列表(参阅以下条件表)
范围 区域范围列表和每个范围的加权值。 加权值用于负载均衡分配。 例如,如果此列表包含权重为 3 的 datacenter1 和权重为 5 的 datacenter2,则服务器将在 8 次请求中,使用 datacentre1 中的记录响应 3 次 - 区域范围列表(按名称)和权重

注意

服务器级策略只能使用值“拒绝”或“忽略”作为操作。

DNS 策略条件字段由两个元素组成:

名称 说明 示例值
客户端子网 预定义客户端子网的名称。 用于验证从中发送查询的子网。 - EQ,Spain,France - 如果子网标识为 Spain 或 France,则解析为 true
- NE,Canada,Mexico - 如果客户端子网是除 Canada 和 Mexico 以外的任何子网,则解析为 true
传输协议 查询中使用的传输协议。 可能的输入项为 UDP 和 TCP - EQ,TCP
- EQ,UDP
Internet 协议 查询中使用的网络协议。 可能的输入项为 IPv4 和 IPv6 - EQ,IPv4
- EQ,IPv6
服务器接口 IP 地址 传入 DNS 服务器网络接口的 IP 地址 - EQ,10.0.0.1
- EQ,192.168.1.1
FQDN 查询中的记录的 FQDN,可以使用通配符 - EQ,www.contoso.com - 仅当查询尝试解析 www.contoso.com FQDN 时,才解析为 true
- EQ,*.contoso.com,*.woodgrove.com - 如果查询针对以 contoso.com 或 woodgrove.com 结尾的任何记录,则解析为 true
查询类型 查询的记录类型(A、SRV、TXT) - EQ,TXT,SRV - 如果查询请求 TXT 或 SRV 记录,则解析为 true
- EQ,MX - 如果查询请求 MX 记录,则解析为 true
时间 收到查询的时间 - EQ,10:00-12:00,22:00-23:00 - 如果收到查询的时间为上午 10 点到中午,或晚上 10 点到晚上 11 点,则解析为 true

使用上表作为起点,下表可用于定义一个条件来匹配任何记录类型的查询,但是,contoso.com 域中的 SRV 记录是 10.0.0.0/24 子网中的客户端在晚上 8 点到 10 点使用接口 10.0.0.3 通过 TCP 传入的:

名称
客户端子网 EQ,10.0.0.0/24
传输协议 EQ,TCP
服务器接口 IP 地址 EQ,10.0.0.3
FQDN EQ,*.contoso.com
查询类型 NE,SRV
时间 EQ,20:00-22:00

可以创建相同级别的多个查询解析策略,前提是它们的处理顺序值不同。 当多个策略可用时,DNS 服务器按以下方式处理传入的查询:

DNS policy processing

递归策略

递归策略是一种特殊类型的服务器级策略。 递归策略控制 DNS 服务器如何执行查询的递归。 仅当查询处理进入递归路径时,递归策略才适用。 可为一组查询的递归选择“拒绝”或“忽略”值。 或者,可为一组查询选择一组转发器。

可以使用递归策略来实现拆分式 DNS 配置。 在此配置中,DNS 服务器对一组客户端执行查询递归,而 DNS 服务器不会对其他客户端的该查询执行递归。

递归策略包含的元素与常规 DNS 查询解析策略相同,另外还包含下表中的元素:

名称 说明
应用于递归 指定此策略应该仅用于递归。
递归范围 递归范围的名称。

注意

只能在服务器级别创建递归策略。

区域传送策略

区域传送策略控制 DNS 服务器是否允许区域传送。 可以在服务器级别或区域级别为区域传送创建策略。 服务器级策略应用于 DNS 服务器上发生的每个区域传送查询。 区域级策略仅应用于 DNS 服务器上托管的区域的查询。 区域级策略的最常见用途是实现阻止列表或安全列表。

注意

区域传送策略只能使用“拒绝”或“忽略”作为操作。

可以使用以下服务器级区域传送策略来拒绝给定子网中 contoso.com 域的区域传送:

Add-DnsServerZoneTransferPolicy -Name DenyTransferOfContosoToFabrikam -Zone contoso.com -Action DENY -ClientSubnet "EQ,192.168.1.0/24"

可以创建相同级别的多个区域传送策略,前提是它们的处理顺序值不同。 当多个策略可用时,DNS 服务器按以下方式处理传入的查询:

DNS process for multiple zone transfer policies

管理 DNS 策略

可以使用 PowerShell 创建和管理 DNS 策略。 以下示例演示了可以通过 DNS 策略配置的不同示例方案:

流量管理

可以根据 DNS 客户端的位置将基于 FQDN 的流量定向到不同服务器。 以下示例演示了如何创建流量管理策略,以将客户从特定子网定向到北美数据中心,并从另一个子网定向到欧洲数据中心。

Add-DnsServerClientSubnet -Name "NorthAmericaSubnet" -IPv4Subnet "172.21.33.0/24"
Add-DnsServerClientSubnet -Name "EuropeSubnet" -IPv4Subnet "172.17.44.0/24"
Add-DnsServerZoneScope -ZoneName "Contoso.com" -Name "NorthAmericaZoneScope"
Add-DnsServerZoneScope -ZoneName "Contoso.com" -Name "EuropeZoneScope"
Add-DnsServerResourceRecord -ZoneName "Contoso.com" -A -Name "www" -IPv4Address "172.17.97.97" -ZoneScope "EuropeZoneScope"
Add-DnsServerResourceRecord -ZoneName "Contoso.com" -A -Name "www" -IPv4Address "172.21.21.21" -ZoneScope "NorthAmericaZoneScope"
Add-DnsServerQueryResolutionPolicy -Name "NorthAmericaPolicy" -Action ALLOW -ClientSubnet "eq,NorthAmericaSubnet" -ZoneScope "NorthAmericaZoneScope,1" -ZoneName "Contoso.com"
Add-DnsServerQueryResolutionPolicy -Name "EuropePolicy" -Action ALLOW -ClientSubnet "eq,EuropeSubnet" -ZoneScope "EuropeZoneScope,1" -ZoneName contoso.com

脚本的最前面两行为北美和欧洲创建客户端子网对象。 其后的两行在 contoso.com 域中创建区域范围,每个地区各有一个区域范围。 接下来的两行在每个区域(欧洲和北美各有一个)中创建一条用于将 www.contoso.com 关联到不同 IP 地址的记录。 脚本的最后几行创建两个 DNS 查询解析策略,一个应用于北美子网,另一个应用于欧洲子网。

阻止对域的查询

可以使用 DNS 查询解析策略来阻止对域的查询。 以下示例阻止对 treyresearch.net 的所有查询:

Add-DnsServerQueryResolutionPolicy -Name "BlackholePolicy" -Action IGNORE -FQDN "EQ,*.treyresearch.com"

阻止来自某个子网的查询

还可以阻止来自特定子网的查询。 以下脚本为 172.0.33.0/24 创建一个子网,然后创建一个策略来忽略来自该子网的所有查询:

Add-DnsServerClientSubnet -Name "MaliciousSubnet06" -IPv4Subnet 172.0.33.0/24
Add-DnsServerQueryResolutionPolicy -Name "BlackholePolicyMalicious06" -Action IGNORE -ClientSubnet  "EQ,MaliciousSubnet06"

允许内部客户端的递归

可以使用 DNS 查询解析策略来控制递归。 以下示例可用于为内部客户端启用递归,同时在拆分式方案中为外部客户端禁用递归。

Set-DnsServerRecursionScope -Name . -EnableRecursion $False
Add-DnsServerRecursionScope -Name "InternalClients" -EnableRecursion $True
Add-DnsServerQueryResolutionPolicy -Name "SplitBrainPolicy" -Action ALLOW -ApplyOnRecursion -RecursionScope "InternalClients" -ServerInterfaceIP  "EQ,10.0.0.34"

脚本中的第一行更改默认递归范围(简单地命名为“.”(点))以禁用递归。 第二行创建一个名为 InternalClients 的递归范围并启用递归。 第三行创建一个策略,用于将新建的递归范围应用于通过一个服务器接口(该接口使用 10.0.0.34 作为 IP 地址)传入的任何查询。

创建服务器级区域传送策略

可以使用 DNS 区域传送策略来更精细地控制区域传送。 以下示例脚本可用于允许给定子网中的任何服务器进行区域传送:

Add-DnsServerClientSubnet -Name "AllowedSubnet" -IPv4Subnet 172.21.33.0/24
Add-DnsServerZoneTransferPolicy -Name "NorthAmericaPolicy" -Action IGNORE -ClientSubnet "ne,AllowedSubnet"

脚本中的第一行创建一个名为 AllowedSubnet 的子网对象,其 IP 块为 172.21.33.0/24。 第二行创建一个区域传送策略,以允许先前创建的子网中的任何 DNS 服务器进行区域传送。

创建区域级区域传送策略

还可以创建区域级区域传送策略。 以下示例忽略 contoso.com 通过一个服务器接口(该接口使用 10.0.0.33 作为 IP 地址)传入的任何区域传送请求:

Add-DnsServerZoneTransferPolicy -Name "InternalTransfers" -Action IGNORE -ServerInterfaceIP "eq,10.0.0.33" -PassThru -ZoneName "contoso.com"

DNS 策略方案

有关如何为特定方案使用 DNS 策略的信息,请参阅本指南中的以下主题。

对只读域控制器使用 DNS 策略

DNS 策略与只读域控制器兼容。 请务必注意,必须重启 DNS 服务器服务才能在只读域控制器上加载新的 DNS 策略。 在可写域控制器上不需要这样做。