DNS64
NetScaler DNS64 功能使用合成的 DNS AAAA 记录响应 IPv6 客户端,发送对纯 IPv4 域的 AAAA 请求。DNS64 功能与 NAT64 功能一起使用,以实现纯 IPv6 的客户端和纯 IPv4 的服务器之间的无缝通信。DNS64 允许仅限 IPV6 的客户端发现 IPv4 域,而 NAT64 允许客户端和服务器之间的通信。
为了合成 AAAA 记录,NetScaler 设备从 DNS 服务器获取 DNS A 记录。DNS64 前缀是在 NetScaler 设备上配置的 96 位 IPv6 前缀。NetScaler 设备通过连接 DNS64 前缀(96 位)和 IPv4 地址(32 位)来合成 AAAA 记录。
为了实现 IPv6 客户端和 IPv4 服务器之间的通信,配置为 DNS64 和 NAT64 的 NetScaler 设备可以部署在 IPv6 客户端或 IPv4 服务器端。在这两种情况下,NetScaler 设备上的 DNS64 配置都相似,包括充当 DNS 服务器代理服务器的负载平衡虚拟服务器。如果 NetScaler 设备部署在客户端,则必须在 IPv6 客户端上将负载平衡虚拟服务器指定为域的域名服务器。
以一个在 IPv4 端配置具有 DNS64 和 NAT64 配置的 NetScaler 设备为例。在此示例中,企业在服务器 S1 上托管站点 www.example.com,该服务器具有 IPv4 地址。为了启用 IPv6 客户端和 IPv4 服务器 S1 之间的通信,NetScaler 设备 NS1 采用 DNS64 和有状态的 NAT64 配置进行部署。
DNS64 配置包括 DNS 负载平衡虚拟服务器 LBVS-DNS64-1,在该服务器上启用了 DNS64 选项。还在 NS1 上配置了名为 dns64-Policy-1 的 DNS64 策略和名为 dns64-Action-1 的相关 DNS64 操作,dns64-Policy-1 绑定到 LBVS-DNS64-1。LBVS-DNS64-1 充当 DNS 服务器 DNS-1 和 DNS-2 的 DNS 代理服务器。
当到达 LBVS-DNS64-1 的流量符合 dns64-policy-1 中指定的条件时,将根据 dns64-Action-1 中的设置处理流量。dns64-Action-1 指定了合成 AAAA 记录时使用的 DNS64 前缀,以及从 DNS 服务器收到的 A 记录。
在 NetScaler 设备上启用了全局 DNS 参数 cacherecords,因此该设备会缓存 DNS 记录。此设置是 DNS64 正常工作所必需的。
下表列出了上述示例中使用的设置: DNS64 示例设置。
以下是此示例中的流量:
- IPv6 客户端 CL1 发送 DNS AAAA 请求,请求获取 www.example.com 网站的 IPv6 地址。
- 该请求由 NetScaler 设备 NS1 上的 DNS 负载平衡虚拟服务器 LBVS-DNS64-1 接收。
- NS1 检查其 DNS 缓存记录中是否存在所请求的 AAAA 记录,发现 DNS 缓存中不存在 www.example.com 网站的 AAA 记录。
- LBVS-DNS64-1 的负载平衡算法选择 DNS 服务器 DNS-1 并将 AAAA 请求转发给该服务器。
- 由于网站 www.example.com 托管在 IPv4 服务器上,因此 DNS 服务器 DNS-1 没有 www.example.com 网站的任何 AAAA 记录。
- DNS-1 向 LBVS-DNS64-1 发送空的 DNS AAAA 响应或错误消息。
- 由于 LBVS-DNS64-1 上启用了 DNS64 选项并且来自 CL1 的 AAAA 请求与 dns64-Policy-1 中指定的条件相匹配,因此 NS1 向 DNS-1 发送 DNS A 请求,要求获取 www.example.com 的 IPv4 地址。
- DNS-1 的回应是将 www.example.com 的 DNS A 记录发送给 LBVS-DNS64-1。A 记录包括 www.example.com 的 IPv4 地址。
- NS1 使用以下内容合成了 www.example.com 网站的 AAAA 记录:
- IPv6 address for site www.example.com = Concatenation of DNS64 Prefix (96 bits) specified in the associated DNS64action, and IPv4 address of DNS A record (32 bits) = 2001:DB8:300::192.0.2.60
- NS1 将合成的 AAAA 记录发送到 IPv6 客户端 CL1。NS1 还将 A 记录缓存到其内存中。NS1 使用缓存的 A 记录合成 AAAA 记录,用于后续的 AAAA 请求。
DNS64 配置需要考虑的几点
在 NetScaler 设备上配置 DNS64 之前,请考虑以下几点:
-
NetScaler 设备的 DNS64 功能符合 RFC 6174。
-
NetScaler 设备的 DNS64 功能不支持 DNSSEC。NetScaler 设备不会从从 DNS 服务器收到的 DNSSEC 响应中合成 AAAA 记录。只有在响应包含 RRSIG 记录时,该响应才被归类为 DNSSEC 响应。
-
NetScaler 设备支持长度仅为 96 位的 DNS64 前缀。
-
尽管 DNS64 功能与 NAT64 功能一起使用,但 DNS64 和 NAT64 配置在 NetScaler 设备上是独立的。对于特定流,必须为 DNS64 前缀和 NAT64 前缀参数指定相同的 IPv6 前缀值,以便客户端接收的合成 IPv6 地址路由到特定 NAT64 配置。有关在 NetScaler 设备上配置 NAT64 的更多信息,请参阅 Stateful NAT64。
-
以下是 NetScaler 设备处理 DN64 的不同案例:
-
如果来自 DNS 服务器的 AAAA 响应包含 AAAA 记录,则会检查响应中的每条记录是否存在在 NetScaler 设备上为特定 DNS64 配置的一组排除规则。NetScaler 将前缀与排除规则匹配的 IPv6 地址从响应中删除。如果生成的响应包含至少一个 IPv6 记录,则 NetScaler 设备会将此响应转发给客户端,否则,设备会合成来自该域 A 记录的 AAAA 响应并将其发送到 IPv6 客户端。
-
如果来自 DNS 服务器的 AAAA 响应为空应答响应,则设备会请求具有相同域名的 A 资源记录,或者如果设备是该域的真实域名服务器,则在自己的记录中进行搜索。如果请求结果为空答案或错误,则将相同的答案或错误转发给客户端。
-
如果来自 DNS 服务器的响应包含 RCODE=1(格式错误),则 NetScaler 设备会将其转发给客户端。如果在超时之前没有响应,NetScaler 设备会向客户端发送 RCODE=2(服务器故障)的响应。
-
如果来自 DNS 服务器的响应包含 CNAME,则会遵循该链,直到到达终止的 A 或 AAAA 记录。如果 CNAME 没有任何任何 AAAA 资源记录,NetScaler 设备将获取 DNS A 记录用于合成 AAAA 记录。CNAME 链与合成的 AAAA 记录一起添加到答案部分,然后发送给客户端。
-
-
NetScaler 设备的 DNS64 功能还支持响应 PTR 请求。当设备收到对 IPv6 地址域的 PTR 请求且 IPv6 地址与任何配置的 DNS64 前缀相匹配时,设备会创建一个 CNAME 记录,将 IP6-ARPA 域映射到相应的 IN-ADDR。ARPA 域和新成立的 IN-ADDR.ARPA 域用于解析。设备搜索本地 PTR 记录,如果记录不存在,则设备会向 DNS 服务器发送 IN-ADDR.ARPA 域的 PTR 请求。NetScaler 设备使用来自 DNS 服务器的响应来合成初始 PTR 请求的响应。
配置步骤
在 NetScaler 设备上为有状态的 NAT64 配置创建所需的实体涉及以下过程:
-
添加 DNS 服务。DNS 服务是 DNS 服务器的逻辑表示形式,NetScaler 设备用作 DNS 代理服务器。有关设置服务的可选参数的详细信息,请参阅 负载平衡。
-
添加 DNS64 操作和 DNS64 策略,然后将 DNS64 操作绑定到 DNS64 策略。DNS64 策略根据相关 DNS64 操作中的设置,指定与 DNS64 处理的流量匹配的条件。DNS64 操作指定强制性的 DNS64 前缀以及可选的排除规则和映射规则设置。
-
创建 DNS 负载平衡虚拟服务器并将 DNS 服务和 DNS64 策略绑定到该服务器。DNS 负载平衡虚拟服务器充当绑定的 DNS 服务代表的 DNS 服务器的 DNS 代理服务器。到达虚拟服务器的流量与针对 DNS64 处理的绑定 DNS64 策略进行匹配。有关设置负载平衡虚拟服务器的可选参数的详细信息,请参阅 负载平衡。
注意:CLI 针对这两个任务具有单独的命令,但 GUI 将它们合并在一个对话框中。
启用 DNS 记录的缓存。启用 NetScaler 设备的全局参数以缓存通过 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 类型的服务,请执行以下操作:
- 导航到流量管理 > 负载平衡 > 服务,然后添加新服务。
- 设置以下参数:
- 服务名称*
- 服务器*
- 协议*(从下拉列表中选择 DNS。)
- Port*(端口*)
要使用 GUI 创建 DNS64 操作,请执行以下操作:
导航到流量管理 > DNS > 操作,在 DNS Actions64 选项卡上,添加新的 DNS64 操作。
要使用 GUI 创建 DNS64 策略,请执行以下操作:
导航到流量管理 > DNS > 策略,在 DNS Policies64 选项卡上,添加新的 DNS64 策略。
要创建 DNS 负载平衡虚拟服务器并使用 GUI 将 DNS 服务和 DNS64 策略绑定到该虚拟服务器,请执行以下操作:
- 导航到“流量管理”>“负载平衡”>“虚拟服务器”,然后添加新的虚拟服务器。
- 设置以下参数:
- 名称*
- IP 地址*
- 协议*(从下拉列表中选择 DNS。)
- Port*(端口*)
- 选择“启用 DNS64”选项。
- 在“服务”窗格中,将服务绑定到虚拟服务器。
- 在策略窗格中,将策略绑定到虚拟服务器。
示例配置
> 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
<!--NeedCopy-->