AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 909064
Accepted
Martin
Martin
Asked: 2018-04-24 10:48:13 +0800 CST2018-04-24 10:48:13 +0800 CST 2018-04-24 10:48:13 +0800 CST

何时查询 DNS 域顶端的 NS 记录?

  • 772

假设我有以下example.com区域:

$TTL 120

@               IN      SOA     ns1     hostmaster (2018041509
                                                    300
                                                    150
                                                    600
                                                    60)

                IN      NS      ns1
                IN      NS      ns2


ns1             IN      A       192.168.0.159
ns2             IN      A       192.168.0.160

blah            IN      A       192.168.0.141

如上所示,ns1.example.com并且ns2.example.com是该区域的两个权威名称服务器。其他名称服务器何时查询它们?NS根据我的测试,唯一一次查询这两条记录是我192.168.0.159使用 DNS 查找实用程序(即dig @192.168.0.159 -t NS example.com.

domain-name-system
  • 1 1 个回答
  • 500 Views

1 个回答

  • Voted
  1. Best Answer
    Andrew B
    2018-04-25T20:22:22+08:002018-04-25T20:22:22+08:00

    对于普通用户来说,这真的不重要。如果您追求的是域的一致交付和正常运行时间,那么规则非常简单:

    • 您的名称服务器上的NS记录应该只指向A和AAAA记录。(不是CNAME记录等)
    • 确保包含 IPv4 地址(A记录),否则运行单栈 IPv4 的 DNS 服务器将无法获取有关您的域的信息。
    • 这些名称服务器的名称和 IP 地址应与您的域在注册商控制面板中的配置方式相匹配。

    而已。实施的方式和原因并不重要。如果您偏离此建议,结果将是大量不一致和不可预测的行为。诸如“未定义的行为”和“实现特定的行为”之类的可怕短语都适用于此。

    话虽如此,OP提出的问题是完全公平的。排除客户端的显式请求并排除其他答案的权威部分中的间接引用,递归名称服务器何时明确请求这些NS记录?


    您无意中进入了递归 DNS 服务器如何运行的比较模糊的领域之一。据我所知,我们仍然没有对管理互联网标准进行修订,以阐明这是“应该”如何工作的。

    递归 DNS 服务器如何了解您的域的高级概述如下所示:

    • 递归服务器获取www.example.com. IN A.
    • 如果此 DNS 记录在缓存中,则从缓存中回答。
    • 如果 DNS 记录不在缓存中,它需要找到一个可以提供答案的名称服务器。它首先检查它的内存,看看它是否已经识别出与域相关的名称服务器。它会向域名服务器咨询它所知道的最具体的区域(又名域)。如果遇到对更具体区域的引用,则将遵循这些引用,直到服务器将自己标识为www.example.com. IN A. (或直到错误阻止它进一步遵循路径)
    • 在“冷缓存”场景(想象一个新重新启动的 DNS 服务器)中,它必须从最不具体的开始,然后一直工作到最具体的 . 对于我们的示例www.example.com. IN A,它将遵循以下一组引用:

      • .:又名“根”名称服务器。
      • com.: 的顶级域名服务器com.,从.名称服务器中学习。
      • example.com.:注册表中列出的名称服务器example.com.,com.从com.名称服务器中学习。
      • www.example.com:仅当example.com名称服务器为www. 对于此示例,我们假设情况并非如此。我们的记录答案A将直接来自example.com.

    沿着这条路径的每一步,递归服务器都会询问这些服务器是否负责www.example.com并接收到一组更具体的 DNS 服务器的引用。在这次步行中,我们不需要询问 NS 记录。我们通过推荐了解了更具体的服务器,直到一组服务器最终回复了权威答案www.example.com.(在这种情况下,example.com.名称服务器得到了我们的答案)

    这就是事情变得奇怪的地方。

    NS我们此时记忆中的记录是通过推荐获得的。对于名称服务器来说,这已经“足够好”了,但我们现在有两个问题:

    • 当与引用中的 NS 记录关联的 TTL 过期时会发生什么?

    • 当有人问我们这些 NS 记录的价值时会发生什么?

    我们将探索其中的每一个。

    通过引用学习到的 NS 记录的 TTL 已过期。怎么办?

    这就是名称服务器行为大相径庭的地方。虽然它有一定的年代(2011 年 3 月),但我强烈建议您阅读Ólafur Guðmundsson涵盖该主题的演示文稿。幻灯片 11 - 13 向我们介绍了几种名称服务器行为模式。我将从 Ólafur 的演讲中借用相同的术语:

    Child Centric non sticky:
    PPPCCCPPPCCCPPPCCCPP
    
    Child Centric sticky
    PPPCCCCCCCCCCCCCCCCC
    
    Parent Centric
    PPPPPPPPPPPPPPPPPPPP
    

    在这种情况下,“父母”指的是我们通过推荐了解到的 NS 记录。“child”是指我们通过查询第一组 NS 记录的值时收到的权威答案了解到的 NS 记录example.com. IN NS。(即当我们要求这些名称服务器返回他们自己的NS记录时......理论上)

    所有这些模式的共同点是内存中的 NS 数据首先是从父级学习的。这是一个给定的,因为它是该过程如何工作的基础。实现的不同之处在于它们之后的操作:

    • 以孩子为中心的非粘性最初会更喜欢父母,然后换成孩子。一旦孩子过期,NS 记录将被“遗忘”并从头开始重新学习,以便为合并父名称服务器的更改提供机会。如果没有这个,与过期域相关的名称服务器的更改将不会被捕获——无论是过期还是续订。缺点是有时这些 NS 记录定义不一致,导致递归服务器返回针对特定 DNS 记录(即www.example.com. IN A)的不同响应,具体取决于它当前正在访问的服务器。

    • 以子为中心的粘性是一个非常有问题的实现,其中名称服务器“卡在”定义的子端,并且在清除缓存或重新启动服务器之前不会重新评估父端。由于与之相关的非常明显的问题,它通常被认为是这些实现中最糟糕的。(一个例子是这个问答,有人正在观察行为)

    • 以父为中心是一个有趣的实现,它完全避开了子/权威 NS 记录的价值。其背后的总体思路是,在父母和孩子的价值观之间交替会导致比其价值更多的麻烦和困惑。通过完全忽略 NS 记录的“权威”版本并始终更喜欢推荐(没有它,无论如何都无法了解权威记录),您可以完全避免以儿童为中心的非粘性的“触发器”问题。主要缺点是一些边缘情况,其中来自子端的 NS 记录可以帮助加快从旧名称服务器迁移之前在注册表中进行的更改。当您与某些也提供 DNS 服务的愚蠢注册商打交道时,这可能会很有用,但是当您将域的服务器更改为指向其他地方时,会立即杀死您的所有 DNS 数据。

    如您所见,这是一个复杂的主题,如果没有广泛的测试,很难记录下来。之所以如此,是因为直到今天,该领域的标准仍然很松散,至少据我所知。

    当客户端向递归器询问 NS 记录的值时会发生什么?

    再一次,这取决于。

    RFC 2181强烈不鼓励名称服务器返回从答案部分中的引用中学习到的缓存名称服务器数据,但并没有完全禁止它:(“不应该”)

    Unauthenticated RRs received and cached from the least trustworthy of     
    those groupings, that is data from the additional data section, and
    data from the authority section of a non-authoritative answer, should
    not be cached in such a way that they would ever be returned as
    answers to a received query.  They may be returned as additional
    information where appropriate.  Ignoring this would allow the
    trustworthiness of relatively untrustworthy data to be increased
    without cause or excuse.
    
    [...] Note that throughout this document, "authoritative" means a
    reply with the AA bit set.
    

    尽管有这个警告,我们可以在我们的答案中返回从推荐中观察到的 NS 记录,因为它没有被明确禁止。我怀疑以父母为中心的实现更有可能发生这种情况,但目前我面前没有任何好的数据。当我找到时间并更新这个答案时,我会自己做一些测试。

    如果服务器缓存了来自引用的名称服务器,并且遵守RFC 2181,会发生什么情况?在 ISC BIND 的情况下(至少在我最有经验的 9.10 和 9.11 实现中),NS来自客户端对记录的显式请求会触发对子名称服务器的立即刷新。当客户端名称服务器指向 BIND 认为已损坏的内容时,最容易观察到,例如指向 CNAME 记录的 NS 记录。BIND 最初将能够使用从初始推荐中收到的信息(包括胶水)来回答域,但是当NS收到记录请求并且名称服务器尝试重新学习它的名称服务器信息时,该域将立即停止工作需要与之交流。


    结束免责声明:这是递归服务器操作的一个非常模糊和令人困惑的领域。自从我上次深入探讨该主题以来,有些事情可能已经改变。我很乐意修改此处提供的任何信息,但请尽可能提供具体的数据引用。

    • 6

相关问题

  • Solaris DNS

  • resolv.conf 在经过一段时间后被更改

  • 为什么有些网站的网址中没有“www”就无法显示?[关闭]

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve