You need to enable JavaScript to run this app.
导航
实现递归解析
最近更新时间:2024.09.20 10:08:47首次发布时间:2023.02.08 13:10:14

本文档介绍如何在火山引擎私网解析(PrivateZone)中为一个域名开启递归解析。

什么是递归解析

在递归解析中,私网解析 PrivateZone 向公网递归 DNS 服务器发送递归查询请求,公网递归 DNS 服务器会返回从公网权威 DNS 服务器获取的 DNS 查询结果。

递归解析的匹配顺序与匹配条件

如果 DNS 查询请求满足以下任意一个条件,则匹配成功:

  • 匹配条件一:DNS 查询请求的域名不匹配私网解析 PrivateZone 中的域名或云产品权威域名,也不匹配任何类型为 转发到外部DNS系统 的转发规则。
  • 匹配条件二:DNS 查询请求的域名匹配您在私网解析 PrivateZone 中添加的域名。您添加的域名开启了递归解析,且 DNS 查询请求的域名不在您添加的域名的解析记录中。

对于 匹配条件二,域名开启了递归解析是该匹配条件生效的必要条件。如果您在私网解析 PrivateZone 创建了一个主域名,且您希望主域名的子域名分别被映射到 VPC 内的资源和互联网上的资源,您可以为该主域名开启递归解析。另外,递归解析也可以作为兜底。为一个域名开启递归解析后,对于所有不在解析记录中的子域名,私网解析 PrivateZone 可以返回从公网递归 DNS 服务器获取的查询结果,而不是解析失败。

说明

域名是否开启递归解析不影响 匹配条件一

例如,您在私网解析 PrivateZone 创建了一个主域名 example.com,您希望 ecs.example.comrds.example.com被映射到 VPC 内的资源,api.example.comwww.example.com 等域名被映射到互联网上的资源。在这种情况下,您可以为主域名开启递归解析。

私网解析 PrivateZone 如何通过递归解析从互联网获取 DNS 解析结果

如果 DNS 查询请求匹配递归解析,解析器首先在缓存中查询是否有按转发规则获取的解析记录。

  • 如果在缓存中找到了匹配的解析记录,那么解析器会返回该解析记录。此时,DNS 解析完成。
  • 如果在缓存中没有找到匹配的解析记录,解析器会向公网 Local DNS 服务器或私网解析 PrivateZone 内置的公网递归 DNS 服务器发送 DNS 查询请求:
    • 如果 DNS 查询请求匹配到了类型为 自定义线路 的转发规则,解析器就会按照匹配的转发规则把 DNS 查询请求转发到私网解析 PrivateZone 内置的互联网递归 DNS 服务器,并把 DNS 响应返回给客户端。解析器也会在缓存中保存该记录。此时,DNS 解析完成。参见 通过转发规则自定义递归解析的出口运营商和地理位置
    • 如果 DNS 查询请求没有匹配到类型为 自定义线路 的转发规则,解析器会把 DNS 查询请求转发到公网 Local DNS 服务器,并把 DNS 响应返回给客户端。解析器也会在缓存中保存该记录。此时,DNS 解析完成。

注意

如果 DNS 查询请求被发送到互联网,DNS 解析的延时会增加、变更生效会变慢。因此,我们建议您尽可能将解析记录指向 VPC 内的 IP 地址。

示例场景

假设您为一个 VPC 关联了域名 example.com。您有以下业务需求:

  • 子域名 ecs.example.com 在域名的解析记录中。VPC 内的资源发送对 ecs.example.com 子域名的解析请求时,私网解析 PrivateZone 会返回记录值 10.0.1.128
  • VPC 内的资源需要访问指定子域名 api.example.comwww.example.com。这些子域名分别指向 API 服务器和网站的互联网 IP 地址。
  • 对于其他没有在解析记录中的子域名,私网解析 PrivateZone 会返回从公网递归 DNS 服务器获取的查询结果,而不是解析失败。

在这种情况下,您可以为域名 example.com 开启递归解析功能。递归解析功能开启之后,VPC 内的资源访问 api.example.com 时,私网解析 PrivateZone 会通过公网递归 DNS 服务器进行查询并返回解析结果。
图片

操作步骤

完成以下步骤为一个域名开启递归解析。

步骤一:添加域名

添加域名 example.com。您需要在添加域名时开启递归解析。参见 添加域名 了解如何添加一个域名。

步骤二:添加解析记录

为域名 example.com 添加一条解析记录:

  • 域名:您需要把主机记录(域名前缀)设置为 ecs。这样,域名就是 ecs.example.com
  • 记录类型:您需要把该参数设置为 A
  • 记录值:您需要把该参数设置为 ECS 的私网 IP 地址,即 10.0.1.128

参见 添加解析记录 了解如何添加一条解析记录。

步骤三:验证递归解析是否生效

  1. 远程连接到域名所关联的 VPC 中的 ECS 实例。使用 nslookup 命令验证递归解析是否对 api.example.com 生效。如果 DNS 响应是一个互联网 IP 地址,则说明递归解析生效。

    $ nslookup api.example.com
    
    Server:         100.96.0.2
    Address:        100.96.0.2#53
    
    Non-authoritative answer:
    Name:   api.example.com
    Address: xx.xxx.xxx.xx
    
  2. 参见 更新域名配置example.com递归解析 设置为 关闭

  3. 在 ECS 实例中,使用 nslookup 命令验证 api.example.com 是否还能被成功解析。如果 DNS 解析失败,则说明递归解析已经被关闭。

    $ nslookup api.example.com
    
    Server:         100.96.0.2
    Address:        100.96.0.2#53
       
    ** server can't find api.example.com: NXDOMAIN
    
  4. (可选)如果您需要指定公网递归 DNS 服务器出口 IP 地址的网络运营商和地理位置,您可以创建一条类型为 自定义线路 的转发规则。参见 通过转发规则自定义递归解析的出口运营商和地理位置