CNAME 记录解析

CNAME 记录解析

我想了解 CNAME 记录解析的流程。假设我在 DNS 服务器 NS1 上有一条记录

proxy.example.com IN CNAME proxy.example1.com

NS1 对 example1.com 没有权威性。在服务器 NS2 上,我有一条记录

proxy.example1.com IN A 1.2.3.4

proxy.example1.com只能从客户端网络解析,而不能从 NS1 所在的网络解析。

如果客户端请求proxy.example.com,服务器 NS1 会尝试代表客户端解析整个链还是会返回名称proxy.example1.com?如果它尝试解析整个链,当由于无法从 NS1 访问 NS2 而失败时会发生什么?它会向客户端发送什么回复?

谢谢。

答案1

不,权威服务器只会用它拥有的数据来回答。
相反,在这种跨区域别名的情况下,解析器服务器应该拼凑出最终结果。

问题没有详细说明 DNS 设置中的任何异常(除了奇怪的缺乏连接,但这可能不相关),所以我只描述事情通常如何运作:

                                                    ____________________
                                                   |                    |
                                            +----->| a.root-servers.net |
                                            |      | zone: .            |
                                            |      |____________________|
                                            |      
                                            |       ____________________
                                            |      |                    |
                                            +----->| a.gtld-servers.net |
 ______________________       __________    |      | zone: com          |
|                      |     |          |   |      |____________________|
| Client/stub resolver |<--->| Resolver |<--+      
|______________________|     |__________|   |       ____________________
                                            |      |                    |
                                            +----->| "NS1"              |
                                            |      | zone: example.com  |
                                            |      |____________________|
                                            |      
                                            |       ____________________
                                            |      |                    |
                                            +----->| "NS2"              |
                                                   | zone: example1.com |
                                                   |____________________|

您的场景(没有任何缓存,只是为了简单起见):

  1. 客户端向解析器请求proxy.example.com. IN A
  2. 解析器a.root-servers.net请求proxy.example.com. IN A
    • com它获得了(指a.gtld-servers.net)的推荐响应
  3. 解析器a.gtld-servers.net请求proxy.example.com. IN A
    • example.com它获得了(指"NS1")的推荐响应
  4. 解析器"NS1"请求proxy.example.com IN A
    • 它得到了答案proxy.example.com. IN CNAME proxy.example1.com.
  5. 解析器a.root-servers.net请求proxy.example1.com. IN A
    • com它获得了(指a.gtld-servers.net)的推荐响应
  6. 解析器a.gtld-servers.net请求proxy.example1.com. IN A
    • example1.com它获得了(指"NS2")的推荐响应
  7. 解析器"NS2"请求proxy.example1.com. IN A
    • 它得到了答案proxy.example1.com. IN A 1.2.3.4
  8. 解析器最终响应客户端
    • 它发送一个答案,该答案结合了来自不同来源的必要数据:
      • proxy.example.com. IN CNAME proxy.example1.com.
      • proxy.example1.com. IN A 1.2.3.4
  9. 客户端可以看到别名定义以及规范名称(实际使用的名称)处请求的记录。

相关内容