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

SOA запись

SOA-запись (Start of Authority, запись начала полномочий) — это тип ресурсной записи в системе доменных имён (DNS), который содержит ключевую административную информацию о зоне DNS. Она определяет, какой сервер является основным (авторитативным) источником данных для данной зоны, задаёт параметры кэширования, репликации и обновления зоны, а также указывает контактный адрес ответственного лица. SOA-запись является обязательной для каждой корректно настроенной зоны DNS и всегда располагается первой в её файле.

Структура и синтаксис

SOA-запись имеет строгий формат и состоит из нескольких полей, разделённых пробелами или табуляцией. В стандартном представлении (например, в файле зоны BIND) она выглядит следующим образом:

`` example.com. IN SOA ns1.example.com. admin.example.com. ( 2025031501 ; serial 3600 ; refresh 1800 ; retry 604800 ; expire 86400 ; minimum TTL ) ``

Основные элементы записи:

  • Имя зоны (owner name) — домен, к которому относится запись (например, example.com.).
  • Класс (class) — обычно IN (Internet).
  • ТипSOA.
  • Основной сервер имён (MNAME) — полное доменное имя (FQDN) первичного (основного) сервера, который содержит эталонную копию зоны. Обычно указывается с точкой в конце.
  • Почтовый ящик администратора (RNAME) — адрес электронной почты ответственного лица, закодированный в формате DNS (символ @ заменяется на точку). Например, admin.example.com. соответствует admin@example.com.
  • Серийный номер (serial) — 32-битное целое число, которое увеличивается при каждом изменении данных в зоне. Используется вторичными (подчинёнными) серверами для проверки необходимости обновления копии зоны.
  • Время обновления (refresh) — интервал в секундах, через который вторичные серверы должны запрашивать у первичного сервера серийный номер для проверки изменений.
  • Время повторной попытки (retry) — интервал в секундах, через который вторичный сервер повторяет запрос, если предыдущая попытка обновления не удалась.
  • Время истечения (expire) — интервал в секундах, по истечении которого вторичный сервер перестаёт обслуживать запросы к зоне, если ему не удалось связаться с первичным сервером.
  • Минимальное время жизни (minimum TTL, ранее — negative caching TTL) — время в секундах, которое кэширующие серверы должны хранить отрицательные ответы (например, запись NXDOMAIN) для данной зоны. В современных реализациях DNS это поле также может интерпретироваться как TTL для SOA-записи.

Назначение и функции

SOA-запись выполняет несколько критически важных функций в работе DNS:

  • Определение авторитативности — указывает, какой сервер является основным источником данных для зоны. Все остальные серверы, обслуживающие зону, считаются вторичными и получают данные от первичного.
  • Управление репликацией — параметры refresh, retry, expire и serial задают протокол взаимодействия между первичным и вторичными серверами, обеспечивая синхронизацию данных (зонный трансфер, AXFR/IXFR).
  • Кэширование и кэш-негатива — поле minimum TTL определяет, как долго резолверы могут хранить отрицательные ответы, что влияет на нагрузку на серверы и скорость обнаружения несуществующих доменов.
  • Административная информация — контактные данные администратора позволяют решать технические проблемы владельцам других зон или провайдерам.

История и стандартизация

SOA-запись была впервые определена в RFC 883 (1983 год) как часть оригинальной спецификации DNS. Впоследствии её формат и семантика были уточнены в RFC 1034 и RFC 1035 (1987 год), которые остаются основными стандартами для DNS. Позднее, в RFC 2308 (1998 год), было введено понятие «отрицательное кэширование» (negative caching), и поле minimum TTL стало использоваться именно для этой цели, а не для указания TTL самой SOA-записи, как это было ранее.

Практическое использование

Настройка зоны

При создании новой зоны DNS администратор обязан корректно заполнить SOA-запись. Типичные рекомендации для значений:

  • Serial — часто используется формат YYYYMMDDNN, где NN — номер изменения за день (например, 2025031501). Это упрощает отслеживание изменений.
  • Refresh — обычно от 3600 (1 час) до 86400 (24 часа). Для динамически меняющихся зон может быть меньше.
  • Retry — обычно меньше refresh, например 1800 (30 минут) или 3600.
  • Expire — от 604800 (7 дней) до 1209600 (14 дней). Слишком малое значение может привести к отказу в обслуживании при временных проблемах с сетью.
  • Minimum TTL — от 300 (5 минут) до 86400. Для стабильных зон можно устанавливать большие значения, чтобы снизить нагрузку на серверы.

Проблемы и критика

Некорректно настроенная SOA-запись может привести к серьёзным проблемам в работе домена:

  • Слишком малый expire — при длительном сбое первичного сервера вторичные серверы перестанут отвечать на запросы, и зона станет недоступной.
  • Слишком большой refresh — изменения в зоне будут долго распространяться на вторичные серверы.
  • Ошибки в серийном номере — если серийный номер не увеличивается при изменении зоны, вторичные серверы не узнают о необходимости обновления. Если он случайно уменьшается, вторичные серверы могут отказаться принимать обновления.
  • Неверный формат RNAME — приводит к тому, что письма администратору не доставляются.

Примеры в реальных системах

В DNS-серверах BIND, PowerDNS, NSD, Microsoft DNS и других SOA-запись является обязательным элементом конфигурации зоны. В BIND она обычно задаётся в файле зоны, а в PowerDNS может храниться в базе данных. При использовании облачных DNS-провайдеров (например, Яндекс.Облако, Cloudflare, AWS Route 53) значения SOA-записи часто задаются автоматически с возможностью ручной корректировки.

Интересные факты

  • Поле minimum TTL в старых реализациях (до RFC 2308) использовалось как TTL для самой SOA-записи. Современные серверы обычно игнорируют это значение для кэширования SOA-записи, используя отдельный TTL, указанный в начале записи.
  • Серийный номер может быть любым 32-битным числом, но стандарт рекомендует использовать монотонно возрастающую последовательность. В BIND есть возможность автоматического увеличения серийного номера с помощью директивы serial-query-rate.
  • В некоторых DNS-серверах (например, в BIND) для проверки корректности SOA-записи используется утилита named-checkzone.

Источники

  • RFC 1034 — Domain Names — Concepts and Facilities
  • RFC 1035 — Domain Names — Implementation and Specification
  • RFC 2308 — Negative Caching of DNS Queries (DNS NCACHE)
  • DNS and BIND, 5th Edition — Paul Albitz, Cricket Liu
  • Документация BIND 9 (Internet Systems Consortium)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →