Открыть сервисСервис

DNS-кэширование

DNS-кэширование — это механизм временного хранения результатов DNS-запросов (соответствий между доменными именами и IP-адресами) на различных уровнях инфраструктуры сети, предназначенный для ускорения разрешения имён и снижения нагрузки на авторитетные DNS-серверы. Процесс регламентирован стандартами RFC 1034 и RFC 1035, а также более поздними дополнениями (RFC 2181, RFC 8767).

Принцип работы

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

Ключевые параметры

  • TTL (Time to Live) — время в секундах, в течение которого запись считается актуальной. Задаётся авторитетным сервером для каждой записи. Стандартные значения варьируются от 60 секунд (для записей, подверженных частым изменениям) до 86400 секунд (24 часа) для стабильных ресурсов.
  • Отрицательное кэширование — хранение информации об отсутствии записи (NXDOMAIN). Регламентируется RFC 2308. Позволяет не повторять безуспешные запросы в течение заданного периода (обычно 5–15 минут).
  • Приоритет записей — при наличии нескольких ресурсных записей (например, A и AAAA) кэшируются все, выборка происходит при формировании ответа клиенту.

Уровни кэширования

Локальный кэш операционной системы

Каждая ОС (Windows, Linux, macOS) имеет собственный кэш DNS-резолвера. Обычно хранит небольшое количество записей (до нескольких тысяч) с коротким сроком жизни (по умолчанию 5–60 секунд). Управляется командами ipconfig /flushdns (Windows) или systemd-resolve --flush-caches (Linux).

Кэш промежуточных резолверов

Рекурсивные DNS-серверы (например, BIND, Unbound, системные резолверы интернет-провайдеров) кэшируют ответы для всех своих клиентов. Объём кэша может достигать десятков миллионов записей. Именно этот уровень обеспечивает основное снижение нагрузки на корневые и авторитетные серверы.

Кэш браузеров и приложений

Современные браузеры (Chrome, Firefox, Safari) имеют встроенный DNS-кэш с ограниченным сроком хранения (обычно 60 секунд), что позволяет ускорить повторные посещения сайтов без обращения к ОС.

Преимущества

  • Снижение задержек — ответ из кэша занимает 1–10 миллисекунд против 20–100 миллисекунд при полном рекурсивном запросе.
  • Уменьшение сетевого трафика — по оценкам, кэширование позволяет сократить количество DNS-запросов к корневым серверам на 80–95%.
  • Отказоустойчивость — при недоступности авторитетного сервера клиенты продолжают получать ответы из кэша до истечения TTL.

Проблемы и ограничения

  • Устаревание данных — если TTL задан слишком большим, клиенты могут получать IP-адреса, которые уже не используются (например, после смены хостинг-провайдера). Это приводит к ошибкам соединения.
  • DNS-отравление (cache poisoning) — атака, при которой в кэш резолвера внедряются ложные записи. Методы защиты включают DNSSEC (RFC 4033–4035) и рандомизацию портов (RFC 5452).
  • Несоответствие TTL — некоторые провайдеры игнорируют TTL, заданный авторитетным сервером, и устанавливают собственные значения (обычно 300–600 секунд), что может нарушать работу сервисов с динамическим обновлением записей.
  • Приватность — кэш резолвера провайдера хранит историю запросов всех пользователей, что создаёт риски для конфиденциальности. Решением выступают протоколы DNS-over-HTTPS (DoH) и DNS-over-TLS (DoT).

Очистка и управление

Администраторы могут принудительно очищать кэш при изменении инфраструктуры (смена IP-адреса сервера) или при подозрении на отравление. Для этого используются команды rndc flush (BIND), unbound-control flush_zone (Unbound) или перезапуск службы резолвера. В операционных системах Windows очистка выполняется командой ipconfig /flushdns, в Linux — перезапуском службы systemd-resolved.

Источники

  • RFC 1034, RFC 1035 — Domain Names: Concepts and Facilities.
  • RFC 2181 — Clarifications to the DNS Specification.
  • RFC 2308 — Negative Caching of DNS Queries.
  • RFC 8767 — Serving Stale Data to Improve DNS Resiliency.
  • Документация BIND 9 и Unbound.
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru