我目前正在托管一个域名example.com
。该域上有两个值得注意的子域,foo.example.com
和bar.example.com
。这些子域的 DNS 记录配置如下:
foo.example.com
有一条“A”记录指向某个IP。这按预期工作。bar.example.com
有一个指向 的“NS”记录foo.example.com
。
据我所知,bar.example.com
因此foo.example.com
应该解析为相同的IP地址,并bar.example.com
通过 解析foo.example.com
,这就是我的意图。然而bar.example.com
根本无法访问,从 dns.google 返回以下内容:
"Status": 2 /* SERVFAIL */
我该如何解决这个问题?我目前正在查看 ZONE 文件,但我被告知我的配置应该适用于大多数在线指南。
如果相关的话,其目的是探索 DNS 隧道。
不,这不是 NS 记录的作用。(相反,这就是 CNAME 记录的作用。)
NS 记录将DNS 查询处理委托给其目标的 IP 地址 - 查询实际上从未“解析”到该 IP 地址;相反,它会产生一个“推荐”回复,导致解析器将整个查询重新发送到位于 的主机
foo.example.com
。该主机预计将运行自己的名称服务器(BIND 等),其自己的区域文件植根于该子域,并负责提供实际结果。(此类 NS 记录与最初将整个域委托给您的服务器的机制完全相同。)
这就是“DNS 隧道”发挥作用的原因 - 由于相关服务器完全负责理解查询,因此它不仅限于执行数据库查找;它还可以接受以某种方式封装在其中的 TCP/IP 数据的虚假查询。
您可以通过将查询直接发送到您域的权威服务器来查看临时推荐回复 - 它在“答案”部分中不会有任何内容;相反,它将有一个非空的“Authority”部分(表明它是对其他某个服务器的引用),并且 A 记录将仅作为提示包含在“Additional”部分中。
解析器完成的下一步将是
dig bar.example.com @10.147.18.242
,并且返回的任何内容(希望)将是最终答复。(可选地,
+nordflag
发送未设置“RD”标志的查询,即“不需要递归”,以更准确地模仿解析器将执行的操作;虽然不需要获得上面的结果,但它使某些配置错误更容易注意到通过将误导的查询转变为硬故障。)