awesome-everything EN
↑ Обратно к восхождению

Сети и протоколы

TTL, кеширование и распространение DNS

Суть TTL — это разрешение, а не команда: понимание его операционного воздействия на свежесть данных, нагрузку и миф о распространении DNS.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на middle-высоте — в небе
◷ 14 min

Вы обновили DNS-запись, и коллега видит изменение. Вы — нет. Через час изменение наконец появляется у вас. Менеджер называет это «распространением DNS» и говорит подождать 24–48 часов. Эта трактовка технически неверна и операционно дорогостояща. Понимание того, что такое TTL на самом деле — разрешение, а не команда — меняет подход к управлению DNS-записями в продакшене.

Что означает TTL

Каждая DNS-запись несёт TTL (Time To Live) — число в секундах. Когда резолвер кеширует ответ, он отсчитывает от TTL до нуля. При достижении нуля кешированная запись удаляется и выполняется повторный запрос. Авторитативный сервер не проталкивает обновления — кеши истекают и сами запрашивают новое значение по собственному расписанию.

Отсюда два операционных следствия:

  1. Нельзя принудительно удалить закешированное значение. Как только TTL опубликован и закеширован, остаётся только ждать, пока он истечёт повсеместно.
  2. «Распространение DNS» — вводящий в заблуждение термин. Ничего не распространяется. Просто распределённые кеши истекают один за другим. Никакой волны нет, никакого единого таймера нет. Кеш, заполненный за 1 минуту до вашего изменения, будет хранить старое значение ещё (TTL − 1 минута).

Высокий TTL vs низкий TTL

TTLПреимуществоСтоимость
Высокий (86400 с = 1 день)Мало запросов; быстрые обращения к кешу; авторитативный сервер несёт меньше нагрузкиУстаревшие данные сохраняются до 1 дня после изменения
Низкий (60 с)Устаревшие данные очищаются через 1 минуту после измененияБольше запросов; более высокая нагрузка на авторитативный; кеш не спасает при недоступности авторитативного
Процент попаданий в кеш при устойчивой нагрузке (10 запросов/час)
TTL = 60 с
~17% попаданий
TTL = 300 с
~50% попаданий
TTL = 3600 с
~90% попаданий
TTL = 86400 с (1 день)
~99% попаданий
SOP для запланированных изменений
Снизить TTL до 60 с за неделю, изменить, поднять обратно

SOP для запланированной миграции

Стандартный операционный шаблон для запланированного изменения DNS:

  1. За неделю до: Снизить TTL до 60 секунд. Дождаться, пока старый высокий TTL истечёт повсеместно (максимальное ожидание = старый TTL).
  2. День изменения: Обновить запись. Плохой результат достижим немедленно — максимальный возраст кеша теперь 60 с.
  3. После стабилизации: Поднять TTL обратно до 3600 с или выше.

Пропуск шага 1 означает, что старые кеши могут отдавать устаревшие данные в течение старого TTL (например, 24 часов) после вашего изменения.

Негативное кеширование (RFC 2308)

Кеши DNS хранят не только положительные ответы. Они также кешируют отрицательные:

  • NXDOMAIN (имя не существует) — кешируется на min(SOA.MINIMUM, SOA.TTL), обычно 1–3 часа.
  • NODATA (имя существует, но записи нужного типа нет) — то же время хранения.
  • SERVFAIL — кешируется кратко согласно RFC 9520: от 30 секунд до 5 минут. Достаточно коротко, чтобы не усугублять сбой, достаточно долго, чтобы предотвратить плотный цикл повторных попыток.

Негативное кеширование необходимо для производительности: без него каждый запрос к несуществующему поддомену каждый раз попадал бы на авторитативный сервер. Без кеширования SERVFAIL ранние шторма опечаток и неправильно настроенные клиенты могли бы перегрузить авторитативные серверы.

Викторина

Что TTL на самом деле сообщает нижестоящим резолверам?

Викторина

Вы изменяете A-запись на авторитативном сервере. Резолвер закешировал старое значение 10 минут назад с TTL=3600. Через сколько времени тот резолвер начнёт отдавать новое значение?

Запись SOA и авторитет зоны

В каждой зоне есть ровно одна запись SOA (Start of Authority) в вершине зоны. Её поля управляют репликацией и негативным кешированием:

  • SERIAL: инкрементируется при каждом изменении зоны. Вторичные серверы сравнивают свой serial с serial первичного; если меньше — вытягивают обновление.
  • REFRESH: как часто вторичные опрашивают первичный без NOTIFY (обычно 1–24 часа).
  • RETRY: интервал опроса при сбое REFRESH.
  • EXPIRE: как долго вторичный сервер отдаёт устаревшие данные при недоступности первичного (часто 1 неделя).
  • MINIMUM: TTL негативного кеша (RFC 2308). Фактический TTL негативного кеша равен min(SOA.MINIMUM, SOA.TTL).

Частая операционная ошибка: уменьшение SERIAL. Принято формат YYYYMMDDNN (2026051301 = 2026-05-13, изменение №01). Ручные правки, уменьшающие SERIAL, молча ломают репликацию — вторичные серверы пропускают «устаревшую» зону.

Расставь шаги по порядку

Расставьте рекомендуемые шаги для запланированной миграции DNS (смена IP в A-записи):

  1. 1 Определить текущий TTL (например, 86400 с)
  2. 2 Снизить TTL до 60 с; дождаться истечения старого TTL повсеместно
  3. 3 Обновить A-запись на новый IP
  4. 4 Следить за ошибками; убедиться, что новый IP резолвится корректно
  5. 5 Поднять TTL обратно до 3600 с или выше
Почему это работает

Stale-while-revalidate (RFC 8767). Когда вышестоящий авторитативный недоступен, но запись в кеше уже просрочена, резолвер может отдавать устаревший ответ до 1–3 дней (настраивается), одновременно пытаясь обновить его в фоне. Это резко повышает доступность при сбоях авторитативного за счёт отдачи слегка устаревших данных. Unbound поддерживает это через serve-expired yes. Компромисс: если зона была намеренно удалена, а не просто недоступна, stale-while-revalidate скрывает это удаление от пользователей дольше, чем следовало бы из TTL.

DNS-кеш браузера

Браузеры ведут собственный DNS-кеш, отдельный от stub-резолвера ОС и вышестоящего рекурсивного резолвера. Chrome кеширует DNS-записи примерно 1 минуту вне зависимости от фактического TTL записи — намеренно короткий срок, чтобы не запоминать потенциально вредоносные ответы, и достаточно долгий, чтобы не резолвить заново каждую ссылку на странице. Firefox придерживается аналогичной политики.

Очистка DNS-кеша на уровне ОС (sudo systemd-resolve --flush-caches на Linux, sudo killall -HUP mDNSResponder на macOS) не очищает кеш браузера. Для полного сброса резолюции: перезапустить браузер или открыть chrome://net-internals/#dns и очистить кеш хостов.

Браузеры также предварительно прогревают DNS через <link rel="dns-prefetch" href="//cdn.example.com"> — резолвируют имена до того, как пользователь кликнет на ссылку, скрывая тем самым задержку lookup.

Вспомните перед уходом
  1. 01
    Операционное воздействие высокого TTL vs низкого TTL — назовите по одному преимуществу и одному недостатку каждого.
  2. 02
    Вы наблюдаете, что dig @1.1.1.1 example.com A возвращает 80 мс при каждом запросе. Что это означает?
  3. 03
    Что такое негативное кеширование и почему оно важно?
Итог

TTL — максимальное время хранения для нижестоящих кешей, а не гарантия действительности от авторитативного сервера. У DNS нет механизма push: «распространение» — это просто распределённые кеши, истекающие один за другим. Для безопасного проведения запланированного изменения нужно снизить TTL задолго до него, чтобы окно максимально устаревших данных было коротким. Отрицательные ответы — NXDOMAIN, NODATA и SERVFAIL — тоже кешируются: первые два управляются SOA.MINIMUM, третий — RFC 9520. Запись SOA контролирует репликацию зоны: инкремент SERIAL сигнализирует вторичным серверам вытянуть обновления, а уменьшение SERIAL молча ломает репликацию. Браузеры ведут собственный DNS-кеш, независимый от резолвера ОС; очистка кеша ОС не влияет на кеш браузера.

Связанные уроки
встречается в152
Продолжить восхождение ↑DNSSEC: цепочка доверия и сбой валидации
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources4
expand
  1. 01
  2. 02
  3. 03
  4. 04

Trademarks belong to their respective owners. Editorial reference only.