LINUX.ORG.RU
решено ФорумAdmin

Расскажите ламеру об устройстве DNS

 


1

3

Да-да, пять звёзд, стыдно с таким ником спрашивать, и вообще... Всё же хочется знать.

Вот мы зарегистрировали домен example.com, регистратор просит указать DNS-сервера, указываем ns1.example.com, ns2.example.com.

То есть, вся информация о DNS-записях про домен example.com хранится на этих двух серверах ns1.example.com и ns2.example.com, и за A-записями и прочим надо обращаться к ним.

Теперь кто угодно, любой клиент в мире, спрашивает свой местечковый провайдерский DNS информацию об A-записях на нашем example.com, следовательно, этот клиент и/или провайдер должен отыскать во всемирной паутине наши ns1.example.com и ns2.example.com.

Он должен по протоколу TCP/IP выполнить запрос на наши сервера, чтобы получить записи. Но... откуда клиент, собственно, узнает IP-адреса наших NS'ок? Они существуют сами по себе где-то в интернете.

Каким образом любой DNS сервер в мире, имеючи лишь хост вида ns1.example.com на делегированном домене, отыскивает IP-адреса этих NS, чтобы сделать запрос на наши NS?

И какова роль самого регистратора в этом деле? Регистратор что, регулярно загружает куда-то списки своих доменов со всеми NS'ами к ним?

Откуда DNS-клиенты во всём мире узнают, на какой конкретно адрес делегирован домен?

Откуда DNS-клиенты во всём мире узнают, на какой IP-адрес нужно выполнить запрос, чтобы получить записи по требуемому домену?

Объясните на пальцах пожалуйста, этот совсем непрозрачный момент.

★★★★★

Лучше баги на сайте поправь.

dk- ()

Каким образом любой DNS сервер в мире, имеючи лишь хост вида ns1.example.com на делегированном домене, отыскивает IP-адреса этих NS, чтобы сделать запрос на наши NS?

Наглядно: dig +trace ns1.example.com

Lavos ★★★★★ ()

Допустим, резолвишь ты example.com.
DNS-сервер обычно знает адреса корневых DNS-серверов, это задается в его конфиге. Сначала он на корневые DNS-сервера посылает запрос «кто отвечает за .com?». В ответ приходит список IP-адресов. Потом на один из этих IP-адресов посылается запрос «кто отвечает за example.com?». В ответ возвращаются адреса твоих ns1.example.com и ns2.example.com.

bigbit ★★★★★ ()

Он должен по протоколу TCP/IP выполнить запрос на наши сервера

Запрос делается по протоколу UDP.

откуда клиент, собственно, узнает IP-адреса наших NS'ок?

Из соответствующих записей в домене высшего уровня т.е. опрашивает домены в таком порядке

. -> com -> examle

Домен root (.) отдает NS домена com, домен com отдает NS домена example

Наглядно:

$ dig example.com +trace

; <<>> DiG 9.10.0rc2-1+b1-Debian <<>> +multi example.com +trace
;; global options: +cmd
.			7405 IN	NS m.root-servers.net.
.			7405 IN	NS b.root-servers.net.
.			7405 IN	NS f.root-servers.net.
.			7405 IN	NS d.root-servers.net.
.			7405 IN	NS e.root-servers.net.
.			7405 IN	NS h.root-servers.net.
.			7405 IN	NS l.root-servers.net.
.			7405 IN	NS c.root-servers.net.
.			7405 IN	NS i.root-servers.net.
.			7405 IN	NS j.root-servers.net.
.			7405 IN	NS k.root-servers.net.
.			7405 IN	NS g.root-servers.net.
.			7405 IN	NS a.root-servers.net.

;; Received 397 bytes from 8.8.8.8#53(8.8.8.8) in 2852 ms

com.			172800 IN NS f.gtld-servers.net.
com.			172800 IN NS k.gtld-servers.net.
com.			172800 IN NS g.gtld-servers.net.
com.			172800 IN NS e.gtld-servers.net.
com.			172800 IN NS b.gtld-servers.net.
com.			172800 IN NS m.gtld-servers.net.
com.			172800 IN NS d.gtld-servers.net.
com.			172800 IN NS l.gtld-servers.net.
com.			172800 IN NS j.gtld-servers.net.
com.			172800 IN NS c.gtld-servers.net.
com.			172800 IN NS h.gtld-servers.net.
com.			172800 IN NS i.gtld-servers.net.
com.			172800 IN NS a.gtld-servers.net.

;; Received 591 bytes from 192.12.94.30#53(e.gtld-servers.net) in 206 ms

example.com.		86400 IN A 93.184.216.34

example.com.		86400 IN NS a.iana-servers.net.
example.com.		86400 IN NS b.iana-servers.net.

root зона (.) прописывается статически на DNS сервере и время от времени обновляется. В bind9 это файл `/etc/bind/db.root`

$ cat /etc/bind/db.root

;       This file holds the information on root name servers needed to
;       initialize cache of Internet domain name servers
;       (e.g. reference this file in the "cache  .  <file>"
;       configuration file of BIND domain name servers).
;
;       This file is made available by InterNIC 
;       under anonymous FTP as
;           file                /domain/named.cache
;           on server           FTP.INTERNIC.NET
;       -OR-                    RS.INTERNIC.NET
;
;       last update:    Jan 3, 2013
;       related version of root zone:   2013010300
;
; formerly NS.INTERNIC.NET
;
.                        3600000  IN  NS    A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET.      3600000      A     198.41.0.4
A.ROOT-SERVERS.NET.      3600000      AAAA  2001:503:BA3E::2:30

...

Каким образом любой DNS сервер в мире, имеючи лишь хост вида ns1.example.com на делегированном домене, отыскивает IP-адреса этих NS, чтобы сделать запрос на наши NS?

Опрашивает DNS сервера верхних доменов, это наглядно показано в трейсе dig'а.

И какова роль самого регистратора в этом деле? Регистратор что, регулярно загружает куда-то списки своих доменов со всеми NS'ами к ним?

Как .com узнает, что появился домен example? Он заносит необходимые записи в свою базу, эти записи предоставляет регистратор.

Откуда DNS-клиенты во всём мире узнают, на какой IP-адрес нужно выполнить запрос, чтобы получить записи по требуемому домену?

/etc/resolv.conf

Disova ()

Вот мы зарегистрировали домен example.com, регистратор просит указать DNS-сервера, указываем ns1.example.com, ns2.example.com.

Если дословно все именно так как вы описали, и сам днс сервер «где-то там у вас», то работать не будет. Поэтому для ns1.example.com, ns2.example.com еще и ip указываются.

anc ★★★★★ ()
Ответ на: комментарий от Disova

Он должен по протоколу TCP/IP выполнить запрос на наши сервера

Запрос делается по протоколу UDP.

1. может и по tcp
2. ман протокол_TCP/IP https://ru.wikipedia.org/wiki/TCP/IP

anc ★★★★★ ()
Ответ на: комментарий от anc

а интересно, можем ли мы ускорить обращение к днс, если всегда будем делегировать домен на IP-адреса? т.е. таким образом другим днс не придётся искать IP по хосту, а они могли бы сразу к ним обращаться напрямую по IP...

не знаете, такой момент учтён в стандартах и реализациях популярных серверов типа bind?

Spoofing ★★★★★ ()

RFC читай соответствующие, там всё написано

Harald ★★★★★ ()
Ответ на: комментарий от Spoofing

Ускорить - вряд ли. Если имя твоего DNS-сервера (напр, ns1.example.com) находится в том же домене (напр, example.com), то ты по-любому при делегировании должен указать его IP-адрес. Не может же DNS ответить «за example.com отвечает ns1.example.com, резолвь как хочешь =)». DNS-сервер наоборот, предвидя, что тебе понадобится IP-адрес ns1.example.com, вернет его в том же запросе в дополнительной (additional) секции.

bigbit ★★★★★ ()
Последнее исправление: bigbit (всего исправлений: 1)
Ответ на: комментарий от Spoofing

Вот смотри: у нас есть хостинг + регистрация на нем доменного имени (bkb или просто домена): mydomen.ru Передал инфу выше или прописал на свойх DNS серверах. Еще передал нам управление зоной mydomen.ru Теперь я сам лично могу через веб морду у хостера прописать новые DNS записи для наших хостов типа ftp://FTP.mydomen.ru или MX.mydomen.ru. Теперь хотим получить IP адрес нашего ftp://FTP.mydomen.ru.

1. Смотрим корневые - получили зону ru

2. В зоне ru получили наш домен mydomen.ru

3. Заглядывая дальше мы узнаем, какой DNS сервер отвечает за наш FTP: Резольвер тупа смотрит на NS запись в домене mydomen.ru и находит, что за него отвечают DNS сервера уже хостера, что то типа ns.hoster.ru а там то и содержится запись о нашем FTP

tyrpyr ()
Ответ на: комментарий от Spoofing

Интересный вопрос, в теории да но не для вашего примера для вас это обязательно. А иногда это может быть и во вред. Представьте себе dns хостер (не регистратор!) назовем его mydom.com. У которого для ns используются имена ns1.mydom.com, ns2.mydom.com... nsN.mydom.com Вы хостите dns example.com у него. В случае если поменяют ip у этих nsN.mydom.com проблем не возникнет, однако если вы как клиент этого хостера укажите не имя ns1.mydom.com а ip то в подобной ситуации вам придеться менять этот ip еще и у себя.
А так, если вспомнить историю, то ранее ip были обязательны.

anc ★★★★★ ()

Каким образом любой DNS сервер в мире, имеючи лишь хост вида ns1.example.com на делегированном домене, отыскивает IP-адреса этих NS, чтобы сделать запрос на наши NS?

Для решения этой проблемы используются glue records

urquan ()

А давайте это будет ламерских вопросов о DNS трэд?
Можно-ли одним сервером с одним IP обслуживать самостоятельно зону, или минимум два сервера (или хотя-бы два IP) действительно необходимы. На сколько я помню некоторые (все?) регистраторы требуют указать минимум два ns сервера.

И если возможно то чем это грозит кроме «помрёт сервер, помрёт вся зона»? Речь всё-равно идёт о сайтах ютящихся вдесятером на одной VPS, смерть этого сервера они так и так не переживут, а хостить домены на стороне бывает неудобно.

MrClon ★★★★★ ()
Ответ на: комментарий от MrClon

Можно-ли одним сервером с одним IP обслуживать самостоятельно зону, или минимум два сервера (или хотя-бы два IP) действительно необходимы. На сколько я помню некоторые (все?)

Уже давно не все. Так что можно и с одним.

И если возможно то чем это грозит кроме «помрёт сервер, помрёт вся зона»?

Только этим.

anc ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.