Кэш DNS

Протоколы и стандарты
Временное хранилище DNS-ответов, сокращающее число повторных запросов к серверам имён.
← Вернуться к глоссарию

Что такое DNS-кэш?

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

Почему кэширование DNS важно

Кэш снижает задержку и нагрузку на авторитетные серверы, но задерживает миграцию и усложняет диагностику.

Как работает DNS-кэш

Иерархия кэширования

Кэш есть в браузере, ОС, локальной сети и рекурсивном резолвере; у каждого слоя свой срок и политика.

Browser Cache (seconds to minutes)

OS Cache (seconds to minutes)

Local Resolver Cache (minutes to hours)

ISP Resolver Cache (minutes to hours)

Authoritative Name Server (source of truth)

Процесс поиска в кэше

Резолвер ищет имя и тип, проверяет оставшийся TTL, а при промахе обращается к авторитетным серверам.

Истечение по TTL

После нулевого TTL запись нужно запросить снова. Отрицательные ответы кэшируются по SOA-политике.

example.com.    300    IN    A    203.0.113.50

^^^

TTL in seconds (5 minutes)

Слои DNS-кэша

Кэш браузера

Браузер может хранить ответ дольше сетевого резолвера по собственной политике.

Кэш операционной системы

ОС или локальный stub resolver сохраняет записи для приложений устройства.

# View cache

ipconfig /displaydns

# Flush cache

ipconfig /flushdns

# Flush cache (macOS 10.15+)

sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

# Flush systemd-resolved cache

sudo systemd-resolve --flush-caches

# Check statistics

sudo systemd-resolve --statistics

Кэш резолвера

Рекурсивный DNS-сервис отвечает из общего кэша до TTL и может обслуживать многих клиентов.

РезолверСтратегия кэширования
Google (8.8.8.8)Соблюдает TTL, глобальный кэш
Cloudflare (1.1.1.1)Соблюдает TTL, распределённый кэш
Резолверы ISPМогут игнорировать низкие TTL

Примеры поведения кэша

Обычная работа

Повторный запрос получает кэшированный ответ с уменьшенным TTL и без нового обращения к authoritative NS.

Query 1: example.com

→ Full lookup: 50ms

→ Cached for 300s (TTL)

Query 2: example.com (1 minute later)

→ Cache hit: 1ms

Query 3: example.com (10 minutes later)

→ Cache expired, full lookup: 50ms

→ Re-cached for 300s

Обновление DNS-записи

После изменения зоны часть клиентов увидит старый IP, пока не истечёт прежний TTL.

Original: example.com → 203.0.113.50 (TTL: 300s)

Time: 10:00 - DNS updated to 203.0.113.51

Client queries at 10:02

→ Still cached: 203.0.113.50 (expires 10:05)

Client queries at 10:06

→ Cache expired, new lookup: 203.0.113.51

→ Cached until 10:11

Стратегия TTL и кэширование

Выбор TTL

Большой TTL подходит стабильным записям, малый - подготовке миграции; учитывайте нагрузку и риск задержки.

СценарийРекомендуемый TTLОбоснование
Стабильная инфраструктура3600–86400 с (1–24 часа)Редко меняется, снижает нагрузку DNS
Рабочий сайт300–1800 с (5–30 минут)Баланс производительности и гибкости
Активная миграция60–300 с (1–5 минут)Быстрее распространяет изменения
Балансировка нагрузки60–120 сБыстрое переключение при смене серверов

Снижение TTL перед миграцией

Уменьшите TTL заранее, дождитесь обновления кэшей, переключите ресурс и верните значение после стабилизации.

Day -7: example.com TTL 3600s (1 hour)

Day -2: Reduce to 300s (5 minutes)

Day 0: Make DNS change

→ Max 5 minute cache retention

Day +1: Restore TTL to 3600s

Отравление DNS-кэша и безопасность

Атака отравления кэша

Злоумышленник пытается подменить ответ, чтобы направить пользователя на чужой адрес. DNSSEC и защищённый транспорт снижают риск.

Меры защиты

Используйте DNSSEC, актуальные резолверы, ограничение доступа, мониторинг, случайные идентификаторы и проверку источника.

example.com.    IN    A      203.0.113.50

IN RRSIG A 8 2 300 ...

Проверка DNS-кэша

Просмотр содержимого кэша

Открытый кэш нельзя считать доказательством владения. Используйте администраторские инструменты только в своей сети.

ipconfig /displaydns | more
sudo killall -INFO mDNSResponder

# Check Console.app for logs

sudo systemd-resolve --statistics

Проверка поведения кэша

Сравнивайте authoritative и recursive ответы, TTL, timestamp, регион и тип записи.

# First query (cache miss)

time dig example.com

# Immediate repeat (cache hit)

time dig example.com

# Compare times

Проблемы, связанные с кэшем

Старый кэш после изменения DNS

Старый ответ не означает, что публикация не состоялась. Учитывайте максимальный прежний TTL и отрицательное кэширование.

Слишком агрессивное кэширование

Чрезмерный TTL задерживает отказоустойчивость, отзыв адреса и исправление ошибки.

Отрицательное кэширование

NXDOMAIN и NODATA кэшируются по SOA и могут скрывать новую запись до истечения срока.

Query: newsubdomain.example.com

Response: NXDOMAIN (does not exist)

Cached: 3600s (SOA minimum TTL)

Result: New subdomain won't resolve for 1 hour

Очистка DNS-кэша

Когда очищать кэш

Flush полезен при локальной диагностике, но не удаляет кэши всех резолверов и пользователей.

Как очистить кэш

Используйте команду ОС, браузера или управляемого резолвера, не меняя зону без необходимости.

ipconfig /flushdns
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
sudo systemd-resolve --flush-caches
Navigate to: chrome://net-internals/#dns

Click: "Clear host cache"

Toggle network.dnsCacheExpiration in about:config

Or restart browser

Лучшие практики

Документируйте TTL, проверяйте несколько источников, используйте DNSSEC и не классифицируйте stale, timeout или SERVFAIL как отсутствие домена.

Расширенные концепции кэширования

Предварительное обновление (prefetching)

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

<!-- Hint to browser -->

<link rel="dns-prefetch" href="//cdn.example.com">

Прогрев кэша

Предварительные запросы прогревают кэш после миграции, но не заменяют корректную делегацию и мониторинг.

Anycast и кэширование

Anycast направляет клиента к ближайшему узлу резолвера; ответы и TTL всё равно зависят от конкретного кэша.

Применяйте эти знания на практике

Используйте API DomScan для проверки доступности доменов, их состояния и многого другого.