ADC

将 NetScaler 设备配置为 DNS 代理服务器

作为 DNS 代理服务器,ADC 设备可以充当单个 DNS 服务器或一组 DNS 服务器的代理。以下示例拓扑图说明了请求和响应的流程。

图 1. NetScaler 作为 DNS 代理

NetScaler 作为 DNS 代理

默认情况下,NetScaler 设备会缓存来自 DNS 名称服务器的响应。当设备接收 DNS 查询时,它会检查其缓存中是否有查询的域。如果所查询域的地址存在于其缓存中,则 NetScaler 会将相应的地址返回给客户端。否则,它会将查询转发到 DNS 名称服务器,该服务器检查地址的可用性并将其返回给 NetScaler。然后 NetScaler 将地址返回给客户端。

对于之前已缓存的域的请求,NetScaler 无需查询已配置的 DNS 服务器即可从缓存中提供该域的地址记录。

对于域名的 DOT 请求,如果缓存的信息未加密,NetScaler 会将查询转发到 DNS 名称服务器,该服务器检查地址的可用性并将其返回给 NetScaler。NetScaler 对客户端的地址和响应进行加密。它还使用安全选项缓存记录。对于启用了安全选项的域的 UDP 或 TCP 请求,NetScaler 无需查询配置的 DNS 服务器即可从缓存中提供该域的地址记录。

当记录的存活时间 (TTL) 值达到配置值时,设备会丢弃存储在其缓存中的记录。请求过期记录的客户端必须等待 NetScaler 从服务器检索该记录并更新其缓存。为避免这种延迟,NetScaler 通过在记录到期之前从服务器检索记录来主动更新缓存。

下表列出了需要在 NetScaler 上配置的示例名称和实体的值。

表 1. DNS 代理实体配置示例

实体类型 名称 IP 地址 类型 端口
LB 虚拟服务器 Vserver-DNS-1 10.102.29.40 DNS 53
服务 Service-DNS-1 10.102.29.50 DNS 53
服务 Service-DNS-2 10.102.29.51 DNS 53

下图显示了 DNS 代理的实体以及要在 NetScaler 上配置的参数的值。

图 2. DNS 代理实体模型

DNS 代理实体模型

注意

要配置 DNS 代理功能,您需要知道如何配置负载平衡服务和虚拟服务器。

创建负载平衡虚拟服务器

要在 NetScaler 上配置 DNS 代理,请配置 DNS 类型的负载平衡虚拟服务器。要配置 DNS 虚拟服务器以对一组支持递归查询的 DNS 服务器进行负载平衡,必须设置“递归可用”选项。使用此选项,RA 位在 DNS 虚拟服务器的 DNS 回复中设置为 ON。

有关创建负载平衡虚拟服务器的说明,请参阅 负载平衡

创建 DNS 服务

创建 DNS 类型的负载平衡虚拟服务器后,必须创建 DNS 服务。您可以添加、修改、启用、禁用和删除 DNS 服务。有关创建 DNS 服务的说明,请参阅 负载平衡

将负载平衡虚拟服务器绑定到 DNS 服务

要完成 DNS 代理配置,必须将 DNS 服务绑定到负载平衡虚拟服务器。有关将服务绑定到负载平衡虚拟服务器的说明,请参阅 负载平衡

将 DNS 代理设置配置为使用 TCP

一些客户端使用用户数据报协议 (UDP) 进行 DNS 通信。但是,UDP 指定的最大数据包大小为 512 字节。当负载长度超过 512 字节时,客户端必须使用 TCP。当客户端向 NetScaler 设备发送 DNS 查询时,该设备会将查询转发到其中一个名称服务器。如果对于 UDP 数据包来说响应过大,则名称服务器会在对 NetScaler 的响应中设置截断位。截断位表示对于 UDP 来说响应过大,客户端必须通过 TCP 连接发送查询。ADC 设备在截断位完好无损的情况下将响应中继到客户端。它等待客户端在端口 53 上启动与 DNS 负载平衡虚拟服务器的 IP 地址的 TCP 连接。客户端通过 TCP 连接发送请求。然后,NetScaler 设备将请求转发到名称服务器,并将响应中继到客户端。

要将 NetScaler 配置为使用 DNS 的 TCP 协议,必须配置负载平衡虚拟服务器和服务,均为 DNS_TCP。您可以配置 DNS_TCP 类型的监视器来检查服务的状态。有关创建 DNS_TCP 虚拟服务器、服务和监视器的说明,请参阅 负载平衡

为了主动更新记录,NetScaler 使用与服务器的 TCP 连接来检索记录。

重要

要将 NetScaler 配置为使用 UDP 用于 DNS 并仅在 UDP 的有效负载长度超过 512 字节时使用 TCP,您需要同时配置 DNS 和 DNS_TCP 服务。DNS_TCP 服务的 IP 地址必须与 DNS 服务的 IP 地址相同。

配置 DNS 条目的生存时间值

具有相同域名和记录类型的所有 DNS 记录的 TTL 相同。如果更改了其中一条记录的 TTL 值,则新值将反映在具有相同域名和类型的所有记录中。默认 TTL 值为 3600 秒。最小值为 0,最大值为 604800。如果 DNS 条目的 TTL 值小于最小值或大于最大值,则会分别将其另存为最小值或最大 TTL 值。

使用 CLI 指定最小和最大 TTL

在 NetScaler 命令提示符下,键入以下命令以指定最小和最大 TTL 并验证配置:

-  set dns parameter [-minTTL <secs>] [-maxTTL <secs>]
-  show dns parameter
<!--NeedCopy-->

示例:

> set dns parameter -minTTL 1200 -maxTTL 1800
 Done
> show dns parameter
        DNS parameters:
        DNS retries: 5
        Minimum TTL: 1200               Maximum TTL: 1800
            .
            .
            .
 Done
>
<!--NeedCopy-->

使用 GUI 指定最小和最大 TTL

  1. 导航到“流量管理”>“DNS”。
  2. 在详细信息窗格的“设置”下,单击“更改 DNS 设置”。
  3. 在“配置 DNS 参数”对话框的 TTL 中,在“最小值”和“最大值”文本框中,分别键入最小和最大存活时间(以秒为单位),然后单击“确定”。

注意: 当 TTL 到期时,记录将从缓存中删除。在 DNS 记录到期之前,NetScaler 主动联系服务器并获取 DNS 记录。

刷新 DNS 记录

您可以删除缓存中存在的所有 DNS 记录。例如,您可能需要在修改后重新启动服务器时刷新 DNS 记录。

使用 CLI 删除所有代理记录

在 NetScaler 命令提示符下,键入:

flush dns proxyRecords

使用 GUI 删除所有代理记录

  1. 导航到“流量管理”>“DNS”>“记录”。
  2. 在详细信息窗格中,单击“刷新代理记录”。

添加 DNS 资源记录

您可以将 DNS 记录添加到将 NetScaler 设备配置为 DNS 代理服务器的域中。有关添加 DNS 记录的信息,请参阅 配置 DNS 资源记录

删除负载平衡 DNS 虚拟服务器

有关删除负载平衡虚拟服务器的信息,请参阅 负载平衡

限制客户端连接上并发 DNS 请求的数量

您可以限制单个客户端连接上的并发 DNS 请求数,该连接由 <clientip:port>-<vserver ip:port> 元组标识。并发 DNS 请求是 NetScaler 设备已转发到名称服务器且设备正在等待响应的请求。限制客户端连接上的并发请求数使您能够在恶意客户端尝试通过发送大量的 DNS 请求进行分布式拒绝服务 (DDoS) 攻击时保护域名服务器。当达到客户端连接限制时,该连接上的后续的 DNS 请求将被丢弃,直到未完成的请求数低于该限制。此限制不适用于 NetScaler 设备从其缓存中提供的请求。

此参数的默认值为 255。在大多数情况下,此默认值就足够了。如果域名服务器在正常运行条件下提供许多并发 DNS 请求,则可以指定一个大值或将值指定为零 (0)。值为 0 将禁用此功能并指定对单个客户端连接允许的 DNS 请求数量没有限制。此参数是一个全局参数,适用于在 NetScaler 设备上配置的所有 DNS 虚拟服务器。 此参数的默认值为 255。在大多数情况下,此默认值就足够了。如果域名服务器在正常运行条件下提供许多并发 DNS 请求,则可以指定一个大值或将值指定为零 (0)。值为 0 将禁用此功能并指定对单个客户端连接允许的 DNS 请求数量没有限制。此参数是一个全局参数,适用于在 NetScaler 设备上配置的所有 DNS 虚拟服务器。 此参数的默认值为 255。在大多数情况下,此默认值就足够了。如果域名服务器在正常运行条件下提供许多并发 DNS 请求,则可以指定一个大值或将值指定为零 (0)。值为 0 将禁用此功能并指定对单个客户端连接允许的 DNS 请求数量没有限制。此参数是一个全局参数,适用于在 NetScaler 设备上配置的所有 DNS 虚拟服务器。

使用 CLI 指定单个客户端连接上允许的最大并发 DNS 请求数

在命令提示符处,键入以下命令以指定单个客户端连接上允许的最大并发 DNS 请求数并验证配置:

-  set dns parameter -maxPipeline <positive_integer>
-  show dns parameter
<!--NeedCopy-->

示例:

> set dns parameter -maxPipeline 1000
 Done
> show dns parameter
        DNS parameters:
        DNS retries: 5
        .
        .
        .
        Max DNS Pipeline Requests: 1000
 Done
<!--NeedCopy-->

使用 GUI 指定单个客户端连接上允许的最大并发 DNS 请求数

  1. 导航到“流量管理”>“DNS”。
  2. 在详细信息窗格中,单击“更改 DNS 设置”。
  3. 在“配置 DNS 参数”对话框中,为“最大 DNS 管道请求数”指定一个值。
  4. 单击确定。

DNS ECS 插入支持

通过在 DNS 查询中包含 ECS,可以改善 DNS 服务器的响应时间。这使得 DNS 服务器能够将请求重定向到适当的地理位置。根据客户端 IP 地址和子网掩码,您可以在代理 DNS 查询中加入扩展客户端子网 (ECS) 选项。

使用 CLI 配置 ECS 参数

在命令提示符下,键入:

add dns profile <profilename> -insertECS <ENABLED|DISABLED> -replaceECS <ENABLED|DISABLED> -maxCacheableECSPrefixLength <0-32> -maxCacheableECSPrefixLength6 <0-128>

  • insertECS - 启用后,通过带有 DNS 配置文件的负载平衡虚拟服务器代理的 DNS 请求将具有基于客户端 IP 地址的 ECS 选项。默认情况下,此参数处于禁用状态。

  • replaceECS - 启用后,通过带有 DNS 配置文件 ECS 选项的负载平衡虚拟服务器代理的 DNS 请求将替换为基于客户端 IP 地址的新 ECS。默认情况下,此参数处于禁用状态。

  • maxCacheableECSPrefixLength - 指定用于 IPv4 地址的 ECS 选项的网络掩码的最大前缀长度。有效值:0-32 默认值:32
  • maxCacheableECSPrefixLength6 - 指定用于 IPv6 地址的 ECS 选项的网络掩码的最大前缀长度。有效值:0-128 默认值:128。

使用 GUI 配置 ECS 参数

  1. 导航到“系统”>“配置文件”>“DNS 配置文件”,然后创建 DNS 配置文件。
  2. 启用“插入 ECS”或“替换 ECS”。
  3. 输入 IPv4 和 IPv6 的前缀长度。
  4. 单击确定