如果辅助 DNS 服务器关闭,ubuntu 无法解析

如果辅助 DNS 服务器关闭,ubuntu 无法解析

我正在尝试使用两个本地 DNS 服务器。当我关闭第二个(或主)DNS 服务器时,我无法解析任何域名。

使用host命令否则nslookup我会收到超时错误:

root@ubuntu:~# host testsrv.lan
;; connection timed out; no servers could be reached
root@ubuntu:~# nslookup testsrv.lan
;; Got recursion not available from 10.0.3.4, trying next server
;; connection timed out; no servers could be reached

但是当我尝试dig命令时我得到了正确的答案:

root@ubuntu:~# dig testsrv.lan   
; <<>> DiG 9.9.5-3ubuntu0.2-Ubuntu <<>> testsrv.lan
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7759
;; flags: qr rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;testsrv.lan.           IN  A

;; ANSWER SECTION:
testsrv.lan.        5   IN  A   10.0.3.4

;; Query time: 2 msec
;; SERVER: 10.0.3.4#53(10.0.3.4)
;; WHEN: Thu Jun 04 17:54:28 CET 2015
;; MSG SIZE  rcvd: 56

(主 DNS 服务器是 10.0.3.4,我已添加 A 记录:testsrv.lan --> 10.0.3.4)

我已经使用 tcpdump 来检查底层发生的情况: tcpdump -vvv -l -n -i any "udp port 53"我注意到第一个服务器正确响应了来自我的主机的 dns 请求,但是主机始终尝试请求第二个服务器并超时。

当两个 DNS 服务器中的任何一个发生故障时,ubuntu(特别是 resolvconf 服务)不是应该“容错”吗?这是解析域名时的默认行为吗?它在哪里有记录吗?我们可以更改吗?

注意:我使用的是 ubuntu 14.04 服务器,DNS 是使用 /etc/network/interface 配置的dns-nameservers 10.0.3.4 10.0.3.5

任何帮助我都感激不尽。谢谢。

答案1

DNS 服务器可以配置为以两种不同的方式运行。它要么作为一个或多个区域的权威 DNS 服务器运行,要么作为缓存递归解析器运行。(这个答案有更多关于差异的详细信息。)

可以配置一个 DNS 服务器同时执行这两项操作,但在执行此操作之前,您需要充分了解两者之间的区别。如果对区别了解不够,您最终可能会得到一个与预期不同的设置。

典型的 DNS 解析流程始于客户端向递归器发送查询。递归器会根据需要向尽可能多的权威 DNS 服务器发送查询,以便向客户端发送回复。

当两台服务器都启动时,它可以正常工作,而当其中一台服务器关闭时,它就无法正常工作,一个可能的解释是,你将一台服务器配置为递归服务器,另一台服务器配置为权威服务器。当两台服务器都启动时,客户端可以向递归服务器发送查询,然后递归服务器向权威服务器询问,权威服务器对递归服务器的答复随后被发送到客户端。

客户端和递归服务器之间的通信与递归服务器和权威服务器之间的通信并不完全相同。每个 DNS 查询都有一个位来指示它是哪种类型的查询。DNS 响应还将指示响应服务器是否是递归服务器。因此,尽管在某些情况下可能会收到错误类型查询的回复,但客户端和服务器都有机会发现存在问题并拒绝向用户提供答案。

如果您想要配置一对冗余 DNS 服务器,那么将其中一个配置为递归服务器而将另一个配置为权威服务器肯定不是您想要的。冗余对意味着您将其中一个配置为能够独立执行您希望它能够执行的操作,然后以相同方式配置另一个。

您在网络配置中指定的 DNS 服务器必须是递归服务器。因此,如果您希望这些 DNS 服务器位于 或/etc/resolv.conf中的某个其他网络配置文件中/etc,那么您需要的是一对冗余的递归服务器。

此外,所有工具hostnslookupdig都默认发送适合发送给递归器的查询。如果您想直接针对权威服务器使用这些工具,则需要告知该工具,例如使用dig +norecurse

相关内容