Узнайте, какой DNS-сервер ответил на ваш запрос
У меня, казалось бы, простой вопрос, но я не смог найти ответ именно на этот вопрос после некоторого поиска:
Я знаю, что если я хочу посмотреть IP-адрес какого-либо доменного имени, я набираю, например:
nslookup google.de
и получить
Server: 127.0.1.1
Address: 127.0.1.1#53
Non-authoritative answer:
Name: google.de
Address: 172.217.18.3
Тем не менее, я не знаю, откуда я получил этот ответ. Насколько я знаю, сначала мой распознаватель пытается запросить мой локальный DNS-сервер (который находится на Ubuntu dnsmasq), и если у него нет ответа, он запрашивает следующий сервер и так далее. Но я хочу знать, какой именно сервер в конце концов получил ответ. Это возможно?
Я тоже пробовал
dig +trace www.google.com
который предоставляет всю информацию о выпущенных серверах, но выполняет полностью итеративный поиск. Я бы хотел получить такой ответ, но с обычным поиском.
4 ответа
Я хочу знать, какой именно сервер в конце концов получил ответ. Это возможно?
Это не достижимо. Вы не найдете конкретного авторитетного сервера, к которому обращались, по имени, где-либо в полезной нагрузке ответа DNS. Существуют запросы CHAOS, которые существуют с целью идентификации конкретного рекурсивного сервера, который ответил вам, но нет такого эквивалента для извлечения имени точного уполномоченного сервера, с которого рекурсор получил данные.
Вопросы и ответы в StackOverflow, с которыми связался Филипп, содержат инструкции по определению списка NS
записи, которые присутствовали в разделе полномочий рекурсивного ответа DNS. Это полный список серверов, а не конкретный сервер. Даже если этого было достаточно для вашего использования, эта информация считается необязательной в соответствии со стандартами DNS, и ее все реже можно увидеть в рекурсивных ответах, чтобы уменьшить размер полезных данных атак отражения из внутренних источников.
Если вы знаете название зоны, вы можете запросить полный список NS
записи через явный запрос для них. Это требует знания того, что вы находитесь на вершине зоны; запрос на example.com
Записи NS вернут желаемый ответ, но www.example.com
не будет, если www
был делегирован другому набору серверов. В этом случае у вас нет выбора, кроме как работать в обратном направлении итеративно, пока вы не обнаружите вершину зоны.
Короче говоря, не существует надежного короткого пути (то есть одного запроса) для получения информации обо всех полномочиях восходящего потока от рекурсивного сервера, и нет способа узнать конкретный авторитетный сервер, который ответил на запрос, без контроля над авторитетным сервером и создание уникальных данных на каждом сервере. (если вы сделаете это, пожалуйста, создайте уникальную зону для этой цели, чтобы она не мешала передаче ваших более чувствительных рабочих зон)
Смотрите это https://stackoverflow.com/questions/38021/how-do-i-find-the-authoritative-name-server-for-a-domain-name
короче говоря, nslookup устанавливает тип запроса на SOA
одна линия:
nslookup -querytype=soa google.de
nslookup -d2 -type=ANY google.de
nslookup -d2 -type=ANY google.de 8.8.8.8
искать: основной сервер имен
command line> nslookup
> set querytype=soa
> google.de
Server: google-public-dns-a.google.com
Address: 8.8.8.8
Non-authoritative answer:
google.de
primary name server = ns2.google.com
responsible mail addr = dns-admin.google.com
serial = 160093636
refresh = 900 (15 mins)
retry = 900 (15 mins)
expire = 1800 (30 mins)
default TTL = 60 (1 min)
>
РЕДАКТИРОВАТЬ:
Мне сказали, что запись SOA, возможно, не лучший метод. То, что это может даже не быть установлено правильно. Итак, запись NS была бы лучшим выбором:
Где nameserver
сервер для домена...
nslookup -type=NS google.de
Или с большим количеством отладочной информации, чтобы найти nameserver
nslookup -d2 -type=NS google.de
Когда вы используете dig
в ответе по умолчанию у вас будет IP-адрес отвечающего сервера имен, который должен быть рекурсивным сервером имен, настроенным в вашей системе (/etc/resolv.conf
как правило).
Поэтому, чтобы лучше понять команду +trace, вы можете использовать dntracer.
Установите его и запустите команду dntracer, как показано в примере ниже -s. заключается в запросе полной трассировки с корневых серверов, -4 для запроса только ipv4 (полезно, если у вас не включен ipv6) и -o для вывода результатов запроса.
dnstracer -s . -4 -o b.org
Tracing to b.org[a] via A.ROOT-SERVERS.NET, maximum of 3 retries
A.ROOT-SERVERS.NET [.] (198.41.0.4)
|\___ b2.org.afilias-nst.org [org] (2001:0500:0048:0000:0000:0000:0000:0001) Not queried
|\___ b2.org.afilias-nst.org [org] (199.249.120.1)
| |\___ ns2.dan.com [b.org] (173.201.66.67) Got authoritative answer
| |\___ ns2.dan.com [b.org] (2603:0005:2225:0000:0000:0000:0000:0043) Not queried
| \___ ns1.dan.com [b.org] (97.74.98.67) Got authoritative answer
| \___ ns1.dan.com [b.org] (2603:0005:2125:0000:0000:0000:0000:0043) Not queried
|\___ b0.org.afilias-nst.org [org] (2001:0500:000c:0000:0000:0000:0000:0001) Not queried
|\___ b0.org.afilias-nst.org [org] (199.19.54.1)
| |\___ ns1.dan.com [b.org] (97.74.98.67) (cached)
| |\___ ns1.dan.com [b.org] (2603:0005:2125:0000:0000:0000:0000:0043) Not queried
| \___ ns2.dan.com [b.org] (173.201.66.67) (cached)
| \___ ns2.dan.com [b.org] (2603:0005:2225:0000:0000:0000:0000:0043) Not queried
|\___ a2.org.afilias-nst.info [org] (2001:0500:0040:0000:0000:0000:0000:0001) Not queried
|\___ a2.org.afilias-nst.info [org] (199.249.112.1)
| |\___ ns2.dan.com [b.org] (173.201.66.67) (cached)
| |\___ ns2.dan.com [b.org] (2603:0005:2225:0000:0000:0000:0000:0043) Not queried
| \___ ns1.dan.com [b.org] (97.74.98.67) (cached)
| \___ ns1.dan.com [b.org] (2603:0005:2125:0000:0000:0000:0000:0043) Not queried
|\___ c0.org.afilias-nst.info [org] (2001:0500:000b:0000:0000:0000:0000:0001) Not queried
|\___ c0.org.afilias-nst.info [org] (199.19.53.1)
| |\___ ns1.dan.com [b.org] (97.74.98.67) (cached)
| |\___ ns1.dan.com [b.org] (2603:0005:2125:0000:0000:0000:0000:0043) Not queried
| \___ ns2.dan.com [b.org] (173.201.66.67) (cached)
| \___ ns2.dan.com [b.org] (2603:0005:2225:0000:0000:0000:0000:0043) Not queried
|\___ a0.org.afilias-nst.info [org] (2001:0500:000e:0000:0000:0000:0000:0001) Not queried
|\___ a0.org.afilias-nst.info [org] (199.19.56.1)
| |\___ ns2.dan.com [b.org] (173.201.66.67) (cached)
| |\___ ns2.dan.com [b.org] (2603:0005:2225:0000:0000:0000:0000:0043) Not queried
| \___ ns1.dan.com [b.org] (97.74.98.67) (cached)
| \___ ns1.dan.com [b.org] (2603:0005:2125:0000:0000:0000:0000:0043) Not queried
|\___ d0.org.afilias-nst.org [org] (2001:0500:000f:0000:0000:0000:0000:0001) Not queried
\___ d0.org.afilias-nst.org [org] (199.19.57.1)
|\___ ns1.dan.com [b.org] (97.74.98.67) (cached)
|\___ ns1.dan.com [b.org] (2603:0005:2125:0000:0000:0000:0000:0043) Not queried
\___ ns2.dan.com [b.org] (173.201.66.67) (cached)
\___ ns2.dan.com [b.org] (2603:0005:2225:0000:0000:0000:0000:0043) Not queried
ns1.dan.com (97.74.98.67) b.org -> 3.64.163.50
ns2.dan.com (173.201.66.67) b.org -> 3.64.163.50
Это покажет, что . о нем заботятся корневые DNS-серверы, затем об организации заботятся DNS-серверы *.afilias-nst.org и, наконец, о b заботятся серверы dan.com. Он обнаружит сломанные DNS-серверы на пути и даже некоторые пропущенные конфигурации.
обычный запрос выберет любой из вышеперечисленных путей, не будет опрашивать все серверы, а только один сервер на каждом уровне, минуя те, которые уже могут быть в кеше.
Если вы хотите узнать, какой DNS-сервер отвечает на ваш запрос, это сложнее и во многом зависит от ваших настроек... но, по крайней мере, в больших настройках это иногда работает.
В большинстве мест может не работать, но протокол DNS EDNS позволяет удаленному серверу отправлять NSID, чтобы помочь идентифицировать исходный сервер.
Используйте +edns +nsid в раскопках, и он МОЖЕТ вернуть строку NSID с идентификатором:
dig +edns +nsid google.com @8.8.8.8
; <<>> DiG 9.10.3-P4-Debian <<>> +edns +nsid google.com @8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11816
;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
; NSID: 67 70 64 6e 73 2d 6c 68 72 ("gpdns-lhr")
;; QUESTION SECTION:
;google.com. IN A
;; ANSWER SECTION:
google.com. 300 IN A 74.125.193.102
google.com. 300 IN A 74.125.193.138
google.com. 300 IN A 74.125.193.139
google.com. 300 IN A 74.125.193.113
google.com. 300 IN A 74.125.193.100
google.com. 300 IN A 74.125.193.101
;; Query time: 20 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Thu Oct 05 23:17:15 UTC 2023
;; MSG SIZE rcvd: 148
Если строка NSID пуста, удаленный сервер не настроен для отправки этой информации.
В привязке вы можете настроить свой сервер на возврат NSID, настроив параметр server-id: https://bind9.readthedocs.io/en/latest/reference.html#namedconf-statement-server-id .