← Назад в блогРуководства

Типы DNS-записей: A, AAAA, CNAME, MX, TXT и другие

Какие бывают DNS-записи и зачем нужна каждая: как они выглядят в зоне, частые ловушки (CNAME в корне, MX, длина TXT) и как проверить их через dig.

Опубликовано: · 6 мин чтения

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

www.example.com.   3600   IN   A   192.0.2.10
└── name           └ TTL  └class └type └ data

Имя — то, что запрашивают; TTL — сколько секунд резолвер вправе держать ответ в кэше (подробнее в статье что такое TTL в DNS); класс практически всегда IN, а тип определяет, как понимать данные. Ниже разобраны типы DNS-записей, с которыми вы действительно столкнётесь, и правила, нарушение которых приводит к настоящим сбоям.

Краткая шпаргалка

Тип Назначение Пример данных
A IPv4-адрес 192.0.2.10
AAAA IPv6-адрес 2001:db8::10
CNAME псевдоним другого имени shop.hosting.example.
MX почтовые серверы домена 10 mx1.mail.example.
TXT произвольный текст: SPF, DKIM, DMARC, подтверждения "v=spf1 -all"
NS серверы имён, отвечающие за зону ns1.dns.example.
SOA служебные данные зоны, одна на зону серийный номер, таймеры
PTR обратный поиск: от адреса к имени mail.example.com.
SRV хост и порт сервиса 10 5 5060 sip.example.com.
CAA какие УЦ могут выпускать сертификаты 0 issue "ca.example"
DS, DNSKEY, RRSIG DNSSEC ключи и подписи
HTTPS, SVCB параметры сервиса для HTTPS 1 . alpn="h2,h3"

A и AAAA: адреса

A-запись сопоставляет имени IPv4-адрес, AAAA — IPv6-адрес. У одного имени может быть несколько тех и других: резолвер возвращает все, а клиент выбирает один. Так получается грубое распределение нагрузки, но никак не гарантированная отказоустойчивость.

$ dig +short www.example.com A
192.0.2.10
$ dig +short www.example.com AAAA
2001:db8::10

Публикуйте AAAA только тогда, когда сервер действительно отвечает по IPv6. Из-за неработающего IPv6-маршрута сайт у части пользователей открывается медленно или не открывается совсем, хотя «у вас всё работает».

CNAME: псевдонимы и два правила

CNAME-запись означает: «это имя — псевдоним, ищите вместо него вон то». Резолвер начинает поиск заново, уже по целевому имени.

shop.example.com.   3600  IN  CNAME  stores.hosting.example.

Два правила вытекают из стандартов DNS, а вовсе не из прихотей провайдеров:

  1. У имени с CNAME не может быть других записей. Ни MX, ни TXT, ничего (кроме записей DNSSEC).
  2. Значит, CNAME нельзя ставить в корне зоны. Само имя example.com обязано нести записи SOA и NS, поэтому псевдонимом оно быть не может.

Второе правило провайдеры обходят с помощью «ALIAS», «ANAME» или «CNAME flattening»: DNS-провайдер сам разрешает целевое имя и отвечает записями A/AAAA. Это работает, но это функция провайдера, а не тип записи: экспорта зоны к провайдеру, у которого такой функции нет, она не переживёт.

Ещё о CNAME: не направляйте на него записи MX и NS и избегайте длинных цепочек. Каждое звено — это лишний запрос и лишнее место, где что-то может сломаться.

MX: куда идёт почта

Записи MX называют серверы, принимающие почту домена, и задают каждому приоритет. Сначала пробуют меньшее число; при равных числах нагрузка делится.

example.com.  3600  IN  MX  10 mx1.mail.example.
example.com.  3600  IN  MX  20 mx2.mail.example.

Целью должно быть имя хоста с записями A/AAAA: не IP-адрес и не CNAME. Если MX у домена нет вовсе, отправители обращаются к его A-записи, а это редко то, что вам нужно. Домен, который почту не принимает, может заявить об этом явно с помощью null MX: 0 .

SPF, DKIM и DMARC, которые строятся поверх MX и TXT, заслуживают отдельного разговора: см. MX, SPF, DKIM и DMARC: как они работают вместе.

TXT: текст и соглашения поверх него

TXT-запись хранит произвольные строки. По-настоящему важной её делают соглашения, выстроенные поверх:

  • SPF на самом домене: "v=spf1 include:_spf.mail.example -all". На одно имя ровно одна SPF-запись; две дают постоянную ошибку.
  • DKIM на имени selector._domainkey.example.com.
  • DMARC на имени _dmarc.example.com.
  • Строки подтверждения владения для панелей вебмастера, SaaS-сервисов и выпуска сертификатов.

Одна строка в TXT-записи ограничена 255 байтами. Более длинные значения, обычно это 2048-битные ключи DKIM, разбивают на несколько строк в кавычках внутри одной записи, а читающая сторона склеивает их без разделителя:

sel1._domainkey  IN TXT ( "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOC..."
                          "...AQ8AMIIBCgKCAQEA" )

Большинство панелей управления разбивают строку сами. Если делаете это вручную, не добавляйте пробел на стыке.

NS и SOA: каркас зоны

Записи NS перечисляют авторитетные серверы имён. Существуют они дважды: в родительской зоне (это делегирование, его меняют у регистратора) и внутри вашей собственной зоны. Оба набора должны совпадать. Записи NS на поддомене делегируют этот поддомен другим серверам.

SOA — единственная запись в вершине каждой зоны:

example.com. 3600 IN SOA ns1.dns.example. hostmaster.example.com. (
    2026092001 ; serial
    7200       ; refresh
    3600       ; retry
    1209600    ; expire
    300 )      ; negative-caching TTL

Серийный номер сообщает вторичным серверам, что зона изменилась. Последнее поле упускают из виду чаще всего: оно определяет, как долго резолверы кэшируют ответ «такого имени не существует». Именно поэтому запись, созданная через минуту после того, как кто-то её запросил, может какое-то время оставаться невидимой.

Смена записей NS — отдельный проект, и ему нужен отдельный план.

PTR: обратный поиск

Запись PTR сопоставляет адресу имя. Она живёт в особой зоне (in-addr.arpa для IPv4, ip6.arpa для IPv6), которой управляет владелец блока IP-адресов, обычно ваш хостинг-провайдер или оператор связи, а не вы в зоне своего домена.

$ dig +short -x 192.0.2.25
mail.example.com.

Важна она главным образом для почтовых серверов. Подробнее в глоссарии: обратный DNS.

SRV: сервисы с портами

Записи SRV позволяют клиенту найти хост и порт сервиса по имени вида _service._proto.name:

_sip._tcp.example.com. 3600 IN SRV 10 60 5060 sip1.example.com.
;                                  prio weight port target

Ими пользуются SIP, XMPP, Matrix, некоторые сервисы Microsoft и другие. Для сайтов браузеры SRV не используют.

CAA: кому разрешено выпускать сертификаты

CAA перечисляет удостоверяющие центры, которым разрешено выпускать сертификаты для домена. Каждый публичный УЦ обязан проверить её перед выпуском.

example.com.  IN  CAA  0 issue "ca.example"
example.com.  IN  CAA  0 issuewild ";"

Если CAA-записи нет, выпускать может любой УЦ. Подробнее: CAA-запись.

Записи DNSSEC

DNSKEY содержит открытые ключи зоны, RRSIG — подписи каждого набора записей, NSEC/NSEC3 доказывают, что имени не существует, а DS в родительской зоне включает ключ дочерней зоны в цепочку доверия. Все эти записи создаёт ваш DNS-провайдер, кроме DS: её вы (или провайдер) передаёте через регистратора.

HTTPS и SVCB

Запись HTTPS (частный случай SVCB) позволяет браузеру прямо из DNS-ответа узнать, что сайт поддерживает HTTP/2 или HTTP/3, какие адреса использовать и, при необходимости, целевой псевдоним, причём даже в корне зоны. Крупные CDN публикуют её автоматически. Писать такую запись вручную приходится редко, но в результатах проверки вы её увидите:

$ dig +short example.com HTTPS
1 . alpn="h2,h3"

А что с ANY?

Когда-то dig example.com ANY возвращал всё, что было у сервера. Теперь многие серверы отвечают минимальным ответом, потому что ANY использовали в атаках с усилением (amplification). Чтобы увидеть записи зоны, запрашивайте каждый интересующий тип по отдельности. Публичного запроса, который перечислил бы все имена в зоне, не существует: передача зоны (AXFR) разрешена только авторизованным вторичным серверам.

Частые ошибки

  • CNAME в корне зоны или CNAME рядом с MX/TXT на одном имени.
  • MX, указывающая на IP-адрес или на CNAME.
  • Две TXT-записи SPF на одном имени.
  • Пропущенная точка в конце имени в файле зоны, из-за чего mx1.mail.example превращается в mx1.mail.example.example.com.. Панели управления по-разному относятся к этой точке: проверяйте результат через dig.
  • Запись AAAA для сервера, у которого IPv6 не работает.
  • Запись создана на www, а ждут, что за ней последует и домен без www, или наоборот. Это разные имена.
  • Забытый TTL отрицательного кэширования, когда новая запись «не появляется».

Проверьте в OrbitProbe

Проверка DNS-записей в OrbitProbe за один раз запрашивает для имени A, AAAA, CNAME, MX, TXT, NS, SOA и CAA и показывает TTL каждого ответа, так что опубликованное можно сравнить с задуманным. Проверяйте отдельно домен без www и отдельно www: это разные имена с разными записями. Если дело в доставке почты, продолжайте по чек-листу DNS для писем, попадающих в спам.