Как быстро обновляются записи в системе dns

Обновлено: 05.07.2024

Многие путаются в обновлении записей DNS, когда изменяют IP-адрес своего сайта. Почему эти записи медленно обновляются? Неужели действительно нужно ждать два дня, чтобы всё обновилось? Почему одни посетители видят новый IP, а другие — старый?

Перевели статью разработчика и автора статей Джулии Эванс, где она отвечает на эти вопросы и популярно рассказывает, что происходит во время обновления DNS с точки зрения фронтендера.

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

Как работает DNS: рекурсивные и авторитетные DNS-серверы

Во-первых, нам нужно немного объяснить систему DNS. Существует два вида DNS-серверов: авторитетные и рекурсивные

Рекурсивные DNS-серверы сами по себе ничего не знают о том, кому принадлежит какой IP-адрес. Они вычисляют IP-адрес для домена, запрашивая его у соответствующих авторитетных DNS-серверов, а затем кэшируют этот IP-адрес на случай, если их снова спросят о нем. Так, 8.8.8.8 — это рекурсивный DNS-сервер.

Когда люди посещают ваш веб-сайт, они, вероятно, делают DNS-запросы к рекурсивному DNS-серверу. Итак, как же работают рекурсивные DNS-серверы? Давайте посмотрим!

Шаг 1: IP-адреса для корневых DNS-серверов жестко закодированы в его исходном коде. Вы можете увидеть это в исходном коде unbound. Допустим, для начала он выберет 198.41.0.4. Вот официальный источник этих жестко закодированных IP-адресов, также известный как «корневой файл подсказок» (root hints file).

Детали ответа DNS немного сложнее — в этом случае есть раздел авторитетности (authority section) с некоторыми записями NS и дополнительный раздел с записями A, так что вам не нужно делать дополнительный поиск, чтобы получить IP-адреса этих серверов имен.

Мы почти закончили!

Как увидеть все шаги рекурсивного DNS-сервера: dig +trace

Чтобы посмотреть, что рекурсивный DNS-сервер будет делать для резолвинга домена, можно запустить:

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

Обновим записи DNS

Теперь, когда мы знаем основы работы DNS, давайте обновим некоторые записи DNS и посмотрим, что произойдет.

При обновлении записей DNS существует два основных варианта

  1. сохранить те же серверы имен;
  2. изменить серверы имен.

Поговорим о TTL

Но мы забыли кое-что важное. Это пакеты TTL. Как мы сказали ранее, рекурсивный DNS-сервер будет кэшировать записи до истечения срока их действия. Он принимает решение об истечении срока действия записи в зависимости от ее TTL (time to live, времени жизни).

В этом примере сервер имен GitHub для его DNS-записи возвращает TTL 60, что означает 60 секунд:

Вариант 1: обновление записи DNS на тех же серверах имен

Во-первых, я обновила свои серверы имен (Cloudflare), чтобы получить новую запись DNS — запись A, которая сопоставляет test.jvns.ca на 1.2.3.4:

Это сработало немедленно! Не было никакой необходимости ждать вообще, потому что перед этим не было никакой DNS-записи test.jvns.ca, которая могла быть кэширована. Отлично. Но похоже, что новая запись кэшируется в течение примерно пяти минут (299 секунд)

Итак, а если мы попытаемся изменить этот IP-адрес? Я изменила его на 5.6.7.8, а затем запустила тот же DNS-запрос:

Похоже, что на этом DNS-сервере запись 1.2.3.4 всё еще кэшируется в течение 144 секунд. Интересно, что если запросить 8.8.8.8 несколько раз, вы получите противоречивые результаты — иногда он выдает новый IP, а иногда старый. Вероятно, 8.8.8.8 на самом деле распределяет нагрузку на кучу разных бэкендов, у каждого из которых собственный кэш.

После пяти минут ожидания все кэши 8.8.8.8 обновились и всегда возвращали новую запись 5.6.7.8. Потрясающе. Это довольно быстро!

Не всегда можно полагаться на TTL

Как и в большинстве интернет-протоколов, не всё подчиняется спецификации DNS. Некоторые DNS-серверы интернет-провайдеров будут кэшировать записи дольше, чем указано в TTL. Например, в течение двух дней вместо пяти минут. И люди всегда могут жестко закодировать старый IP-адрес в своем файле /etc/hosts.

На практике при обновлении записи DNS с пятиминутным TTL можно ожидать, что большой процент клиентов быстро перейдет на новые IP-адреса (например в течение 15 минут), а затем появится куча отставших, которые будут медленно обновляться в течение следующих нескольких дней.

Вариант 2: обновление ваших серверов имен

Итак, мы видели, что когда вы обновляете IP-адрес, не меняя свои серверы имен, многие DNS-серверы довольно быстро получают новый IP-адрес. Отлично. Но что произойдет, если вы измените свои серверы имен? Давайте попробуем!

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

Сколько по времени обновляется DNS? На этот вопрос, точного ответа вам никто не даст, так как обновление dns зависит от того, как часто именно ваш интернет провайдер производит очистку кэша dns. Некоторые провайдеры, такую очистку производят 1 раз в день (чаще всего после полуночи), другие 1 раз в 2 дня, а бывает и такое, что 1 раз в 7 дней.

Отсюда вытекает следующее, что создав или перенеся сайт, мы не всегда сможем начать работу с ним, наполнять или исправлять его. Что делать в таком случае, ведь ждать пока провайдер соизволит почистить кэш dns не вариант, согласны?

Есть 2 выхода из этой ситуации:

  1. Узнать у своего провайдера, как часто они производят очистку кэша DNS и в какое время. Если это делается раз в сутки, то можно подстроиться, и создать домен или перенести сайт на другой хостинг в определенное время.
  2. Прописать новый IP адрес своего домена в файле hosts на компьютере, что позволит получить доступ к сайту сию же секунду, без ожидания обновления DNS.

Как быстрее обновить DNS?

Как вы уже поняли, ускорить процесс обновления DNS не получится, т.к. это во власти интернет провайдера, и периодичность обновления dns у всех провайдеров разная. Но можно пойти другим путем, т.е. прописать IP адрес и домен в файле hosts, что позволит отбросить в сторону все ожидания.

Теперь можно приступать к процедуре. Для ее реализации, вам понадобится знать:

  • IP-адрес сервера, на котором размещен ваш сайт. Его вы сможете узнать в панели управления хостингом (чаще всего это cPanel).
  • Доменное имя сайта.

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

переключение темы в cPanel

статистика сPanel

полная статистика сPanel

После того, как его нашли, нужно его открыть. Можно открыть даже блокнотом, но я предпочитаю пользоваться Notepad ++. Затем в самом конце документа необходимо дописать строчку, которая будет состоять из вашего IP-адреса и через пробел дописывается доменное имя. Что-то типа такого:

В самом файле же, это будет выглядеть вот так:

прописка IP и домена в файле hosts

После, все это дело сохраняем, и не перезагружая даже компьютер можем сразу же убедиться, что на сайт мы сможем зайти без каких-либо проблем. Дней через 5-7, сайт будет работать и без этого, так что можете в файле hosts эту запись, потом удалить.

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

Теперь, когда вы знаете, сколько обновляются DNS и как этот процесс можно обойти, вы сможете, пока идет это обновление, настроить, или наполнить свой сайт материалами.



Fenix by Takeda11

Многие путаются в обновлении записей DNS, когда изменяют IP-адрес своего сайта. Почему эти записи медленно обновляются? Неужели действительно нужно ждать два дня, чтобы всё обновилось? Почему одни посетители видят новый IP, а другие — старый?

Как работает DNS: рекурсивные и авторитетные DNS-серверы

Во-первых, нам нужно немного объяснить систему DNS. Существует два вида DNS-серверов: авторитетные и рекурсивные.


Рекурсивные DNS-серверы сами по себе ничего не знают о том, кому принадлежит какой IP-адрес. Они вычисляют IP-адрес для домена, запрашивая его у соответствующих авторитетных DNS-серверов, а затем кэшируют этот IP-адрес на случай, если их снова спросят о нем. Так, 8.8.8.8 — это рекурсивный DNS-сервер.

Когда люди посещают ваш веб-сайт, они, вероятно, делают DNS-запросы к рекурсивному DNS-серверу. Итак, как же работают рекурсивные DNS-серверы? Давайте посмотрим!

Шаг 1: IP-адреса для корневых DNS-серверов жестко закодированы в его исходном коде. Вы можете увидеть это в исходном коде unbound. Допустим, для начала он выберет 198.41.0.4. Вот официальный источник этих жестко закодированных IP-адресов, также известный как «корневой файл подсказок» (root hints file).


Детали ответа DNS немного сложнее — в этом случае есть раздел авторитетности (authority section) с некоторыми записями NS и дополнительный раздел с записями A, так что вам не нужно делать дополнительный поиск, чтобы получить IP-адреса этих серверов имен.

Мы почти закончили!

Как увидеть все шаги рекурсивного DNS-сервера: dig +trace

Чтобы посмотреть, что рекурсивный DNS-сервер будет делать для резолвинга домена, можно запустить:


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

Обновим записи DNS

Теперь, когда мы знаем основы работы DNS, давайте обновим некоторые записи DNS и посмотрим, что произойдет.

При обновлении записей DNS существует два основных варианта:

  1. сохранить те же серверы имен;
  2. изменить серверы имен.

Поговорим о TTL

Но мы забыли кое-что важное. Это TTL. Как мы сказали ранее, рекурсивный DNS-сервер будет кэшировать записи до истечения срока их действия. Он принимает решение об истечении срока действия записи в зависимости от ее TTL (time to live, времени жизни).

В этом примере сервер имен GitHub для его DNS-записи возвращает TTL 60, что означает 60 секунд:

Вариант 1: обновление записи DNS на тех же серверах имен

Во-первых, я обновила свои серверы имен (Cloudflare), чтобы получить новую запись DNS — запись A, которая сопоставляет test.jvns.ca на 1.2.3.4:


Это сработало немедленно! Не было никакой необходимости ждать вообще, потому что перед этим не было никакой DNS-записи test.jvns.ca , которая могла быть кэширована. Отлично. Но похоже, что новая запись кэшируется в течение примерно пяти минут (299 секунд).

Итак, а если мы попытаемся изменить этот IP-адрес? Я изменила его на 5.6.7.8, а затем запустила тот же DNS-запрос:


Похоже, что на этом DNS-сервере запись 1.2.3.4 всё еще кэшируется в течение 144 секунд. Интересно, что если запросить 8.8.8.8 несколько раз, вы получите противоречивые результаты — иногда он выдает новый IP, а иногда старый. Вероятно, 8.8.8.8 на самом деле распределяет нагрузку на кучу разных бэкендов, у каждого из которых собственный кэш.

После пяти минут ожидания все кэши 8.8.8.8 обновились и всегда возвращали новую запись 5.6.7.8. Потрясающе. Это довольно быстро!

Не всегда можно полагаться на TTL

Как и в большинстве интернет-протоколов, не всё подчиняется спецификации DNS. Некоторые DNS-серверы интернет-провайдеров будут кэшировать записи дольше, чем указано в TTL. Например, в течение двух дней вместо пяти минут. И люди всегда могут жестко закодировать старый IP-адрес в своем файле /etc/hosts .

На практике при обновлении записи DNS с пятиминутным TTL можно ожидать, что большой процент клиентов быстро перейдет на новые IP-адреса (например в течение 15 минут), а затем появится куча отставших, которые будут медленно обновляться в течение следующих нескольких дней.

Вариант 2: обновление ваших серверов имен

Итак, мы видели, что когда вы обновляете IP-адрес, не меняя свои серверы имен, многие DNS-серверы довольно быстро получают новый IP-адрес. Отлично. Но что произойдет, если вы измените свои серверы имен? Давайте попробуем!

Ладно, давайте посмотрим, изменилось ли что-нибудь:


Никаких изменений. Если я спрошу другой DNS-сервер, то он знает новый IP:

У серверов имен TTL намного больше

Причина, по которой мой регистратор говорил: «Это займёт 48 часов» в том, что TTL на NS-записях (сведения о том, к какому серверу имен должен обратиться рекурсивный сервер) намного больше.


172 800 секунд — это 48 часов! Таким образом, обновление сервера имен, как правило, занимает гораздо больше времени. Время нужно, чтобы закончился срок действия кэшей и распространился новый адрес. Это гораздо дольше, чем просто обновление IP-адреса без изменения вашего сервера имен.

Как обновляются ваши серверы имен

Библиотека DNS-резолвера вашей программы также может кэшировать записи DNS

Еще одна причина, по которой TTL может не соблюдаться на практике: многие программы должны резолвить DNS-имена, а некоторые программы также будут кэшировать DNS-записи в памяти на неопределенный срок (до тех пор, пока программу не перезапустят).

Например, есть статья о настройке JVM TTL для поиска DNS-имен. Я сама писала не так много кода JVM для поиска DNS, но небольшой поиск в интернете о JVM и DNS создает впечатление, что вы можете настроить JVM так, чтобы он кэшировал каждый поиск DNS в течение бесконечного времени (например, см. этот тикет ElasticSearch).

Вот и всё!

Надеюсь, что это поможет вам понять, что происходит при обновлении вашего DNS.

Оговорюсь, что всю историю распространения DNS определяют не только TTL. Некоторые рекурсивные DNS-серверы наверняка не уважают TTL, даже такие основные серверы как 8.8.8.8. Так что даже если вы просто обновляете запись A, указав маленький TTL, возможно, что на практике всё равно будут приходить запросы на старый IP в течение дня или двух.

Система состоит из множества DNS серверов:

  • Десятки корневых серверов, координирующих работу всей системы;
  • Тысячи серверов, поддерживающих доменные зоны, такие как RU, COM, NET;
  • Сотни тысяч иных серверов хостинг-провайдеров, обслуживающих конкретные домены;
  • Сотни тысяч DNS серверов провайдеров интернета, помогающие работать конечным пользователям интернета (кэширующие сервера провайдеров).

Для того, чтобы не нагружать сверх меры все сервера в этой длинной цепочке из 4-5 серверов, на каждом DNS сервере на каждом этапе используется кратковременная память (кеширование). Это позволяет дать приблизительный ответ на вопрос об адресе имени без участия вышестоящих серверов. В случае, если адрес сервера не изменяется (нормальная ситуация), этот ответ является абсолютно правильным, хотя и не «авторитетным».

Кеширование может быть корректным (в соответствии с установленными стандартами сроками) и некорректным (ошибочным, избыточным). В последнем случае старый адрес, в случае его изменения, «застревает» на определенных серверах на сроки, превышающие разрешенные.

Содержание

Текущие стандарты позволяют примерно описать следующие сроки видимости результата для разных типов изменений:

  • От 0 до 6 часов – время изменения самой доменной зоны на DNS сервера регистратора, от 2 до 4 часов на распространение собственно изменений. В сумме принято иметь в виду срок 6 – 12 часов.

Этот же интервал относится к скорости восстановления домена из состояния NOT DELEGATED (выключен) и к процедуре регистрации нового домена.

  • Изменение в систему DNS на 1Gb вносятся немедленно, от 2 до 4 часов занимает распространение изменений;
  • Встречаются такие настройки зон, при которых изменения IP адресов в них будет задержано сильнее. Фактически, длительность позволительного кеширования у зоны может быть указана любая. Поэтому разумным сроком, после которого стоит беспокоиться о результатах изменений, является срок около 24 часов.

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

  • «Пуск», «Выполнить», nslookup.exe;
  • Ввести имя интересующего домена;
  • В ответе программы посмотреть, какой именно DNS сервер дал вам ответ, имеющий неправильный адрес;
  • Обратиться к администратору этого DNS сервера с просьбой прокомментировать ситуацию.

Чаще всего найденный таким способом DNS сервер будет внутрисетевым сервером вашего офиса или иной группы (дома, сети). Неправильная настройка таких небольших серверов является частым явлением.

Абсолютно бесполезно требовать от любого хостинг-провайдера ускорить изменение эффекта от изменения DNS записей. Изменения на уровне хостинг-провайдера вносятся мгновенно, дальнейшая их судьба на совести других DNS серверов, над которыми нет контроля.

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

Читайте также: