我们遇到了 DNS 客户端无法解析某些 FQDN 的问题。在出现问题的同一域中,对主机名执行 nslookup 是可行的。但是,对 hostname.domain.parentdomain1.parentdomain2.net 执行 nslookup 却不行。奇怪的是,从该域外部,相同的 FQDN 查询却有效。两个域中的客户端都使用相同的 DNS 服务器,即“parentdomain1”示例中的服务器。
nslookup 返回:
非权威答案:名称:hostname.domain.parentdomain1.parentdomain2.net.parentdomain2.net 地址:209.62.20.188
因此,客户端附加了两次“parentdomain2.net”。
我将非常感激任何帮助。
答案1
这是NXDOMAIN 劫持,向您揭示 DNS 搜索后缀工作原理的一个无害的方面。
我猜测你的 DNS 解析是针对本地设备的,其中包含你的区域的副本,然后从互联网服务器(正在执行 NXDOMAIN 劫持)对其他区域进行递归查找。
具有 DNS 搜索后缀的客户端将发出附加后缀块的附加查询。如果我的系统有一个后缀列表,例如,foo.domain.com
然后domain.com
,我针对单名主机进行查找server
,它将按顺序执行以下查询,直到找到某个内容:
server.
server.foo.domain.com.
server.domain.com.
(.
最后的 是为了在 DNS 术语中指定它与根相关,而与其他无关)
这很棒,而且非常合理。如果server
不存在server.
,则会在寻找server.foo.domain.com.
- 如果不存在,它会继续;如果找到答案,它会停止。
当你搜索你认为是 FQDN 的东西时,情况就开始变得不那么正常了 - 但 DNS 不知道这一点(除非你在末尾使用nslookup
).
。所以,如果我搜索server2.domain.com
,它会像这样搜索:
server2.domain.com.
server2.domain.com.foo.domain.com.
server2.domain.com.domain.com.
最后两个对于你我来说没有什么意义,但解析器不知道更好的答案,所以需要检查。
这让我们看到了您所看到的内容。您的搜索后缀列表可能如下所示:
domain.parentdomain1.parentdomain2.net
parentdomain1.parentdomain2.net
parentdomain2.net
并且,您的递归 DNS 服务器可能包含 的区域parentdomain1.parentdomain2.net
,但不包含 的区域parentdomain2.net
。
因此,查询如下进行:
hostname.domain.parentdomain1.parentdomain2.net.
(NXDOMAIN 响应 - 如果这条记录应该放在这里,那么你需要调查为什么会发生这种情况)
hostname.domain.parentdomain1.parentdomain2.net.domain.parentdomain1.parentdomain2.net.
(您的名称服务器可能有一个区域parentdomain1.parentdomain2.net
,并抛出另一个 NXDOMAIN)
hostname.domain.parentdomain1.parentdomain2.net.parentdomain1.parentdomain2.net.
(与之前结果相同)
hostname.domain.parentdomain1.parentdomain2.net.parentdomain2.net.
(现在,由于缺少权威区域,您的 DNS 服务器会将查询转发给上游转发器。您的上游会尽职尽责地发回错误的响应,以错误的方式试图获得一些额外的广告收入)
所以!这可能是一个与记录有关的简单问题,但由于您的 ISP 或运行上游 DNS 服务器的其他人员的滥用行为,该问题引起了更多混乱。上面我假设了许多变量,但请检查一下特定查询的解析方式(.
末尾加上以消除搜索后缀),它应该与我概述的方式非常接近。
答案2
如果您有 Windows 用户,并且他们在域中或以某种方式与 fomain 相关联(例如在 wimax 网络 nsp id 中或类似情况),当他们发送 dns 查询时,他们会将他们的域名附加到查询的后面。在 linux /etc/resolv.conf 中,如果您有搜索 directove,则效果相同。所以不用担心,这是正常的。