问题。我有一个 Windows AD 域,其中有一部分对我来说是个谜:Windows 域/DNS 服务器如何查找 Windows 域之外的域?
在简单的家庭网络中,DNS请求路由很容易理解:
Generic Example: Client machine -> (defined DNS or from DHCP) ->
->Router / Gateway -> (usually ISP DNS) -> DNS root servers -> Internet
Specific Example: 192.168.1.101 -> 192.168.1.1 -> 8.8.8.8 -> DNS root servers -> Internet
相比之下,我目前看到的 AD 网络路径是这样的:
Client Machine -> Windows Domain / DNS -> ??????? -> DNS root servers -> Internet
如果我检查域服务器上的网络设置,DNS 将被设置为备用 DNS 服务器(辅助域服务器)、它本身以及环回,没有其他内容。
我的互联网可以正常运行,因此 Windows 域服务器足够智能,可以从上游服务器获取 DNS 信息,但是这在哪里以及如何定义?
答案1
您的 DC 可以通过以下几种方式查询外部名称服务器:
- 根提示
- 全球货运代理
- 明确定义的存根区域、委托或有条件转发区域
- 您已检查过的 DC 网络接口上的设置。
我猜是 #1 或 #2。您的问题仅包括检查网络设置 - 您检查过 DC 上的 DNS 管理器吗?
如果以上内容都是空白,则表明发生了一些意外情况,您或许应该使用 wireshark 跟踪传出的 DNS 查询。
答案2
DNS 由两个截然不同的部分组成。一部分负责发布数据,另一部分负责接受来自客户端的 DNS 请求并尝试通过收集数据来响应这些请求。执行发布数据角色的 DNS 服务器通常被称为“权威”服务器,尽管这在技术上并不是一个正确的名称。就我个人而言,我更喜欢“DNS 内容服务器”这个名称,但这个术语并不广泛使用。接受和响应来自客户端的请求的服务器通常被称为“解析”服务器。
这实际上与 HTTP 服务器和 HTTP 代理的工作方式非常相似:HTTP 服务器发布数据,HTTP 代理接受来自客户端(浏览器)的请求,并将联系服务器以收集客户端要求的数据。Web 浏览器和 DNS 客户端之间的区别在于 DNS 客户端无法自行联系内容 DNS 服务器。DNS 客户端不得不使用 DNS 解析服务器,而 Web 浏览器无需 HTTP 代理即可完美运行。
由于 DNS 信息以分层和分布式方式存储,因此要回答单个查询,您需要来自多个 DNS 内容服务器的信息,这些服务器可能位于世界各地。当 DNS 客户端想知道“www.serverfault.com”的地址时,它只需将该请求发送到 DNS 解析服务器即可。然后,该 DNS 解析服务器必须执行联系世界各地的 DNS 服务器的实际工作。
首先,解析 DNS 服务器将整个查询发送到根服务器(即内容 DNS 服务器)。该根服务器没有完整的答案,但它做知道哪些 DNS 内容服务器具有有关“.com”域中名称的更多信息。因此,DNS 解析器现在将整个查询发送到其中一个“.com”内容 DNS 服务器。该服务器也没有完整的答案,但它知道哪些 DNS 内容服务器具有有关域中名称的更多信息servervault.com
。解析 DNS 服务器将继续询问世界各地的内容 DNS 服务器,直到它为客户端提供完整的答案。当然,解析 DNS 服务器将在此过程中缓存信息:如果它从缓存中知道“.com”内容 DNS 服务器的位置,它就不会针对“.com”域中的每个查询联系根内容 DNS 服务器。
“转发器”只是一个解析 DNS 服务器,它将客户端查询发送到另一个(预配置的)解析 DNS 服务器,而不是尝试通过联系世界各地的内容 DNS 服务器来自行回答这些查询。家用路由器通常包含一个解析 DNS 服务器,该服务器配置为使用 ISP 的解析 DNS 服务器作为转发器。
当两个不同的角色(内容服务和解析)同时出现在一个 DNS 服务器中时,可能会造成混淆。Active Directory 中的情况大致如此。在 Active Directory 中,DNS 用于发布有关某些服务的位置的信息。例如,当域中的客户端ad.example.com
想要联系其域的 Kerberos 密码更改服务器时,它会发出名为 的 SRV 记录的 DNS 请求_kpasswd._tcp.ad.example.com
。此 DNS 请求与任何其他 DNS 请求一样,发送到客户端中配置的解析 DNS 服务器。然后,解析 DNS 服务器开始尝试回答请求。
这可能会让人有点困惑。DNS 解析服务器可能知道它是特定 Active Directory 域的一部分,这意味着它可以识别该域中名称的传入查询。如果解析器收到这样的查询,它不会联系外部 DNS 服务器,但可以直接使用 Active Directory 数据库中的信息进行回复。如果传入查询不是针对域中的名称,解析器要么尝试通过联系内容 DNS 服务器来回答问题,要么(如果配置为使用转发器)将查询发送到另一个 DNS 解析服务器。这很可能是您的场景中发生的情况。
动态更新使问题更加混乱。在任何非平凡域中,服务都不是静态的。域控制器可能会被添加或删除,等等。工作站也是如此。这意味着 DNS 中的信息需要更新以反映这一点。动态更新是一种协议,它允许客户端修改在 DNS 中发布的信息。客户端向其解析 DNS 服务器发送查询,以查明它可以将新信息发送到哪个内容 DNS 服务器。如果是 Active Directory 集成 DNS 基础架构,解析 DNS 服务器很可能可以访问数据库本身:在这种情况下,解析 DNS 服务器会告诉客户端它可以更新信息本身。