我的 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 以使用两个名称服务器?
resolv.conf 和解析器的默认行为是按列出的顺序尝试服务器。如果第一个名称服务器超时,解析器只会尝试下一个名称服务器。resolv.conf 联机帮助页说:
和:
另请参阅resolver(5)手册页以获取更多信息。
您可以使用 更改解析器的行为
rotate
,这将以循环顺序查询名称服务器:SERVFAIL
但是,如果 nslookup从第一个名称服务器接收到 a,它将使用第二个名称服务器。从nslookup 联机帮助页:是的,您可以使用“旋转”和超时设置来改进 DNS 查找,下面是示例,
前任:
因此,要使其按预期工作,请安装 dnsmasq 或其他轻量级 DNS 中继器(或完整的 DNS 服务器)。请参阅DNS 服务器软件比较。
对于 dnsmasq 配置非常简单:
您还可以指定哪个 DNS 应该用于哪个域。例如:
这将使 dnsmasq
*.mcdc
在10.0.4.48
DNS 服务器和8.8.8.8
.在
/etc/resolv.conf
您只使用本地 DNS 的情况下:有关 dnsmasq 设置的更多详细信息,请在此处查看我的回答:https ://unix.stackexchange.com/questions/55090/change-default-dns-on-openvpn-connect/545591#545591 。
10.0.4.48 是递归 DNS 服务器又名解析器吗?
或者它只是您内部区域的权威服务器?
您应该设置一个内部解析器,该解析器也可能保存您的权威数据。
在 ubuntu 18.04 LTS 的 resolv conf 启动中添加以下命令
如果可以的话,我会以这种方式配置它。