DNS64

Citrix ADC DNS64 功能通过合成的 DNS AAAA 记录响应到 IPv6 客户端,发送针对仅 IPv4 域的 AAAA 请求。DNS64 功能与 NAT64 功能配合使用,可在仅 IPV6 的客户端和仅限 IPV4 的服务器之间实现无缝通信。DNS64 允许仅 IPv6 客户端发现 IPv4Domain,NAT64 允许客户端和服务器之间的通信。

为了合成 AAAA 记录,Citrix ADC 设备会从 DNS 服务器获取 DNS A 记录。DNS64 前缀是在 Citrix ADC 设备上配置的 96 位 IPv6 前缀。Citrix ADC 设备通过连接 DNS64 前缀(96 位)和 IPv4 地址(32 位)来合成 AAAA 记录。

为了启用 IPv6 客户端和 IPv4 服务器之间的通信,具有 DNS64 和 NAT64 配置的 Citrix ADC 设备可以部署在 IPv6 客户端或 IPv4 服务器端。在这两种情况下,Citrix ADC 设备上的 DNS64 配置都类似,包括一个负载平衡虚拟服务器,充当 DNS 服务器的代理服务器。如果 Citrix ADC 设备部署在客户端,则必须在 IPv6 客户端上指定负载平衡虚拟服务器作为域的名称服务器。

考虑一个示例,其中在 IPv4 端配置了 DNS64 和 NAT64 配置的 Citrix ADC 设备。在此示例中,企业在服务器 S1 上托管站点 www.example.com,该站点具有 IPv4 地址。为了启用 IPv6 客户端与 IPv4 服务器 S1 之间的通信,Citrix ADC 设备 NS1 将使用 DNS64 和有状态 NAT64 配置进行部署。

DNS64 配置包括 DNS 负载平衡虚拟服务器 LBVS-DNSS64-1,其上启用了 DNS64 选项。在 NS1 上还配置了名为 DNS64-Policy-1 的 DNS64 策略和名为 DNS64-Action-1 的关联 DNS64 操作,并且 DNS64-Policy-1 绑定到 LBVS-DNS64-1。LBVS-DNSS64-1 充当 DNS 服务器 DNS-1 和 DNS-2 的 DNS 代理服务器。

当到达 LBVS-DNS64-1 的流量与在 DNS64-Policy-1 中指定的条件匹配时,流量将根据 DNS64-Action-1 中的设置进行处理。DNSS64 操作 1 指定用于合成 AAAA 记录的 DNS64 前缀,以及从 DNS 服务器接收到的 A 记录。

在 Citrix ADC 设备上启用了全局 DNS 参数缓存记录,因此设备缓存 DNS 记录。此设置是 DNS64 正常工作所必需的。

下表列出了上述示例中使用的设置:DNS64 示例设置

以下是此示例中的流量:

  1. IPv6 客户端 CL1 为网站 www.example.com 的 IPv6 地址发送 DNS AAAA 请求。
  2. 该请求由 Citrix ADC 设备 NS1 上的 DNS 负载平衡虚拟服务器 LBVS-DNSS64-1 接收。
  3. NS1 检查其 DNS 缓存记录是否有请求的 AAAA 记录,并发现网站 www.example.com 的 AAAA 记录不存在于 DNS 缓存中。
  4. LBVS-DNSS64-1 的负载平衡算法选择 DNS 服务器 DNS-1 并将 AAAA 请求转发给它。
  5. 由于站点 www.example.com 托管在 IPv4 服务器上,DNS 服务器 DNS-1 没有任何 AAAA 记录的站点 www.example.com。
  6. DNS-1 向 LBVS-DNSS64-1 发送空的 DNS AAAA 响应或错误消息。
  7. 由于在 LBVS-DNS64-1 上启用了 DNS64 选项,并且来自 CL1 的 AAAA 请求与 DNS64-Policy-1 中指定的条件相匹配,因此,NS1 将 DNS A 请求发送到 www.example.com 的 IPv4 地址对应的 DNS-1。
  8. DNS-1 的响应方式是发送给 LBVS-DNSS64-1 的 DNS 记录。A 记录包括网站的 IPv4 地址。
  9. NS1 为网站 www.example.com 综合了 AAAA 的记录,其中包括:
    • 站点 www.example.com 的 IPv6 地址 = 在关联的 DNSS64 操作中指定的 DNS64 前缀(96 位)和 DNS A 记录的 IPv4 地址(32 位)= 2001:DB8:300::192.0.2.60
  10. NS1 将合成的 AAAA 记录发送到 IPv6 客户端 CL1。NS1 还将 A 记录缓存到其内存中。NS1 使用缓存的 A 记录为后续 AAAA 请求合成 AAA 记录。

DNS64 配置需要注意的事项

在 Citrix ADC 设备上配置 DNS64 之前,请考虑以下几点:

  • Citrix ADC 设备的 DNS64 功能符合 RFC 6174 的要求。

  • Citrix ADC 设备的 DNSS64 功能不支持 DNSSEC。Citrix ADC 设备不会从从 DNS 服务器接收的 DNSSEC 响应合成 AAAA 记录。只有当响应包含 RRSIG 记录时,响应才被归类为 DNSSEC 响应。

  • Citrix ADC 设备支持仅 96 位的 DNS64 前缀。

  • 尽管 DNS64 功能与 NAT64 功能配合使用,但 DNS64 和 NAT64 配置独立于 Citrix ADC 设备。对于特定流,必须为 DNS64 前缀和 NAT64 前缀参数指定相同的 IPv6 前缀值,以便客户端接收的合成 IPv6 地址路由到特定 NAT64 配置。有关在 Citrix ADC 设备上配置 NAT64 的更多信息,请参阅有状态 NAT64

  • 以下是 Citrix ADC 设备处理 DN64 的不同情况:

    • 如果来自 DNS 服务器的 AAAA 响应包含 AAAA 记录,则会检查响应中的每条记录是否为特定 DNS64 配置在 Citrix ADC 设备上配置的排除规则集。Citrix ADC 从响应中删除前缀与排除规则匹配的 IPv6 地址。如果生成的响应至少包含一条 IPv6 记录,Citrix ADC 设备将此响应转发到客户端,否则设备将从域的 A 记录合成 AAAA 响应并将其发送到 IPv6 客户端。

    • 如果来自 DNS 服务器的 AAAA 响应为空应答响应,则设备请求 A 资源使用相同的域名记录,或者在设备是域的真实域名服务器时在自己的记录中进行搜索。如果请求导致空答案或错误,则会转发给客户端。

    • 如果来自 DNS 服务器的响应包含 RCODE=1(格式错误),Citrix ADC 设备会将相同的响应转发给客户端。如果在超时之前没有响应,Citrix ADC 设备会向客户端发送 RCODE=2(服务器故障)的响应。

    • 如果来自 DNS 服务器的响应包含别名记录,则会跟随链,直到达到终止 A 或 AAAA 记录。如果别名记录没有任何 AAAA 资源记录,Citrix ADC 设备将获取用于合成 AAAA 记录的 DNS A 记录。CNAME 链与合成的 AAAA 记录一起添加到答案部分,然后发送到客户端。

  • Citrix ADC 设备的 DNS64 功能还支持响应 PTR 请求。当设备上收到一个 IPv6 地址域的 PTR 请求,并且 IPv6 地址与任何配置的 DNS64 前缀匹配时,设备会创建一个 CNAME 记录,将 IP6-ARPA 域映射到相应 IN-ADDR 中。ARPA 域和新形成的 IN-ADR.ARPA 域用于解析。设备搜索本地 PTR 记录,如果记录不存在,设备将向 DNS 服务器发送 IN-ADDR.ARPA 域的 PTR 请求。Citrix ADC 设备使用来自 DNS 服务器的响应来合成初始 PTR 请求的响应。

配置步骤

在 Citrix ADC 设备上创建有状态 NAT64 配置所需的实体涉及以下过程:

  • 添加 DNS 服务。DNS 服务是 Citrix ADC 设备充当 DNS 代理服务器的 DNS 服务器的逻辑表示。有关设置服务的可选参数的更多信息,请参阅负载平衡

  • 添加 DNS64 操作和 DNS64 策略,然后将 DNS64 操作绑定到 DNS64 策略。根据相关的 DNS64 操作中的设置,DNS64 策略指定要与 DNS64 处理流量匹配的条件。DNS64 操作指定强制性 DNS64 前缀以及可选的排除规则和映射规则设置。

  • 创建 DNS 负载平衡虚拟服务器,并将 DNS 服务和 DNS64 策略绑定到它。DNS 负载平衡虚拟服务器充当绑定 DNS 服务表示的 DNS 服务器的 DNS 代理服务器。到达虚拟服务器的流量与针对 DNS64 处理的绑定 DNS64 策略进行匹配。有关设置负载平衡虚拟服务器的可选参数的更多信息,请参阅负载平衡

    注意:CLI 针对这两个任务具有单独的命令,但 GUI 将它们合并在一个对话框中。

    启用 DNS 记录的缓存。启用 Citrix ADC 设备的全局参数,以缓存通过 DNS 代理操作获取的 DNS 记录。有关启用 DNS 记录缓存的更多信息,请参阅域名系统

CLI 过程

要使用 CLI 创建 DNS 类型的服务,请执行以下操作:

在命令提示窗口中,键入:

  • add service <name> <IP> <serviceType> <port> …

要使用 CLI 创建 DNS64 操作,请执行以下操作:

在命令提示窗口中,键入:

  • add dns action64 <actionName> -Prefix <ipv6_addr|*> [-mappedRule <expression>] [-excludeRule <expression>]

要使用 CLI 创建 DNS64 策略,请执行以下操作:

在命令提示窗口中,键入:

  • add dns policy64 <name> -rule <expression> -action <string>

使用 CLI 创建 DNS 负载平衡虚拟服务器:

在命令提示窗口中,键入:

  • add lb vserver <name> DNS <IPAddress> <port> -dns64 ( ENABLED | DISABLED ) [-bypassAAAA ( YES | NO )] …

使用 CLI 将 DNS 服务和 DNS64 策略绑定到 DNS 负载平衡虚拟服务器:

在命令提示窗口中,键入:

  • bind lb vserver <name> <serviceName> …
  • bind lb vserver <name> -policyName <string> -priority <positive_integer> …

GUI 程序

要使用 GUI 创建 DNS 类型的服务,请执行以下操作:

  1. 导航到流量管理 > 负载平衡 > 服务,然后添加新服务。
  2. 设置以下参数:
    • 服务名称*
    • 服务器*
    • 协议*(从下拉列表中选择 DNS。)
    • 端口*

要使用 GUI 创建 DNS64 操作,请执行以下操作:

导航到“流量管理”>“DNS”>“操作”,在“DNS 操作 64”选项卡上添加新的 DNS64 操作。

要使用 GUI 创建 DNS64 策略,请执行以下操作:

导航到“流量管理”>“DNS”>“策略”,在“DNS 策略 64”选项卡上添加新的 DNS64 策略。

要使用 GUI 创建 DNS 负载平衡虚拟服务器并将 DNS 服务和 DNS64 策略绑定到它:

  1. 导航到流量管理 > 负载平衡 > 虚拟服务器,然后添加新的虚拟服务器。
  2. 设置以下参数:
    • 姓名*
    • IP 地址*
    • 协议*(从下拉列表中选择 DNS。)
    • 端口*
  3. 选择启用 DNS64 选项。
  4. 在“服务”窗格中,将服务绑定到虚拟服务器。
  5. 在“策略”窗格中,将策略绑定到虚拟服务器。

示例配置

 > add service SVC-DNS-1 203.0.113.50 DNS 53
 Done

> add service SVC-DNS-2 203.0.113.60 DNS 53
 Done

> add dns Action64 DNS64-Action-1 -Prefix 2001:DB8:300::/96
 Done

> add dns Policy64 DNS64-Policy-1 -rule "CLIENT.IPv6.SRC.IN_SUBNET(2001:DB8:5001::/64)"
-action DNS64-Action-1
 Done

> add lb vserver LBVS-DNS64-1 DNS 2001:DB8:9999::99 53 -dns64 ENABLED
 Done

> bind lb vserver LBVS-DNS64-1 SVC-DNS-1
 Done

> bind lb vserver LBVS-DNS64-1 SVC-DNS-2
 Done

> bind lb vserver LBVS-DNS64-1 -policyname DNS64-Policy-1 -priority 2
 Done