3

У меня есть гипотетическая ситуация, на которую я не смог найти никакого реального ответа. Представьте, что у нас есть компьютер, который никогда не был в интернете. Компьютер также находится в сети, где служба DNS не предоставляется. Давайте также притворимся, что такие вещи, как общедоступный DNS Google, не существуют.

Теперь давайте предположим, что на этом компьютере есть только имена и разрешенные адреса корневых DNS-серверов, вот так.

Теперь этот компьютер хочет знать IP-адрес, скажем, superuser.com. Как, имея только IP-адреса корневых серверов, компьютер обрабатывает запросы к корневому серверу, чтобы получить разрешенную A-запись superuser.com?

Я делал попытки, но всегда оказывался там, где мне нужно использовать существующий DNS-сервер, о котором я знаю, для разрешения A-записи. Например, если я открываю командную строку и начинаю пытаться разрешить google.ca (для корневого сервера), я получаю:

Обслуживается:
ns1.google.com
google.ca
ns2.google.com
google.ca

... и так и так и так далее. Таким образом, на данный момент мне нужно разрешить nsX.google.com, чтобы запросить его, чтобы получить A-запись для google.ca, однако, учитывая сценарий, у меня нет сервера, который я мог бы запросить для адрес nsX.google.com. Если я попытаюсь разрешить ns1.google.com обратно с корневого сервера, я попаду туда же.

Краткая версия: Как, черт возьми, я могу разрешить A-запись для домена без использования какой-либо другой информации, кроме той, которая предоставляется мне корневым сервером? Заранее спасибо. :)

1 ответ1

4

Ваша ситуация не является чем-то необычным; каждый раз, когда запускается полнофункциональный рекурсивный преобразователь - например, BIND9 или Unbound, даже копия, которую я запускаю на своем ноутбуке - он начинается со всего списка «подсказок» корневой зоны и спускается оттуда сам по себе.

(Вы сказали: «Представьте себе мир, в котором Google Public DNS не существует»). Вы когда-нибудь задумывались, как Google Public DNS сам разрешает все доменные имена?)

Но ответы на DNS-запросы могут иметь больше, чем просто прямой ответ. В частности, если авторитетные серверы имен домена находятся в одном и том же домене, то копия их адресов - иначе, склеенные записи - будет также храниться в родительском домене.

Поэтому, когда вы запрашиваете com. серверы имен для www.google.com , они не только говорят, что он размещен на ns1.google.com , но и дают вам IP-адреса ns1.google.com в том же ответном сообщении!

На самом деле, вы должны были уже ударить это раньше, с com. домен верхнего уровня. Когда вы запросите корневые серверы имен - они скажут вам, что все com. размещен на m.gtld-servers.net. и они дадут вам свой IP-адрес. Вы можете убедиться, что файл корневой зоны содержит эту информацию.

Например:

$ dig @198.41.0.4 www.google.com. A
;; opcode: QUERY, status: NOERROR, id: 61096
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 13, ADDITIONAL: 16

;; QUESTION SECTION:
;www.google.com.            IN  A

;; AUTHORITY SECTION:
com.            172800  IN  NS  m.gtld-servers.net.
com.            172800  IN  NS  l.gtld-servers.net.
com.            172800  IN  NS  k.gtld-servers.net.
...

;; ADDITIONAL SECTION:
m.gtld-servers.net. 172800  IN  A   192.55.83.30
l.gtld-servers.net. 172800  IN  A   192.41.162.30
k.gtld-servers.net. 172800  IN  A   192.52.178.30
...

Продолжая с одним из com. серверы имен:

$ dig @192.55.83.30 www.google.com. A
;; opcode: QUERY, status: NOERROR, id: 46406
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 4, ADDITIONAL: 5

;; QUESTION SECTION:
;www.google.com.            IN  A

;; AUTHORITY SECTION:
google.com.     172800  IN  NS  ns2.google.com.
google.com.     172800  IN  NS  ns1.google.com.
google.com.     172800  IN  NS  ns3.google.com.
google.com.     172800  IN  NS  ns4.google.com.

;; ADDITIONAL SECTION:
ns2.google.com.     172800  IN  A   216.239.34.10
ns1.google.com.     172800  IN  A   216.239.32.10
ns3.google.com.     172800  IN  A   216.239.36.10
ns4.google.com.     172800  IN  A   216.239.38.10

Продолжая с одним из google.com. серверы имен:

$ dig @216.239.34.10 www.google.com. A
;; opcode: QUERY, status: NOERROR, id: 7744
;; flags: qr aa rd; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.google.com.            IN  A

;; ANSWER SECTION:
www.google.com.     300 IN  A   173.194.32.50
www.google.com.     300 IN  A   173.194.32.49
www.google.com.     300 IN  A   173.194.32.52
www.google.com.     300 IN  A   173.194.32.48
www.google.com.     300 IN  A   173.194.32.51

Мы наконец получили авторитетный ответ (aa) на то же имя, которое мы просили.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .