当我对 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 服务器)发出单个请求,并让它们完成所有繁重的工作。它会收到对其单个查询的回复,并将回复返回给客户端。