Типы ресурсных записей DNS

Ресу́рсные за́писи DNS — записи о соответствии имени и служебной информации в системе доменных имён, например, соответствие имени домена и IP-адреса[1]. Ресурсные записи являются фундаментальными элементами системы доменных имён, обеспечивающими маршрутизацию в сети[2].

Служба DNS функционирует на прикладном (седьмом) уровне сетевой модели OSI и использует для передачи запросов протоколы UDP и TCP через порт 53[3]. Распределение ресурсных записей по зонам ответственности основано на иерархической структуре пространства имён и механизме делегирования, при котором управление поддоменами передаётся авторитативным DNS-серверам[4].

Базовые стандарты ресурсных записей определены в документах RFC 1034 и RFC 1035[5]. В современной архитектуре интернета они играют критически важную роль для облачных технологий, балансировки нагрузки в сетях доставки контента (CDN) и обеспечения кибербезопасности[6]. В частности, ресурсные записи используются для аутентификации электронной почты с помощью механизмов SPF, DKIM и DMARC, а также для защиты целостности данных посредством расширений DNSSEC[7][8].

Формат записи

Согласно стандарту RFC 1035[9], все ресурсные записи имеют общий формат для передачи в сети, который используется в разделах ответов, полномочий и дополнительной информации в DNS-сообщениях.

Схема двоичного формата ресурсной записи[9]:

                                    1  1  1  1  1  1
      0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                                               |
    /                                               /
    /                      NAME                     /
    |                                               |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                      TYPE                     |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                     CLASS                     |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                      TTL                      |
    |                                               |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                   RDLENGTH                    |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--|
    /                     RDATA                     /
    /                                               /
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

Каждая запись состоит из стандартизированного набора полей:

  • NAME (Имя) — доменное имя, к которому относится данная ресурсная запись. Поле имеет переменную длину; для экономии места в DNS-сообщениях используется схема сжатия имён. В файлах зоны может применяться специальный символ @, обозначающий имя текущего домена[9].
  • TYPE (Тип) — два октета (16 бит), указывающие тип ресурсной записи (например, A, AAAA, MX, CNAME). Поле определяет формат и назначение данных в поле RDATA[9].
  • CLASS (Класс) — два октета (16 бит), определяющие класс данных (тип сети). В подавляющем большинстве случаев для сетей на базе TCP/IP используется значение IN (Internet)[9][10].
  • TTL (Time To Live, время жизни) — согласно RFC 2181, 32-битное целое число без знака, указывающее допустимое время в секундах, в течение которого запись может храниться в кэше DNS-сервера. Нулевое значение означает, что запись не должна кэшироваться. Все записи одного набора (RRset) должны иметь одинаковое значение TTL[11].
  • RDLENGTH (Resource Data Length) — 16-битное целое число без знака, указывающее длину поля RDATA в октетах[9].
  • RDATA (Resource Data, ресурсные данные) — поле переменной длины, содержащее данные, специфичные для конкретного типа записи. Например, для записи типа A поле содержит 32-битный IPv4-адрес, а для MX — приоритет и доменное имя почтового сервера[9].
  • Расширение EDNS0 (RFC 6891) вводит псевдо-запись OPT, которая переиспользует поля RDLENGTH и RDATA для передачи дополнительных опций без изменения их стандартного двоичного формата[12].

Механизм кэширования

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

Выбор значения TTL напрямую влияет на скорость обновления информации для конечных пользователей и на уровень нагрузки на авторитативные DNS-серверы:

  • Низкие значения TTL (например, от 60 до 300 секунд) позволяют изменениям в DNS-записях распространяться по сети значительно быстрее. Это востребовано при плановых изменениях инфраструктуры, таких как смена IP-адреса. Однако более частые запросы на обновление приводят к увеличению нагрузки на авторитативные серверы.
  • Высокие значения TTL (например, 3600 или 86400 секунд) снижают количество обращений к авторитативным серверам и ускоряют выдачу ответов для стабильных ресурсов. Главным недостатком является то, что при внесении изменений на авторитативном сервере пользователи продолжат получать устаревшие данные из кэша вплоть до истечения заданного времени. Хотя традиционно считалось, что процесс распространения изменений может занимать до 48 часов, в современных сетях это время обычно составляет 4—8 часов[13].

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

Механизм отрицательного кэширования (negative caching) позволяет рекурсивным DNS-серверам временно сохранять информацию об отсутствии запрашиваемой ресурсной записи. Согласно стандарту RFC 2308, время хранения несуществующих записей в кэше определяется значением поля MINIMUM в записи SOA[14].

Современные рекомендации по выбору значений TTL зависят от типа записи: для статичных записей A и AAAA рекомендуется устанавливать от 1 до 4 часов, для почтовых записей MX — от 12 до 24 часов, для записей NS — 24 часа и более, а для динамических записей — от 5 до 10 минут[15].

Типы ресурсных записей

В настоящий момент определены следующие типы ресурсных записей (жирным выделены наиболее используемые записи): Авторитетным источником информации о всех типах ресурсных записей является реестр IANA[16][17].

тип расшифровка названия (англ.) код описание употребимость RFC
A Address 1 адресная запись, соответствие между именем и IP-адресом; только латиница, цифры и дефис одна из самых часто используемых записей RFC 1035
A6 Address version 6 38 адрес в формате IPv6 заменена на AAAA из-за чрезмерной сложности в реализации, статус «экспериментальной»[18]. RFC 3363, RFC 2874
AAAA A+1+1+1 (A использовался для IPv4, AAAA для IPv6) 28 адрес в формате IPv6 эквивалент А для IPv6; только латиница и дефис RFC 3596
AFSDB AFS database 18 расположение базы данных AFS редкоупотребимая, чаще используется SRV-запись RFC 1183
AVC Application Visibility and Control 258 видимость и контроль приложений AVC/avc-completed-template
CAA Certification Authority Authorization 257 контроль выдачи SSL/TLS-сертификатов[19] RFC 8659
CNAME Canonical name 5 каноническое (альтернативное) имя для псевдонима домена (одноуровневая переадресация); для написания национальными символами широко используется (но имеет ограничения по применению) RFC 1035
DNSKEY DNS Key record 48 ключ подписи в DNSSEC; формат — как в записи KEY RFC 4034
DS Delegation signer 43 отпечаток (fingerprint) ключа подписи в DNSSEC DNSSEC RFC 3658
HINFO Host Information 13 информация об узле редкоупотребима RFC 1035
ISDN ISDN address 20 адрес в формате ISDN редкоупотребима (из-за малой популярности сетей ISDN без IP-маршрутизации) RFC 1183
KEY Public key 25 открытый ключ, используется в DNSSEC малоупотребима RFC 2535, RFC 3445
LOC Location information 29 географическое местоположение домена RFC 1876
MB Mailbox 7 почтовый ящик редкоупотребима, экспериментальна RFC 1035
MG Mail group member 8 номер почтовой группы редкоупотребима, экспериментальна RFC 1035
MINFO Mailbox or mailing list information 14 информация о почтовом ящике или рассылке экспериментальна RFC 1035
MX Mail Exchanger 15 адрес почтового шлюза для домена: состоит из двух частей — приоритета (чем число больше, тем ниже приоритет), и адреса узла критически важна для SMTP-протокола, основа маршрутизации почты в Интернете RFC 1035
NAPTR Naming authority pointer 35 указатель на авторитетный узел именования (используется для IP-телефонии) малоупотребима RFC 3263, RFC 3403
NULL Null record 10 пустая запись редкоупотребима, экспериментальна RFC 1035
NS Authoritative name server 2 адрес узла, отвечающего за доменную зону: критически важна для функционирования самой системы доменных имён DNS RFC 1035
NSAP Network service access point address 22 указатели в стиле OSI редкоупотребима RFC 1706
NSEC Next-Secure record 47 часть DNSSEC, подтверждает отсутствие записи; формат — как у NXT DNSSEC RFC 4034
NSEC3 Next-Secure record 50 расширение DNSSEC, подтверждающее отсутствие записи без возможности просмотра содержимого зоны DNSSEC RFC 5155
NSEC3PARAM NSEC3 parameters 51 запись с параметрами для NSEC3 DNSSEC RFC 5155
PTR pointer 12 соответствие адреса — имени: обратное соответствие для A и AAAA широко используется для IPv4-адресов в домене in-addr.arpa, для IPv6 — в ip6.arpa RFC 1035
PX Pointer to X.400 ? указатель на систему маршрутизации почты X.400 X.400 RFC 822, RFC 2163
RP Responsible person 17 информация об ответственном лице (содержит mailbox-dname и txt-dname)[20] редкоупотребима RFC 1183
RRSIG DNSSEC signature 46 подпись записи средствами DNSSEC; формат — как у SIG DNSSEC RFC 4034
RT Route through 21 указание на узел, через который следует осуществлять маршрутизацию малоупотребима RFC 1183
SIG Cryptographic public key signature 24 сигнатура публичной подписи малоупотребима RFC 2931
SOA Start of authority 6 указание на авторитетность информации, используется для указания на новую зону DNS RFC 1035
SRV Server selection 33 указание на местоположение серверов для сервисов Jabber, Active Directory RFC 2782
SSHFP SSH Fingerprints 44 отпечаток ключа SSH малоупотребима RFC 4255
TKEY Transaction key 249 метод распространения ключей для TSIG-записей RFC 2930
TLSA Certificate association 52 ресурсная запись технологии DANE для защиты SMTP[21] активно внедряется RFC 6698
TSIG Transaction signature 250 идентификация для DNS-операций с использованием общих секретных ключей и хэшей при передаче зон между DNS-серверами RFC 2845
TXT Text string 16 запись произвольных двоичных данных, до 255 байт в размере Sender Policy Framework, DNS-туннели и прочее RFC 1035
WKS Well-known service 11 список доступных общеизвестных сервисов (общеизвестные — с регистрированными номерами портов) RFC 1035
X25 PSDN address 19 адрес в формате X.25 редкоупотребима RFC 1183
SVCB Service Binding 64 оптимизация соединений, привязка служб и обнаружение их параметров (поддержка HTTP/3, ALPN, ECH)[22] активно внедряется RFC 9460
HTTPS HTTPS 65 оптимизация соединений для HTTPS (поддержка HTTP/3, ALPN, ECH)[22] активно внедряется RFC 9460
CDNSKEY Child DNSKEY 60 автоматизация DNSSEC[23] RFC 7344, RFC 8078
CDS Child Delegation Signer 59 автоматизация DNSSEC[23] RFC 7344, RFC 8078
ZONEMD Message Digest for DNS Zones 63 проверка целостности зоны[24] RFC 8976

Ограничения использования

Согласно стандартам DNS (RFC 1912 и RFC 1034), использование записи типа CNAME на вершине зоны (корневом домене) запрещено. Это ограничение связано с тем, что при наличии записи CNAME для узла не могут существовать никакие другие ресурсные записи. При этом вершина зоны обязательно должна содержать записи SOA и NS, необходимые для корректной работы доменной зоны, что делает невозможным их совместное использование без возникновения конфликтов[25].

Для обхода данного ограничения современные DNS-провайдеры применяют технологию CNAME Flattening (сглаживание CNAME) или проприетарные типы записей, такие как ALIAS и ANAME. Эти решения позволяют указывать целевое доменное имя для вершины зоны: DNS-сервер провайдера самостоятельно разрешает его в IP-адреса и возвращает клиенту в виде стандартных записей A или AAAA, не нарушая архитектуру DNS[26].

Источники

Категории