我在 Virtualbox 中以访客身份使用 Debian 进行了简单安装。我安装了这个resolvconf
包。 resolv.conf 文件是这样的:
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 8.8.8.8
nameserver 10.3.x.x
nameserver 10.219.x.x
我通过 GUI(应用程序/系统工具/网络工具)添加了名称服务器。
8.8.8.8 是 Google 的 DNS,我想用它来解析互联网地址。10.3.xx 和 10.219.xx 是解析 teleportal.company.intra 等内部域所需的。
当我在 resolv.conf 中有这些名称服务器(并且 8.8.8.8 是第一个)时,我在查询内部地址时收到错误:
> host teleportal.company.intra
Host teleportal.company.intra not found: 3(NXDOMAIN)
但是,如果我明确将第二个nameserver
地址设置为 nslookup 的名称服务器,则它可以工作:
» nslookup teleportal.company.intra 10.3.x.x
Server: 10.3.x.x
Address: 10.3.x.x#53
teleportal.company.intra canonical name = proxy.dummy1.dummy2.private.
Name: proxy.dummy1.dummy2.private
Address: 172.27.x.x
Name: proxy.dummy1.dummy2.private
Address: 172.27.x.x
resolv.conf 文档指出,nameserver
如果其中一个条目无法解析查询,则将按顺序尝试这些条目。但是,如果我在使用时打开调试,nslookup
我会发现nslookup
甚至不会尝试其他条目,而只会尝试第一个条目。
如果我更改 的顺序nameservers
,则内部地址将被正确解析(nslookup 仍然仅使用第一个条目)。
我如何设置 3 个名称服务器,以便实用程序按顺序使用所有这些服务器?
答案1
仅在超时的情况下才会逐个联系名称服务器列表resolv.conf
。当一个名称服务器权威地表示“没有这样的域”(NXDOMAIN
)时则不会。在您的情况下,DNS8.8.8.8
显然不知道teleportal.company.intra
,解析器在获得 时停止了NXDOMAIN
。
如果可能,您应该配置一台 DNS 服务器并将其用于所有解析,并让 DNS 服务器决定如何解析名称。如果10.3.x.x
是您的 Intranet DNS 服务器,它也可能能够解析 Internet 主机名。
话虽如此,如果您确实想根据名称将请求转发到不同的 DNS 服务器,您可以尝试数据中心。它是一个在本地运行的缓存 DNS 代理程序。安装它 ( apt-get install pdnsd
) 并将您的本地主机 ( 127.0.0.1
) 添加到 resolv.conf。在pdnsd.conf
配置文件中,您可以指定根据名称匹配联系哪些 DNS 服务器。您的示例段落/etc/pdnsd.conf
:
server {
label= "google";
exclude = ".company.intra";
ip = 8.8.8.8;
}
server {
label= "intra";
include = ".company.intra";
ip = 10.3.x.x;
}
我在上面的文件中剪掉了许多其他参数。您应该遵循 debian 软件包附带的文档和示例配置文件来设置您的pdnsd.conf
.
答案2
我思考解析器回退到二级(或三级或......)DNS仅当第一个(或第二个或...)失败时。
在这种情况下,查询没有失败,正确返回NXDOMAIN
,即域名不存在。
如果您确实想使用 Google 的 DNS(或任何其他 DNS)来解析外部域(而不是您的内部名称服务器),您可以配置您的服务器10.3.x.x
并仅10.219.x.x
用于authoritative
您的内部名称,并将所有其他查询转发到外部 DNS,然后使用您的内部名称服务器作为您的仅有的您内部计算机上的名称服务器。