resolv.conf 和 named.conf 转发器之间有什么区别?

resolv.conf 和 named.conf 转发器之间有什么区别?

当我对 Ubuntu 中的 DNS 创建过程进行故障排除时,我注意到以下文件显得多余:

etc/bind/named.conf.options (或 named.conf 的一部分,取决于文件的设置方式)

forwarders {
      1.2.3.4;
      5.6.7.8;
      9.10.11.12;
};

等/resolv.conf

domain example.com
nameserver 1.2.3.4
nameserver 5.6.7.8
nameserver 9.10.11.12

通常,当出现这样的观察时,我会发现自己做错了什么,所以如果我错了,请纠正我。似乎named.conf喜欢有机器的网络ip,而resolv.conf应该有127.0.0.1。除此之外,它们应该有我的isp的dns的ip,这将是相同的。谢谢你的帮助。

答案1

很难清楚地回答,因为我不知道你想要完成什么:

  • 您想使用自己的 BIND 服务器管理私有 DNS 区域吗?
  • 您是否只是想让 DNS 解析正常工作?
  • 您是否出于性能原因尝试设置本地缓存?

如果您要在服务器上运行本地 DNS 解析器,则应指向/etc/resolv.conf本地 BIND 服务器 (127.0.0.1),并让 BIND 从根名称服务器开始解析,就像任何其他名称服务器一样。您的 中不需要“转发器”条目named.conf。严格来说,通过保留“转发器”条目,您可以稍微减少根名称服务器的负载。

如果您只是尝试在您的机器上进行 DNS 解析,但是不需要自己运行 DNS 服务器,那么不用担心named.conf,只需指向/etc/resolv.conf您的 ISP 的 DNS 服务器即可。

编辑:

我突然意识到我没有回答你标题中的问题。

  • /etc/resolv.conf是您计算机上的解析器库(libc 的一部分)使用的文件,每个程序都会使用它来请求 DNS 查找。当您的 Web 浏览器想要进行 DNS 查找时,它会调用gethostbyname('www.blah.com')(或其派生函数之一)。该函数执行大量操作,其中包括读取/etc/resolv.conf并使用它来确定可以请求哪个 DNS 服务器为其执行查找。

  • /etc/named.conf由 BIND 使用。通常,当您向 BIND 发出请求时,它会检查其本地缓存,如果没有答案,它会询问其中一个根名称服务器。根服务器“委托”给(通常)GTLD 或国家/地区级服务器。然后,这些服务器将委托给域的所有者。通常它就到此为止,但有时对于子域,还会有一个或多个委托级别。这加起来需要 3 - 5 个查询才能获得答案。然后将答案添加到本地缓存并返回给请求客户端。如果您指定“转发器”,BIND 只会向列出的主机之一(通常是您的 ISP 的 DNS 服务器)发出单个请求,并让它们完成所有繁重的工作。它会收到对其单个查询的回复,并将回复返回给客户端。

相关内容