ADC

DNS 支持重写

您可以将重写功能配置为修改 DNS 请求和响应,就像配置 HTTP 或 TCP 请求和响应一样。您可以使用重写来管理 DNS 请求流,并在标题或答案部分中进行必要的修改。例如,如果 DNS 响应的标头标志中未设置 AA 位,则可以使用重写在 DNS 响应中设置 AA 位并将其发送给客户端。

DNS 表达式

在重写配置中,您可以使用以下 NetScaler 表达式来引用 DNS 请求或响应的各个部分:

请参阅 表达式和描述

DNS 绑定点

以下全局绑定点可用于包含 DNS 表达式的策略。

绑定积分 说明
DNS_REQ_OVERRIDE 改写请求策略队列。
DNS_REQ_DEFAULT 标准请求策略队列。
DNS_RES_OVERRIDE 改写响应策略队列。
DNS_RES_DEFAULT 标准响应策略队列。

除了默认绑定点外,您还可以创建 DNS_REQ 或 DNS_RES 类型的策略标签并将 DNS 策略绑定到它们。

重写 DNS 的操作类型

  • replace_dns_answer_section —此操作将 DNS 答案部分替换为 DNS 策略中定义的表达式。
  • replace_dns_header_field—检查 DNS 请求中的操作码类型。返回 True 或 False,指示 DNS 请求中的操作码类型是否与指定的操作码类型匹配。此操作将 DNS 标头部分替换为 DNS 策略中定义的表达式。

为 DNS 配置重写策略

以下过程使用 NetScaler 命令行配置重写操作和策略,并将策略绑定到重写特定的全局绑定点。

配置重写操作和策略,并为 DNS 绑定策略

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

  1. add rewrite action <actName> <actType>

    对于 <actname>,用一个名称代替您的新操作。名称长度可以为 1 到 127 个字符,可以包含字母、数字、连字符 (-) 和下划线 (_) 符号。对于 <actType>,指定为 DNS 表达式提供的重写操作类型。

  2. add rewrite policy <polName> <rule> <actName>

    对于 <polname>,用新保单的名称代替。对于 <actname>,名称的长度可以为 1 到 127 个字符,并且可以包含字母、数字、连字符 (-) 和下划线 (_) 符号。替换为 <actname>刚才创建的操作的名称。

  3. bind rewrite global <polName> <priority> <gotoPriorityExpression> -type <bindPoint>

    替换为 <polName>您刚刚创建的策略的名称。对于 <priority>,指定策略的优先级。替换为 <bindPoint>其中一个重写特定的全局绑定点。

示例

设置 DNS 请求的 AA 位以平衡虚拟服务器的负载

以下命令将 NetScaler 设备配置为其提供的所有查询的权威 DNS 服务器。

add rewrite action set_aa replace_dns_header_field dns.req.header.flags.set(aa)
add rewrite policy pol !dns.req.header.flags.is_set(aa)  set_aa
bind rewrite global  pol  100  -type dns_res_override
<!--NeedCopy-->

修改响应答案和标题部分

如果服务器使用 NX 域进行响应,则可以设置重写操作以将响应替换为指定的 IP 地址。NOPOLICY-REWRITE 允许您在不处理表达式(规则)的情况下调用外部库。此条目是一个虚拟策略,它不包含规则,但将条目定向到策略标签或虚拟服务器特定策略库。

add rewrite action set_aa_res replace_dns_header_field "dns.res.header.flags.set(aa)"
add rewrite action modify_nxdomain_res replace_dns_answer_section "dns.new_rrset_a("10.102.218.160",300)"
add rewrite policy set_res_aa true set_aa_res
add add rewrite policy modify_answer "dns.RES.HEADER.RCODE.EQ(nxdomain) && dns.RES.QUESTION.TYPE.EQ(A)"
modify_nxdomain_res
add rewrite policylabel MODIFY_NODATA dns_res
bind rewrite policylabel MODIFY_NODATA modify_answer 10 END
bind rewrite policylabel MODIFY_NODATA set_res_aa 11 END
bind lb vserver v1 -policyName NOPOLICY-REWRITE -priority 11 -gotoPriorityExpression END -type
RESPONSE -invoke policylabel MODIFY_NODATA
<!--NeedCopy-->

限制

  • 只有在 NetScaler 设备配置为 DNS 代理服务器且存在缓存缺失时,才会评估重写策略。
  • 如果标题中的递归可用 (RA) 标志设置为 YES,则重写时不会修改 RA 标志。
  • 如果标头中的 RA 标志设置为 YES,则无论任何重写操作,都会修改标头中的 CD 标志。
DNS 支持重写