如果注册了多个名称服务器,将选择哪个名称服务器来处理 DNS 查询

如果注册了多个名称服务器,将选择哪个名称服务器来处理 DNS 查询

我们在 tld 服务器中为我们的域名注册了 4 个名称服务器。以下是我们的 NS 记录示例。

example.com. 172800 IN NS ns1.example.com.
example.com. 172800 IN NS ns2.example.com.
example.com. 172800 IN NS ns3.example.com.
example.com. 172800 IN NS ns4.example.com.

我这里有三个问题。

1.我只想知道将选择哪个名称服务器来处理 DNS 查询,随机还是有序?

2.是否可能根据客户端IP地址的位置来选择名称服务器?

3.如果向 ns3.example.com 发送了 DNS 查询,但该名称服务器在一定时间内没有响应,下一步该怎么办?此 DNS 查询是否会发送到另一个名称服务器?

4.如果一个域名有多个 A 记录,应该选择哪一个?例如,

ns1.example.com 172800 IN A 192.168.1.3 
ns1.example.com 172800 IN A 192.168.1.4

DNS 查询将返回哪个 IP?

答案1

  1. 选择查询哪个权威服务器由解析器服务器任意决定。策略的细节是特定于实现的。期望任何权威服务器都可以接收任何查询,并且必须能够回答所有查询。

  2. 这并不意味着您可以以任何方式依赖它。
    但是,例如,如果客户端靠近查询权威服务器的解析器服务器,并且该解析器实现喜欢根据低延迟锁定到特定服务器,那么如果有稳定的查询流,您可能会间接获得这种效果。

  3. 解析器服务器应该尝试其他服务器,直到收到响应(当然是理想情况)、所有选项都用尽或整个操作超时。

答案2

1.我只想知道将选择哪个名称服务器来处理 DNS 查询,随机还是有序?

这取决于您域名的权威名称服务器如何配置响应,以及您的解析器如何处理等效记录。

在 Bind DNS 中,rrset-order默认为循环/轮询。轮询似乎也是其他名称服务器的默认设置。

Rounnd-Robin 实际上并不是随机的,对于每个后续请求,名称服务器都会将顶部记录移动到堆栈的底部:

  • 请求 #01 将按 NS1、NS2、NS3、NS4 排序
  • 请求 #02 将按 NS2、NS3、NS4、NS1 排序
  • 请求 #03 将按 NS3、NS4、NS1、NS2 排序
  • 请求 #04 将按 NS4、NS1、NS2、NS3 排序
  • 请求 #05 将再次按 NS1、NS2、NS3、NS4 排序
  • 请求 #06 的排序与请求 #2 的排序相同:NS2、NS3、NS4、NS1
  • 请求 #07 将与请求 #3 排序相同,等等。

由于您不知道名称服务器在您自己连续两次请求之间响应了多少请求,因此循环的效果对您来说可能显得不确定。

2.是否可能根据客户端IP地址的位置来选择名称服务器?

是的。

有些...

对于更好的 DNS 托管提供商来说,相当典型的做法是配置权威名称服务器的 IP 地址任播这简化了允许同一个 IP 地址托管在多个地理位置的过程。

然后,路由协议会​​将客户端的 DNS 请求定向到“最近的”名称服务器,但该距离是以网络路由来衡量的,而不是实际的地理距离……

一旦客户端请求通过任播到达最近的名称服务器,那么名称服务器可能会配置 geo-ip 数据库,并根据与客户端 ip 地址相关联的实际地理位置返回不同的结果(例如 www.example.com 的不同 ip 地址)。

3.如果向 ns3.example.com 发送了 DNS 查询,但该名称服务器在一定时间内没有响应,下一步该怎么办?此 DNS 查询是否会发送到另一个名称服务器?

是的。

答案3

名称服务器将随机选择,如果一个名称服务器关闭,客户端将自动选择另一个名称服务器。客户端本身不会选择靠近服务器的名称服务器,但是,一些 DNS 提供商可以提供许多“技巧”。例如,Amazon 的 Route 53 提供地理位置查询。这不会影响域的名称服务器,但允许您创建遵循地理位置策略的 A、MX 等记录。对于您来说,如果您想托管自己的 DNS,您可以向亚马逊注册 ns1.example.com,然后使用地理位置路由策略将查询路由到靠近客户端的服务器。我个人认为这样做没有意义,但如果您真的想这样做,这是可能的。

大型公司在世界各地的多个数据中心托管公共 IP 地址也很常见。例如,谷歌的 DNS 服务器是 8.8.8.8。根据位置和网络健康状况,到 8.8.8.8 的流量将路由到最近的谷歌数据中心。

相关内容