我目前托管一个域名example.com
。此域名上有两个值得注意的子域名,foo.example.com
和bar.example.com
。这些子域名的 DNS 记录配置如下:
foo.example.com
有一个指向特定 IP 的“A”记录。这按预期工作。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 隧道。
答案1
据我所知,bar.example.com 和 foo.example.com 应该解析为同一个 IP 地址,
不,这不是 NS 记录的作用。(相反,这是 CNAME 记录的作用。)
NS 记录委托DNS 查询处理到目标的 IP 地址——查询实际上从未“解析”到这个 IP 地址;相反,它会导致一个“引荐”答复,导致解析器将整个查询重新发送到主机foo.example.com
。
该主机应运行自己的名称服务器(BIND 等),其自己的区域文件以该子域为根,并负责提供实际结果。(此类 NS 记录与将整个域委托给你的服务器。)
这就是“DNS 隧道”得以发挥作用的原因——由于相关服务器对理解查询负有全部责任,因此它不仅限于执行数据库查找;它还可以接受以某种方式封装在其中的 TCP/IP 数据的虚假查询。
您可以通过将查询直接发送到您所在域的权威服务器来查看临时引荐答复 - “答案”部分中不会有任何内容;相反,它将有一个非空的“权威”部分(表示它是对其他服务器的引荐),并且 A 记录将仅作为提示包含在“附加”部分中。
$ dig bar.example.com @localhost
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 2
;; AUTHORITY SECTION
bar.example.com. 1800 IN NS foo.example.com.
;; ADDITIONAL SECTION:
foo.example.com. 1800 IN A 10.147.18.242
解析器下一步要做的就是dig bar.example.com @10.147.18.242
,无论那返回的(希望)是最终答复。
(可选地,+nordflag
发送未设置“RD”标志的查询,即“不需要递归”,以更准确地模仿解析器的操作;尽管不需要获得上述结果,但它通过将错误定向的查询转变为硬故障,使某些配置错误更容易被注意到。)