我有这样的设置,其中我使用 droplet 来解析一些 DNS 请求,因此它充当子域的名称服务器:check.farm.test.com
服务器运行正常,并接收流量,因此,不知何故,NS
记录似乎是有效的。问题是我无法在dig
或任何其他工具中查询它。
这是我的设置:
test.com. NS ns-312.awsdns-43.com.
check.test.com. NS ns.test.com
ns.test.com. A 123.132.231.312
我的自定义 DNS 服务器位于,访问123.132.231.312
时会接收流量,但什么都不显示。使用 ,我得到。G-suite 工具箱 dig 工具显示:anything.check.test.com
dig check.test.com NS
+trace
connection timed out; no servers could be reached
opcode QUERY
rcode SERVFAIL
flags QR RD RA
;QUESTION
check.dnsleak.dnsadblock.com. IN NS
;ANSWER
;AUTHORITY
;ADDITIONAL```
答案1
委托NS
和粘合A
记录看起来没问题:
;; AUTHORITY SECTION:
check.dnsleak.dnsadblock.com. 300 IN NS ns.dnsleak.dnsadblock.com.
;; ADDITIONAL SECTION:
ns.dnsleak.dnsadblock.com. 300 IN A 167.172.164.97
但是,您的自定义 DNS 服务器(这可不是件小事!)无法正确响应查询。
除非它以符合标准的方式响应,并且至少提供任何区域中必须存在的最低限度的数据(除了您实际需要的任何数据),否则不要指望它以任何可靠的方式工作。
最低限度区域:SOA
+NS
在区域顶点。
看一下这个响应:
$ dig @167.172.164.97 check.dnsleak.dnsadblock.com NS +norec
; <<>> DiG 9.11.14-RedHat-9.11.14-2.fc31 <<>> @167.172.164.97 check.dnsleak.dnsadblock.com NS +norec
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19163
;; flags: qr; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;check.dnsleak.dnsadblock.com. IN NS
;; ANSWER SECTION:
check.dnsleak.dnsadblock.com. 60 IN A 167.172.164.97
;; Query time: 1 msec
;; SERVER: 167.172.164.97#53(167.172.164.97)
;; WHEN: Thu Apr 23 20:06:55 UTC 2020
;; MSG SIZE rcvd: 90
$
有些事情是显而易见的:
该服务器实际上并不提供与它收到的问题相关的响应。相反,它似乎总是用
A
客户端发送的名称的记录来响应!?这种错误行为不仅会导致非常奇怪的情况,即答案完全不相关,还会导致副作用,例如在查找必须存在的东西时完全失败,例如check.dnsleak.dnsadblock.com NS
。您已将
check.dnsleak.dnsadblock.com
区域委托给此服务器,因此它应该具有权威性。但无论出于何种原因,它都没有aa
按预期设置标志。
我猜想还有很多问题有待发现,这些只是我在查看我的第一个查询的答复时注意到的突出问题。
总的来说,请考虑实际构建一个可运行的名称服务器所需的工作量,以及是否可以在已经验证的实现基础上构建您的服务。