我想了解 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 |
|____________________|
您的场景(没有任何缓存,只是为了简单起见):
- 客户端向解析器请求
proxy.example.com. IN A
- 解析器
a.root-servers.net
请求proxy.example.com. IN A
com
它获得了(指a.gtld-servers.net
)的推荐响应
- 解析器
a.gtld-servers.net
请求proxy.example.com. IN A
example.com
它获得了(指"NS1"
)的推荐响应
- 解析器
"NS1"
请求proxy.example.com IN A
- 它得到了答案
proxy.example.com. IN CNAME proxy.example1.com.
- 它得到了答案
- 解析器
a.root-servers.net
请求proxy.example1.com. IN A
com
它获得了(指a.gtld-servers.net
)的推荐响应
- 解析器
a.gtld-servers.net
请求proxy.example1.com. IN A
example1.com
它获得了(指"NS2"
)的推荐响应
- 解析器
"NS2"
请求proxy.example1.com. IN A
- 它得到了答案
proxy.example1.com. IN A 1.2.3.4
- 它得到了答案
- 解析器最终响应客户端
- 它发送一个答案,该答案结合了来自不同来源的必要数据:
proxy.example.com. IN CNAME proxy.example1.com.
proxy.example1.com. IN A 1.2.3.4
- 它发送一个答案,该答案结合了来自不同来源的必要数据:
- 客户端可以看到别名定义以及规范名称(实际使用的名称)处请求的记录。