resolv.conf 中具有唯一 DNS 服务器的多个域

resolv.conf 中具有唯一 DNS 服务器的多个域

我有以下resolv.conf域名example1.com

search example1.com
nameserver x.x.x.1
nameserver x.x.x.2

现在,我想扩展我的resolv.conf以包括example2.com。我该如何编写我的resolv.conf

看完之后resolv.conf 手册我想到的是这个页面:

search example1.com example2.com
nameserver x.x.x.1
nameserver x.x.x.2
nameserver x.x.x.3 # for example2.com
nameserver x.x.x.4 # for example2.com

我知道将example2.com首先在前两个名称服务器中查找并且会超时,但是当到达第三个名称服务器时它就可以工作了,不是吗?

有人可以解释一下这个问题吗?

答案1

解析器库的设计基于统一的 DNS 命名空间假设。多个名称服务器/etc/resolv.conf仅用于冗余,以防某些名称服务器无法访问或不可用。

具体来说,如果第一个查询的名称服务器不知道域名,它不是超时但返回NXDOMAIN,表示“该域名不存在”。因此,解析器将不是联系列表中的下一个名称服务器,希望得到不同的答案,但会接受该结果并将其传递给执行查询的应用程序。

此外,无法保证解析器库函数会按照 中给出的顺序查询名称服务器/etc/resolv.conf。可以自由地重新排序,例如根据它们过去的响应速度。

最后,该search语句并不像您想象的那样工作。它只是列出了应附加到无法解析的域名的域。

总之,你提议的resolv.conf文件

search example1.com example2.com
nameserver x.x.x.1
nameserver x.x.x.2
nameserver x.x.x.3
nameserver x.x.x.4

当应用程序尝试解析名称时产生以下行为dst.host

  1. 从列表x.x.x.1x.x.x.2x.x.x.3x.x.x.4向任意名称服务器询问域名dst.host.
  2. 如果请求超时,则继续询问列表中的其他名称服务器,直到其中一个回复。如果没有回复,则向应用程序返回错误。
  3. 如果答复是不是NXDOMAIN,将找到的结果返回给应用程序。
  4. 如果答复NXDOMAIN,重复步骤 1 至 3,这次询问域名dst.host.example1.com.
  5. 如果答复再次是 NXDOMAIN,请重复步骤 1 至 3,这次询问域名dst.host.example2.com.
  6. 如果答复再次是 NXDOMAIN,则将结果 NXDOMAIN(未找到)返回给应用程序。

如果您遇到分割水平的情况,需要为不同的域查询不同的名称服务器,那么您需要使用 DNS 代理,dnsmasq它能够根据域将查询转发到不同的名称服务器。

相关内容