Ответ DNS - объедините записи A и TXT - PullRequest
0 голосов
/ 04 сентября 2018

Я хочу разрешить IP-адрес. Для этого я создаю DNS-запрос (типа записи). Допустим, какой-то DNS-сервер получает этот запрос, а затем отправляет его на один из моих серверов для его разрешения. Теперь я хочу знать, какой из моих серверов отвечает на этот запрос.

Для этого я хотел бы добавить в ответ запись TXT. Можно ли добавить запись TXT в запрос с записью A? И есть ли лучший способ узнать, какой из моих серверов ответил на запрос?

EDIT: Что касается IP сервера - У меня есть приложение, которое запрашивает DNS-сервер (допустим, это публичный DNS-сервер Google - 8.8.8.8). Когда Google получает этот запрос, он не возвращает ответ, а запрашивает ответ у одного из моих серверов. Только тогда он вернет правильный ответ моему приложению. Теперь, если я проверю IP-адрес сервера, я получу 8.8.8.8, но я хочу знать, какой из моих серверов дал Google ответ.

1 Ответ

0 голосов
/ 04 сентября 2018

Клиент знает, какой сервер ответил, см. Этот пример копания:

$ 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 версия)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...