Клиент знает, какой сервер ответил, см. Этот пример копания:
$ 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
ответил мне (кстати, этот anycasted).
Теперь о
Можно ли добавить запись 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
версия)