我在 Linux 中配置了 DNS 服务器作为转发器。
它仅将 DNS 查询转发到组织的主 DNS 服务器。
在 Windows 客户端(在组织的分支机构中)中,主 DNS 设置为自己的 DNS 服务器,
备用 DNS 服务器设置为我的(转发器 DNS)。
如果我的 DNS 服务器设置为备用,则无法解析。
但是当我的 DNS 服务器设置为主时,解析就可以了。
当设置为备用 DNS 时,如何使我的 DNS 服务器正常工作?
答案1
基本的 DNS 解析器(如 Windows 客户端中的解析器)假设:为其配置的每个 DNS 服务器都知道或可以找到需要知道的一切,如果一台服务器说某些内容不存在,则向另一台服务器询问第二意见是没有意义的。
DNS 服务器在获取信息的来源方面可以具有更大的灵活性。许多 DNS 服务器可以配置为有选择地转发请求:“如果请求是关于域的X.Y.example
,则将请求转发到服务器 A,如果是关于任何其他域的请求Y.example
,则转发到服务器 B,否则尝试通过询问互联网的 DNS 服务器来自行解决” ”。
但这不是设置 DNS 解析的正常方法。
如果主 DNS 服务器中的信息是关于域的Y.example
,并且您的 DNS 服务器有关于子域的信息X.Y.example
,那么主 DNS 服务器应该有所谓的胶水记录在其有关域的信息中Y.example
。就像是:
X.Y.example. IN NS <your.DNS.server.name.>
如果您的 DNS 服务器位于域内Y.example
(即域X.Y.example
或域Y.example
或其任何其他子域的一部分),还:
<your.DNS.server.name.> IN A <your DNS server IP address>
NS 记录将告诉主 DNS 服务器联系您的 DNS 服务器以获取有关X.Y.example
域的任何信息。这被称为DNS 委托。 A 记录只是提供要连接的地址:a胶水记录。
如果您的名称服务器中的信息与不相关的域有关,例如Z.other.example
,则有以下三个选项:
- 主域名服务器可能与您的 DNS 服务器有特殊关系,以便它可以下载
Z.other.example
域内容的完整副本,并通过定期检查您的 DNS 服务器来自动保持最新状态。这通常称为master/slave
关系:您的服务器将是 的主权威机构Z.other.example
,但主 DNS 服务器将完全了解该域的内容,并且能够根据下载的数据做出权威答复。
使用 BIND,这意味着您的服务器将具有如下内容:
options {
allow-transfer { <IP address of primary DNS server>; };
# The next line is not absolutely necessary but speeds up propagation of updates:
also-notify { <IP address of primary DNS server>; };
<... any other options here...>
};
主服务器将具有:
zone "Z.other.example" {
type slave;
masters { <IP address of your DNS server>; };
};
是的,这意味着该组织的基本的DNS 服务器将是从属服务器Z.other.example
仅适用于域。对于其他域/区域,这不会产生任何影响。
通常这种关系意味着主 DNS 服务器也可以列在该Z.other.example
域的 NS 记录中,但是你不必那么做如果该域仅供主 DNS 服务器的用户内部使用。
- 或者主 DNS 服务器可能被配置为有条件地转发查询:“如果请求是关于 Z.other.example,则将其转发到您的 DNS 服务器而不是执行任何其他操作”。有时,这是通过组织的内部 DNS 域来完成的,这些域的存在不应在任何公共 NS 记录中透露。
为此,主服务器需要:
zone "Z.other.example" {
type forward;
forwarders { <IP of your DNS server>; };
forward only;
};
- 或者,如果没有特殊配置,则 DNS 服务器必须存在 NS 记录链才能找到您的
Z.other.example
域:- 根DNS服务器必须有NS记录(以及相应的A记录),指出
example
顶级域的DNS服务器 - 域
example
服务器必须有指向other.example
二级域的DNS服务器的NS记录 - 并且该域的 DNS 服务器
other.example
必须有指向您负责 的 DNS 服务器的 NS 记录Z.other.example
。
- 根DNS服务器必须有NS记录(以及相应的A记录),指出
这样,主 DNS 服务器就能够找到您的域,就像互联网上的任何其他域一样。
如果您尝试让您的 DNS 服务器仅向Y.example
域提供一些附加记录,那是行不通的。
如果 DNS 服务器对特定域(不包括委托的子域,如果有)具有权威性,那么它必须始终完全了解该域的内容;对于处于权威地位的 DNS 服务器来说,不存在“可能”这样的事情。如果主 DNS 服务器是该机构的权威机构Y.example
,并且在查询时X.Y.example
没有该记录且没有匹配的子域委托,则其“没有此类主机/域”响应将是人类术语:
“我知道关于 Y.example 的一切,而且绝对不存在 XYexample 这样的东西。”
从技术上讲,也许可以让主服务器拒绝对您的域的查询,以便客户端会询问备用 DNS 服务器,但是我强烈建议反对。
此类设置一开始可能看起来有效,但往往会以意想不到的方式失败,特别是当其中一个或另一个名称服务器暂时无法访问时。许多人尝试过这样的设置,但都失败了。学习经历往往涉及一次痛苦的故障排除过程。不是您的选择和/或更有经验的 DNS 管理员会提醒您帮助解决问题。