Rom*_*cea 18 domain-name-system
我正在学习更多关于 DNS 系统的知识,现在我正在研究一个用 Go 编写的非常好的项目,我在代码中注意到它查询一些 DNS 记录 nowhere/?name=probe-test.dns.nextdns.io
最初我认为这不可能是正确的,它看起来更像是一个无效的 url 而不是域名,但我启动了一个控制台并点击dig nowhere/?name=probe-test.dns.nextdns.io并返回了一条 A 记录。
$ dig nowhere/?name=probe-test.dns.nextdns.io
; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> nowhere/?name=probe-test.dns.nextdns.io
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53429
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1452
;; QUESTION SECTION:
;nowhere/?name=probe-test.dns.nextdns.io. IN A
;; ANSWER SECTION:
nowhere/?name=probe-test.dns.nextdns.io. 300 IN A 45.90.28.0
;; Query time: 26 msec
;; SERVER: 1.1.1.1#53(1.1.1.1)
;; WHEN: Thu Mar 12 18:55:41 EET 2020
;; MSG SIZE rcvd: 84
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释这是一个有效的条目。
Dou*_*den 34
这是一个通配符 DNS 条目。dns.nextdns.io 区域配置为返回 45.90.28.0 作为对dns.nextdns.io. 这里有一些例子,寻找foo和bar。为了更好地衡量,他们可能已经在他们的区域中拥有这两个,因为它们通常用于测试和演示,所以让我们寻找一些他们没有预料到的东西 - NoWayThisExists。
C:\Users\me>nslookup foo.dns.nextdns.io 8.8.8.8
Server: dns.google
Address: 8.8.8.8
Non-authoritative answer:
Name: foo.dns.nextdns.io
Address: 45.90.28.0
C:\Users\me>nslookup bar.dns.nextdns.io 8.8.8.8
Server: dns.google
Address: 8.8.8.8
Non-authoritative answer:
Name: bar.dns.nextdns.io
Address: 45.90.28.0
C:\Users\me>nslookup NoWayThisExists.dns.nextdns.io 8.8.8.8
Server: dns.google
Address: 8.8.8.8
Non-authoritative answer:
Name: NoWayThisExists.dns.nextdns.io
Address: 45.90.28.0
Run Code Online (Sandbox Code Playgroud)
因此,只要您放在开头的内容没有任何会导致 DNS 解析器中断的无效字符,您就会得到 45.90.28.0 作为响应。在您的情况下,没有任何字符nowhere/?name=probe-test会导致问题。事实上,你可以看一下由只不过是符号的名称/,?,=,和-。
C:\Users\me>nslookup ///???===---.dns.nextdns.io 8.8.8.8
Server: dns.google
Address: 8.8.8.8
Non-authoritative answer:
Name: ///???===---.dns.nextdns.io
Address: 45.90.28.0
Run Code Online (Sandbox Code Playgroud)
Håk*_*ist 16
问题中假设的域名确实看起来不寻常,所以我去寻找上下文。
谷歌把我带到这里https://github.com/nextdns/nextdns/blob/91b3c6cc735c779c730c3b93a7b0372c9e11774f/resolver/endpoint/manager.go#L139看起来像问题中的字符串的完美匹配。
相关代码片段:
var TestDomain = "probe-test.dns.nextdns.io"
...
req, _ := http.NewRequest("GET", "https://nowhere/?name="+TestDomain, nil)
Run Code Online (Sandbox Code Playgroud)
如果确实如此,并且看起来太匹配而不是纯粹的巧合,那么看起来有问题的代码实际上并没有使您的问题中声明的 DNS 查询,而是基于 URL 发出 HTTP 请求,其中nowhere是主机名部分(将作为此类请求的一部分解析的 URL 部分)、 path/和name具有值的查询字符串参数probe-test.dns.nextdns.io。
至于当您dig nowhere/?name=probe-test.dns.nextdns.io像问题中一样尝试命令时会有响应,稍微四处看看表明有一个通配符条目*.dns.nextdns.io,因此无论您以什么奇怪的名称结尾,.dns.nextdns.io都会导致相同的响应。
试试 eg dig foobar.dns.nextdns.io,它会产生完全相同的响应。
值得注意的是nowhere/?name=probe-test.dns.nextdns.io,DNS 协议本身支持类似名称。然而,目前尚不清楚为什么有人会明确地想要添加这样的名称(事实证明并非如此)。
(该名称显然不是有效的主机名,它也不匹配任何广泛使用的非主机名用例。)
| 归档时间: |
|
| 查看次数: |
2931 次 |
| 最近记录: |