wget未获取/etc/resolv.conf中的第二个名称服务器


14

我的resolv.conf看起来像这样:

; generated by /sbin/dhclient-script
search mcdc
nameserver 10.0.4.48
nameserver 8.8.8.8

如果我这样做的nslookup www.google.com

nslookup www.google.com
;; Got SERVFAIL reply from 10.0.4.48, trying next server
Server:     8.8.8.8
Address:    8.8.8.8#53

Non-authoritative answer:
www.google.com  canonical name = www.l.google.com.

但是当我卷曲www.google.com时,它无法解析主机。

我尝试在strace下运行curl,发现curl只在resolv.conf中使用第一个名称服务器,而不使用第二个。如果我改换两个名称服务器行,则www.google.com会解析,但内部DNS名称不会,所以那不是一个好的解决方法。

如何修复resolv.conf以同时使用两个名称服务器?

Answers:


24

resolv.conf和解析程序的默认行为是按列出的顺序尝试服务器。如果第一个名称服务器超时,则解析程序将仅尝试下一个名称服务器。该resolv.conf的手册页说:

名称服务器名称服务器IP地址

解析程序应查询的名称服务器的Internet地址(点符号)。最多可以列出MAXNS个(当前为3个,请参阅参考资料)名称服务器,每个关键字一个。 如果有多个服务器,则解析器库按列出的顺序查询它们。

和:

(使用的算法是尝试使用名称服务器,如果查询超时,请尝试下一个,直到名称服务器用尽,然后重复尝试所有名称服务器,直到进行最大重试。)

另请参见resolver(5)手册页以获取更多信息。

您可以使用来更改解析程序的行为rotate,它将以循环顺序查询名称服务器:

旋转_res.options中的RES_ROTATE集合,这将导致从列出的名称服务器中轮流选择名称服务器。这具有将查询负载分散到所有列出的服务器之间的作用,而不是让所有客户端每次都首先尝试第一个列出的服务器。

但是,如果nslookup SERVFAIL从第一个名称服务器接收到,它将使用第二个名称服务器。从nslookup联机帮助页

[no] fail如果名称服务器以SERVFAIL或引用(nofail)响应或终止查询(失败),则尝试下一个名称服务器。

(默认= nofail)


2

是的,您可以使用“旋转”和超时设置来改善DNS查找,以下是示例,

例如:

[root@centos-xxxxxx ~]# cat /etc/resolv.conf
options rotate
options timeout:1
search xyz.abc.local
nameserver 192.168.56.3
nameserver 10.0.2.4

1

10.0.4.48是递归DNS服务器又名解析器吗?

还是仅是内部区域的权威服务器?

您应该设置一个内部解析器,该解析器可能还会保存您的权威数据。


0

因此,要使其按预期工作,请安装dnsmasq或其他轻型DNS中继器(或功能全面的DNS服务器)。请参阅DNS服务器软件比较

对于dnsmasq的配置非常简单:

server=10.0.4.48
server=8.8.8.8

您还可以指定应将哪些DNS用于哪个域。例如:

server=/mcdc/10.0.4.48
server=8.8.8.8

这将使dnsmasq *.mcdc10.0.4.48DNS服务器中寻找其他域名8.8.8.8

/etc/resolv.conf您只使用您的本地DNS:

nameserver 127.0.0.1

有关dnsmasq设置的更多详细信息,请在这里查看我的答案:https : //unix.stackexchange.com/questions/55090/change-default-dns-on-openvpn-connect/545591#545591


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.