首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >替代DNS服务器无法解析

替代DNS服务器无法解析
EN

Unix & Linux用户
提问于 2020-04-01 07:08:45
回答 1查看 382关注 0票数 0

我将Linux中的DNS服务器配置为转发器。

它只将DNS查询转发到组织的主DNS服务器。

在Windows客户端(在组织分支中),主DNS设置为其自己的DNS服务器,

另一种选择被设置为mine (转发器DNS)。

如果我的DNS服务器被设置为替代服务器,它将无法解析。

但是,当我的DNS服务器被设置为主服务器时,解析工作正常。

如果将DNS服务器设置为替代DNS,如何使其工作?

EN

回答 1

Unix & Linux用户

发布于 2020-04-02 09:02:01

基本DNS解析器(如Windows客户端中的DNS解析器)假设为其配置的每个DNS服务器都知道或能够找到需要知道的所有内容,而且如果一台服务器说不存在什么东西,那么向另一台服务器请求第二种意见是没有意义的。

DNS服务器可以在获取信息的地方具有更大的灵活性。许多DNS服务器可以配置为有选择地转发请求:“如果请求涉及域X.Y.example,则将请求转发到服务器A,如果涉及任何其他Y.example,则转发到服务器B,否则尝试通过询问internet的DNS服务器解决它。”

但这不是建立DNS解析的正常方式。

如果主DNS服务器中的信息是关于域Y.example的,而您的DNS服务器有关于子域X.Y.example的信息,那么主DNS服务器应该在其Y.example域中的信息中有所谓的胶水记录。类似于:

代码语言:javascript
运行
复制
X.Y.example.            IN NS <your.DNS.server.name.>

如果您的DNS服务器位于Y.example域中(即X.Y.example域的一部分,或Y.example域或其任何其他子域的一部分),也可以:

代码语言:javascript
运行
复制
<your.DNS.server.name.> IN A <your DNS server IP address>

NS记录将告诉主DNS服务器与您的DNS服务器联系,以获取有关X.Y.example域的任何信息。这被称为DNS委托。A记录只是提供要连接到的地址:胶水记录。

如果名称服务器中的信息与一个无关的域有关,例如Z.other.example,那么有三个选项:

  • 主名称服务器可能与您的DNS服务器有特殊关系,因此它可以下载Z.other.example域内容的完整副本,并通过定期检查您的DNS服务器来自动更新它。这通常被称为master/slave关系:您的服务器将是Z.other.example上的主权威,但是主DNS服务器将完全了解该域的内容,并且能够根据下载的数据权威地回答。

使用BIND,这意味着您的服务器将拥有如下内容:

代码语言:javascript
运行
复制
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...>
}; 

主服务器将有:

代码语言:javascript
运行
复制
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记录中显示。

为此,主服务器需要有:

代码语言:javascript
运行
复制
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记录。
    • 并且other.example域的DNS服务器必须有指向您的DNS服务器的NS记录,作为Z.other.example的负责人。

这样,主DNS服务器就可以找到您的域,就像internet上的任何其他域一样。

如果您试图使您的DNS服务器只向Y.example域提供一些额外的记录,这是行不通的。

如果DNS服务器对特定域具有权威性(不包括委托子域,如果有的话),那么它必须始终对该域的内容有完整的了解;对于处于权威位置的DNS服务器来说,没有“可能”这样的东西。如果主DNS服务器是Y.example的权威,并且当被查询到X.Y.example时,它没有记录,也没有匹配的子域委托,那么它的“没有这样的主机/域”响应将是人工的:

“我知道关于Y.example的一切,而且绝对没有X.Y.example这样的东西。”

从技术上讲,可以让主服务器拒绝对您的域的查询,这样客户端就会请求替代DNS服务器,但我强烈建议您不要这样做。

这样的设置一开始可能看起来很有效,但往往以意想不到的方式失败,特别是当其中一个名称服务器暂时无法到达时。许多人尝试过这样的设置,但都失败了。学习经验往往涉及在您不选择的时候进行痛苦的故障排除会话,以及/或来自更有经验的DNS管理员的提示,以帮助解决问题。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/577222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档