Типы ресурсных записей 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].