DNS响应-合并A和TXT记录

时间:2018-09-04 16:16:20

标签: dns

我想解析一个IP地址。 为此,我正在创建一个DNS查询(类型为A记录)。可以说,某个DNS服务器获取了该查询,然后将其发送到我的一台服务器以对其进行解析。 现在,我想知道我的哪些服务器可以回答此请求。

要做到这一点,我尽管要在响应中添加TXT记录。 是否可以将TXT记录添加到具有A记录的查询中? 还有没有更好的方法来发现我的服务器中的哪个回答了请求?

编辑: 至于服务器IP- 我有一个应用程序,可以查询DNS服务器(假设它是Google的公共DNS服务器-8.8.8.8)。 Google收到此查询时,不会返回答案,而是向我的一台服务器询问答案。只有这样,它才会向我的应用返回正确答案。现在,如果我检查服务器IP,我将获得8.8.8.8,但我想知道的是我的服务器中的哪一个为Google提供了答案。

1 个答案:

答案 0 :(得分:1)

客户端知道响应哪个服务器,请参见以下示例:

$ dig com. @f.root-servers.net +noall +stat

; <<>> DiG 9.12.0 <<>> com. @f.root-servers.net +noall +stat
;; global options: +cmd
;; QUERY SIZE: 44

;; Query time: 140 msec
;; SERVER: 192.5.5.241#53(192.5.5.241)
;; WHEN: Tue Sep 04 12:04:30 EST 2018
;; MSG SIZE  rcvd: 856

我看到IP为192.5.5.241的服务器答复了我(此服务器是任意广播的)。

现在关于

  

是否可以将TXT记录添加到具有A记录的查询中?

不,这违反了规范。答案部分应仅包含A记录查询的答案。解析器不应考虑其他任何因素。您可以尝试使用“其他”部分进行尝试/思考/想象,但这并不适合,并且结果还会有所不同。

但是实际上我不确定您要达到的目标。您控制DNS服务器吗? DNS客户端?

如果您控制DNS服务器,则可以访问其日志,这样您就可以知道请求的内容以及它的回复对象。如果您控制客户端,则可以清楚地看到哪个服务器回复了您。

在对可能不相关的点进行过多扩展之前,请查看今天使用的NSID选项(RFC5011)。当您使用任何广播的名称服务器或其中的任何云时,这更相关,因为在单个IP下,您可能会遇到很多不同的实例,因此,除了IP以外,还需要其他一些东西来标识它们(这表明IP地址)实际上比标识令牌更像一个位置。

例如,如果我使用dig com. @f.root-servers.net +nsid +nocookie重做以上查询,我得到:

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; NSID: 70 61 6f 31 61 2e 66 2e 72 6f 6f 74 2d 73 65 72 76 65 72 73 2e 6f 72 67 ("pao1a.f.root-servers.org")

我看到,在特定情况下,它是一台将自身标识为服务器的服务器(当然,在没有DNSSEC的情况下,它也可能被欺骗)为pao1a.f.root-servers.org。 从另一个有利位置进行相同的查询可以回答:

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1472
; NSID: 41 4d 53 2e 63 66 2e 66 2e 72 6f 6f 74 2d 73 65 72 76 65 72 73 2e 6f 72 67  (A) (M) (S) (.) (c) (f) (.) (f) (.) (r) (o) (o) (t) (-) (s) (e) (r) (v) (e) (r) (s) (.) (o) (r) (g)

(由于dig版本较旧,因此解码不同)