为什么我的DNS查找在没有EDN的情况下工作,而在没有EDN的情况下工作?

为什么我的DNS查找在没有EDN的情况下工作,而在没有EDN的情况下工作?,dns,Dns,我正在尝试构建一个自定义DNS服务器以返回编程结果。现在,我只是让它以SPF格式返回给定查询的一部分,当我指定服务器的确切IP时,它可以正常工作: $ dig @54.183.223.221 127.0.0.5._ip.test.com._ehlo.foo.com._spf.moat.email. TXT ; <<>> DiG 9.8.3-P1 <<>> @54.183.223.221 127.0.0.5._ip.test.com._ehlo.f

我正在尝试构建一个自定义DNS服务器以返回编程结果。现在,我只是让它以SPF格式返回给定查询的一部分,当我指定服务器的确切IP时,它可以正常工作:

$ dig @54.183.223.221 127.0.0.5._ip.test.com._ehlo.foo.com._spf.moat.email. TXT

; <<>> DiG 9.8.3-P1 <<>> @54.183.223.221 127.0.0.5._ip.test.com._ehlo.foo.com._spf.moat.email. TXT
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62640
;; flags: qr rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;127.0.0.5._ip.test.com._ehlo.foo.com._spf.moat.email. IN TXT

;; ANSWER SECTION:
foo.com.        600 IN  TXT "v=spf1 include:test.com -all"

;; Query time: 19 msec
;; SERVER: 54.183.223.221#53(54.183.223.221)
;; WHEN: Fri Jan  6 18:05:55 2017
;; MSG SIZE  rcvd: 118
事实证明,这两个dig查询创建了两个稍有不同的DNS查询。通过IP,我得到:

;; opcode: QUERY, status: NOERROR, id: 53947
;; flags: rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;127.0.0.20._ip.test.com._ehlo.foo.com._spf.moat.email. IN   TXT
;; opcode: QUERY, status: NOERROR, id: 34502
;; flags:; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; QUESTION SECTION:
;127.0.0.10._ip.test.com._ehlo.foo.com._spf.moat.email. IN   TXT

;; ADDITIONAL SECTION:

;; OPT PSEUDOSECTION:
; EDNS: version 0; flags: do; udp: 4096
如果没有IP,我会:

;; opcode: QUERY, status: NOERROR, id: 53947
;; flags: rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;127.0.0.20._ip.test.com._ehlo.foo.com._spf.moat.email. IN   TXT
;; opcode: QUERY, status: NOERROR, id: 34502
;; flags:; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; QUESTION SECTION:
;127.0.0.10._ip.test.com._ehlo.foo.com._spf.moat.email. IN   TXT

;; ADDITIONAL SECTION:

;; OPT PSEUDOSECTION:
; EDNS: version 0; flags: do; udp: 4096

这个额外的EDNS部分可能会导致什么问题?当我通过添加
+bufsize=4096+dnssec
对本地开发服务器模拟EDN时,它工作正常。什么是开始寻找为什么我没有得到EDN响应的好地方?

当你说
+trace
挖掘时,你要求它自己递归并打印结果。当您不这样做时,它只会要求您的系统配置的递归解析器完成工作,并打印返回的结果


上面示例中需要特别注意的行是以
;;开头的行;;已收到
和以服务器开始的文件:
。您可能还想阅读
dig
的手册页,以了解如何指定要将查询发送到哪个服务器。

技巧在答案部分:

;; QUESTION SECTION:
;127.0.0.5._ip.test.com._ehlo.foo.com._spf.moat.email. IN TXT

;; ANSWER SECTION:
foo.com.        600 IN  TXT "v=spf1 include:test.com -all"

答案不是完整的字符串
127.0.0.5…
,而是
foo.com
。一旦我把答案部分改成了完整的字符串,它就工作得很好。红鲱鱼万岁

我自己无法运行查询,但看看您描述的行为,我想知道这是否是dnssec验证问题。在未指定dns服务器时使用配置的递归程序,并且它可能是dnssec验证递归程序。查看这是否为真的一种方法是使用带dig的+CD进行查询(这将设置检查禁用标志)。这将允许返回结果,即使该结果未通过dnssec。不幸的是,SERVFAIL有点过载,这就是它的含义之一。

谢谢。我更新了我的问题,以更好地反映我的难题;如果我特别指定服务器的IP,它会工作,但如果我不指定,它不会工作,即使我知道我的服务器在这两种情况下都会遇到问题。当你说dig没有得到响应时,这是不正确的。它得到了
SERVFAIL
响应。如果您的服务器在这两种情况下都发送相同的字节,那么区别一定是这些字节在
dig
处理的方式上是错误的(因此它打印响应),但是10.0.1.1的递归服务器没有(因此它生成一个
SERVFAIL
发送回
dig
)。此外,也许你应该记录传出的数据包,这样你就可以检查它们是否真的相同;虽然有时我运行它时,它也会超时。上面不清楚。使用
+cd
运行时,我的服务器收到的查询没有问题中的
cd
标志;也许它在去服务器的路上被重写了?这是可能的吗?是的,您希望权威机构(在本例中是您的服务器)不会看到来自递归的CD位。我曾经对
127.0.0.5.\u ip.test.com.\u ehlo.foo.com.\u spf.moat.email.
运行一个示例查询,返回:
向“ns2.moat.email”发送请求(52.53.195.110)收到的回复:**Lame response-没有权威性,也没有推荐
我的回复中是否缺少权威性部分?还是问题比这更深?