DNS для “чайников”

root

Administrator
Команда форума
Я стал невольно замечать в последнее время, что у многих клиентов вызывает уйму негодования фраза “DNS-серверы могут обновляться от суток до 72 часов”. Они не понимают, почему так долго, и начинают приводить доводы о том, что у другого хостинг-провайдера/регистратора эти процессы происходят гораздо быстрее. Но это очень большое заблуждение. Почему? Ответ на этот вопрос под катом.
Итак, раз уж речь пошла о заблуждениях, то хочется отметить тот факт, что не все в этом мире являются гуру TCP/IP и администрирования сетей, и в этом нет ничего плохого. Просто у каждого свои интересы и предпочтения. Именно по причине того, что не всем нужно досконально знать как работает DNS я и назвал эту статью “DNS для "чайников”. Теперь попробуем объяснить работу системы доменных имен на простом и понятном языке.
Начнем с терминологии. Что же такое DNS? В аббревиатуре читается как Domain Name System (Система доменных имен). Распределенная система, которая отвечает за ретрансляцию и сопоставление доменных имен (буквенно-символьных выражений) сетевым адресам. Определение DNS по версии Википедии:
DNS (англ. Domain Name System — система доменных имён) — компьютерная распределённая система для получения информации о доменах. Чаще всего используется для получения IP-адреса по имени хоста (компьютера или устройства), получения информации о маршрутизации почты, обслуживающих узлах для протоколов в домене (SRV-запись).​
Как уже говорилось, система доменных имен является распределенной системой, и еще нужно отметить и то, что система иерархична и достаточна инертна. ерархичность системы обуславливается вложенностью. Корневым доменом в системе DNS является точка “.”. Точка это наивысшый уровень домена и за работу этого домена отвечают 13 серверов:
  • g.root-servers.net;
  • a.root-servers.net;
  • e.root-servers.net;
  • k.root-servers.net;
  • f.root-servers.net;
  • h.root-servers.net;
  • d.root-servers.net;
  • m.root-servers.net;
  • c.root-servers.net;
  • i.root-servers.net;
  • l.root-servers.net;
  • j.root-servers.net;
  • b.root-servers.net.
Далее, в иерархии идут серверы доменных зон. Например, корневые DNS-серверы зоны .RU:
  • b.dns.ripn.net;
  • f.dns.ripn.net;
  • e.dns.ripn.net;
  • a.dns.ripn.net;
  • d.dns.ripn.net.
И далее идут промежуточные кеширующие локальные DNS-серверы интернет-шлюзов, провайдеров, сетей и т.д.
Уже достаточно теории, чтобы понять иерархичность системы доменных имен, поэтому перейдем к главному вопросу о том, как же работает эта система.
Итак. Любой хост (компьютер в сети) с которого осуществляется запрос к доменному имени, имеет резолвер:
Резолвер - часть операционной системы, ответственная за обработку вызовов функций GetIpByHost и GetHostByIp. Резолвер отправляет запрос на DNS-сервер, адрес которого установлен в параметрах IP-протокола для подключения или назначен провайдером при подключении.​
То есть, когда Вы вводите доменное имя в адресную строку браузера, формируется запрос резолвером к DNS-серверам, которые установлены автоматически для Вашего интернет-соединения, либо которые Вы прописали для Вашего интернет-соединения. Запрос идет именно к локальному DNS серверу, и если этот сервер не находит соответствия домен-IP, то соединение с хостом не может быть установлено. Большинство локальных серверов того или иного интернет-провайдера являются кеширующими (нерекурсивными).
Нерекурсивные DNS-серверы - серверы которые не умеют выполнять полный поиск по всей системе доменных имен​
Такие серверы при запросе к ним осуществляют поиск информации в своем кеше. Если информация о соответствии домена IP-адресу имеется в кеше такого сервера, то соединение может быть установлено. Дальше собственного кеша эти серверы поиска не осуществляют. Думаю, с нерекурсивными серверами все понятно. Теперь перейдем к рекурсии.
Рекурсивные DNS-серверы - серверы, умеющие выполнять полный поиск информации по всей системе доменных имен.​
Рассмотрим каким образом работает рекурсия:
  1. вы вводите в браузере в адресной строке domain.ru, после чего локальный резолвер отправляет запрос к локальному DNS-серверу, либо к тому, что прописан для Вашего соединения;
  2. локальный сервер, который является рекурсивным, ищет в своем кеше информацию о сопоставлении домена IP-адресу и не находит его;
  3. локальным сервером осуществляется запрос к одному из доступных на данный момент корневому DNS серверу (точке), допустим к f.root-servers.net;
  4. на корневом DNS сервере хранится эталонная информация только о DNS-серверах доменных зон и на корневом сервере соответствие IP-адреса для domain.ru не находится, но этот сервер определяет, что нужно искать информацию на корневых серверах зоны RU. То есть точка отвечает локальному DNS-серверу “я не знаю точного IP для domain.ru, но я знаю, что корневые DNS зоны RU могут это знать”;
  5. локальный сервер получил информацию о том, что нужно пробовать искать соответствие на серверах зоны RU;
  6. локальный сервер делает запрос к одному из доступных DNS зоны RU, например к a.dns.ripn.net;
  7. a.dns.ripn.net отвечает, что у него нет соответствия домена IP-адресу, но он знает, что эталонная информация для domain.ru содержится на DNS-серверах ns1.reg.ru и ns2.reg.ru, которые прописаны для этого домена;
  8. локальный сервер делает запрос к ns1.reg.ru и получает ответ с соответствием IP-адреса домену;
  9. локальный DNS передает в резолвер IP-адрес для домена, после чего осуществляется соединение.
Этот процесс происходит настолько быстро, что Вы не успеваете заметить был ли опрос всей системы DNS или нет.
Это правило рекурсии действует и для распространения информации по системе доменных имен.
Итак, доменное имя всегда уникально и второго такого же домена не может быть зарегистрировано. К чему я это? Да все к тому, что мы уже подобрались к основному вопросу - почему же после смены DNS нужно ждать от суток до 72 часов для доступности сайта по доменному имени.

Процесс обновления DNS.
Вы изменили для домена DNS серверы и информация об этом изменении начала распространяться по системе доменных имен.
Первым делом в течение 15 минут будет обновлена информация Whois и по запросу Whois информация будет отображаться уже с корректными DNS. Но, это не значит, что Ваш сайт уже должен работать по домену.

Вместе с обновлением Whois по системе доменных имен информация о домене отправляется на корневые DNS-серверы (точку), те в свою очередь оповещают корневые DNS-серверы доменной зоны (рассматриваем случай с зоной RU). Как известно, в зоне RU корневые DNS серверы обновляют информацию в себе 4 раза в сутки (2:00 МСК, 10:00 МСК, 14:00 МСК и 19:00 МСК). То есть, если Вы обновили DNS-серверы в 11:00, а сейчас на часах 13:00, то даже сделав запрос DNS-серверов напрямую с корневых зоны, мы не получим ответа. Если сделать запрос после 14:00, то информация на корневых уже будет присутствовать. Но, это не значит, что Ваш сайт уже должен работать по домену.

Почему же сайт еще не работает, спросите Вы? Уже забыли про промежуточные кеширующие DNS-серверы интернет-провайдера? =) Вот именно из-за кеширующих серверов сайт может быть еще недоступен. Мы знаем, что информация на корневых серверах доменной зоны уже обновилась, но это не значит, что локальный DNS-сервер провайдера уже обновил информацию в себе, а насколько мы знаем, по большей части все такие сервера являются нерекурсивными. Ответственность за работу локального DNS-сервера лежит на его владельце. То есть, он в праве сам устанавливать в какое время производить обновление информации в кеше DNS. Зачастую провайдеры устанавливают периодичность обновления 1 раз в сутки. То есть, в 14:00 информация о нашем домене уже есть на корневых зоны, но ее нет, и еще долго может не быть на локальных DNS Вашего провайдера. Соответственно, когда резолвер будет делать запрос до локального сервера доменных имен, то он не найдет соответствия домена и IP-адреса, и соединение не будет установлено. После обновления локальных серверов сайт уже может работать по домену. Но это не значит, что сайт уже должен работать по домену! =)

А не должен он работать по той причине, что браузер тоже мог закешировать информацию на компьютере локально, так же как и локально мог закешироваться DNS-кеш операционной сыстемы. Поэтому его необходимо сбросить. Определить на каком участке проблема очень просто. Заходите на какой-нибудь сервис-проксификатор и попробовать зайти на сайт при помощи такого сервиса. Заходит? Значит проблема локальна и обновление еще не прошло у интернет-провайдера, либо кеш Вашего браузера. Не заходит? Значит обновление еще не прошло на корневых или на корневых зоны. Тут влияет только фактор времени и нужно просто подождать обновления.
Думаю, написал подробно. Однако, не исключаю возможность неточностей - уж очень сложно литературно пытаться объяснить сугубо технические вещи. Буду рад любым замечаниям! =)
 
Вверх