Распространение DNS: почему изменения DNS занимают время и как их проверить | Check Host

Изменили DNS-запись, а кто-то всё ещё видит старую? Как TTL и кеш резолверов вызывают «распространение» и как проверить его по всему миру.

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

Что происходит на самом деле

Когда кто-то заходит на ваш домен, его устройство спрашивает рекурсивный резолвер (провайдера или публичный, например 1.1.1.1 или 8.8.8.8). Резолвер один раз спрашивает ваши авторитативные серверы имён и кеширует ответ на столько, сколько позволяет TTL записи. Пока TTL не истечёт, все, кто пользуется этим резолвером, получают старый, закешированный ответ.

Значит, максимальная задержка изменения примерно равна старому TTL записи. Запись с TTL 86400 секунд может обновляться до суток, с TTL 300 — около пяти минут.

Как сделать изменения быстрыми

  1. За день до изменения снизьте TTL записи до 300 секунд.
  2. Дождитесь, пока истечёт старый длинный TTL.
  3. Внесите изменение. Теперь кеши обновятся за минуты.
  4. Когда всё работает правильно, снова увеличьте TTL.

Смена серверов имён занимает больше времени

Смена NS-серверов домена (у регистратора) затрагивает серверы доменной зоны верхнего уровня, у NS-записей которых TTL обычно сутки-двое. Закладывайте до 48 часов.

Проверка распространения по всему миру

DNS-запрос опрашивает вашу запись с резолверов во многих странах одновременно, так что видно, где уже отдаётся новое значение, а где ещё старое. Можно запрашивать записи A, AAAA, CNAME, MX, TXT, NS, SOA и PTR и выбирать конкретный резолвер.

Что обычно проверяют после изменения:

Локально всё ещё старый ответ?

Ваш компьютер и браузер тоже кешируют DNS. Очистите кеш (ipconfig /flushdns в Windows, sudo resolvectl flush-caches в большинстве Linux, sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder в macOS) или проверьте через другой резолвер. Затем убедитесь проверкой сайта, что сам сайт отвечает с нового сервера.