Типы 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, а вовсе не из прихотей провайдеров:
- У имени с CNAME не может быть других записей. Ни
MX, ниTXT, ничего (кроме записей DNSSEC). - Значит, 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 для писем, попадающих в спам.