DNS
DNS (Domain Name System) — распределённая иерархическая система, которая связывает доменные имена с IP-адресами и другой служебной информацией.
Например, приложение обращается к имени:
example.comDNS может вернуть IPv4-адрес:
93.184.216.34После этого клиент устанавливает сетевое соединение с полученным адресом.
DNS используется не только для поиска IP-адресов. С его помощью также публикуются:
- почтовые серверы домена;
- авторитетные DNS-серверы;
- подтверждения владения доменом;
- правила обработки электронной почты;
- адреса отдельных сервисов;
- данные для балансировки нагрузки и CDN.
Основной транспорт DNS — UDP, обычно через порт 53. TCP также используется через порт 53, например для крупных ответов, передачи зон и в ситуациях, когда UDP-ответ оказался усечённым.
Содержание
- Как работает DNS
- Основные типы DNS-записей
- TTL записей
- Настройка доменной зоны
- Работа с `dig`
- Работа с `nslookup`
- Практические команды
- DNS и CDN
- Частые ошибки конфигурации
- Алгоритм диагностики DNS
- Краткая памятка
Как работает DNS
Основные компоненты DNS
В разрешении доменного имени участвуют несколько компонентов.
Stub resolver
Stub resolver — часть операционной системы или системной библиотеки, через которую приложения выполняют DNS-запросы.
Приложение обычно не обходит DNS-серверы самостоятельно. Оно передаёт запрос системному резолверу:
Какой IP-адрес соответствует www.example.com?Адрес используемого DNS-сервера может быть получен:
- от DHCP;
- от маршрутизатора;
- из сетевых настроек;
- от VPN;
- из ручной конфигурации.
Рекурсивный DNS-сервер
Рекурсивный резолвер получает запрос от клиента, ищет ответ в кэше или проходит по DNS-иерархии.
Примеры публичных рекурсивных DNS-сервисов:
1.1.1.1
8.8.8.8
9.9.9.9Использовать публичный резолвер необязательно: в организации или домашней сети может работать собственный сервер.
Авторитетный DNS-сервер
Авторитетный сервер хранит официальные данные конкретной DNS-зоны и отвечает за неё.
Например, авторитетные серверы зоны example.com могут хранить записи:
example.com. A 192.0.2.10
www.example.com. CNAME example.com.
example.com. MX 10 mail.example.com.Авторитетный сервер не обязан выполнять рекурсивный поиск для клиента. Его основная задача — отдавать данные зон, за которые он отвечает.
Кэш
DNS-ответы временно сохраняются:
- в приложении;
- в операционной системе;
- в браузере;
- на рекурсивном DNS-сервере;
- на промежуточной сетевой инфраструктуре.
Продолжительность хранения записи определяется её TTL.
Иерархия DNS
DNS организован как дерево. Имена читаются справа налево — от верхнего уровня к более конкретным частям.
Для имени:
api.shop.example.comиерархия выглядит так:
. → com → example → shop → apiКорневая зона
Верхняя точка DNS-дерева обозначается точкой:
.Полное доменное имя технически заканчивается точкой:
www.example.com.Такое имя называется FQDN — Fully Qualified Domain Name.
В пользовательских программах завершающую точку обычно опускают:
www.example.comКорневые DNS-серверы не обязаны знать IP-адрес каждого сайта. Они указывают, какие серверы обслуживают домены верхнего уровня.
Домены верхнего уровня
Следующий уровень — TLD (Top-Level Domain):
.com
.org
.net
.dev
.ioСуществуют также национальные доменные зоны.
Серверы TLD знают, какие авторитетные DNS-серверы отвечают за зарегистрированные домены внутри соответствующей зоны.
Домен второго уровня
В имени:
example.comexample — домен второго уровня внутри зоны .com.
Владелец домена может настраивать его DNS-зону и создавать поддомены.
Поддомены
Примеры поддоменов:
www.example.com
api.example.com
mail.example.com
shop.example.comПоддомен может быть обычным именем внутри текущей зоны или отдельной делегированной зоной.
Например, владелец example.com может делегировать:
dev.example.comдругим DNS-серверам.
Как выполняется DNS-разрешение
Предположим, клиенту нужен адрес:
www.example.comУпрощённая последовательность:
- Приложение проверяет собственный DNS-кэш.
- Операционная система проверяет системный кэш и локальные правила.
- Запрос отправляется рекурсивному DNS-серверу.
- Рекурсивный сервер проверяет свой кэш.
- Если ответа нет, он обращается к корневому серверу.
- Корневой сервер указывает серверы зоны
.com. - Сервер
.comуказывает авторитетные серверыexample.com. - Авторитетный сервер возвращает запись
www.example.com. - Рекурсивный сервер кэширует результат.
- Клиент получает ответ.
На практике часть цепочки часто уже находится в кэше, поэтому полный обход выполняется не для каждого запроса.
Рекурсивные и итеративные запросы
Рекурсивный запрос
При рекурсивном запросе клиент просит DNS-сервер вернуть окончательный ответ или сообщить об ошибке.
Условно:
Найди для меня IP-адрес www.example.com.Обычный клиент чаще всего отправляет рекурсивный запрос настроенному резолверу.
Итеративный запрос
При итеративном запросе сервер возвращает лучший известный ему результат, включая ссылку на следующий DNS-сервер.
Условно:
Я не знаю точного адреса, но спроси серверы зоны .com.Так рекурсивный резолвер перемещается по DNS-иерархии.
DNS-зона
DNS-зона — административно управляемая часть пространства доменных имён.
Зона обычно содержит:
- запись
SOA; - записи
NS; - адресные записи
AиAAAA; - псевдонимы
CNAME; - почтовые записи
MX; - текстовые записи
TXT; - другие служебные записи.
Зона и домен — связанные, но не полностью одинаковые понятия.
Домен описывает ветвь пространства имён, а зона — ту часть этой ветви, данные которой обслуживаются конкретной административной конфигурацией.
Если dev.example.com делегирован отдельным DNS-серверам, зона example.com больше не содержит авторитетные данные обо всех именах внутри dev.example.com.
Формат DNS-имени
DNS-имя состоит из меток, разделённых точками:
api.example.comЗдесь:
api— имя узла или поддомена;example— домен второго уровня;com— домен верхнего уровня.
DNS-имена регистронезависимы:
EXAMPLE.COM
example.com
Example.ComДля DNS это одно имя, хотя на практике имена обычно записываются строчными буквами.
Основные типы DNS-записей
Общая логическая структура ресурсной записи:
имя TTL класс тип значениеНапример:
www.example.com. 3600 IN A 192.0.2.10Где:
www.example.com.— имя;3600— TTL в секундах;IN— класс Internet;A— тип записи;192.0.2.10— значение.
В панели DNS-провайдера класс IN обычно не отображается, а TTL может задаваться отдельно.
Запись A
Запись A связывает имя с IPv4-адресом:
example.com. 3600 IN A 192.0.2.10
www.example.com. 3600 IN A 192.0.2.10Одно имя может иметь несколько записей A:
app.example.com. 300 IN A 192.0.2.10
app.example.com. 300 IN A 192.0.2.11
app.example.com. 300 IN A 192.0.2.12Резолвер может вернуть все адреса. Клиент выбирает, к какому из них подключиться.
Несколько адресов могут использоваться для:
- распределения нагрузки;
- отказоустойчивости;
- географического распределения серверов;
- постепенной миграции.
Запись AAAA
Запись AAAA связывает имя с IPv6-адресом:
example.com. 3600 IN AAAA 2001:db8::10
www.example.com. 3600 IN AAAA 2001:db8::10Название AAAA связано с тем, что IPv6-адрес имеет длину 128 бит, то есть в четыре раза больше IPv4-адреса длиной 32 бита.
Если имя содержит и A, и AAAA, клиент может использовать IPv4 или IPv6:
example.com. 3600 IN A 192.0.2.10
example.com. 3600 IN AAAA 2001:db8::10Наличие AAAA имеет смысл только тогда, когда сервис действительно доступен по IPv6.
Запись CNAME
CNAME (Canonical Name) создаёт псевдоним одного DNS-имени для другого:
www.example.com. 3600 IN CNAME example.com.Это означает:
www.example.com — псевдоним example.comКлиент сначала узнаёт каноническое имя, а затем запрашивает его адресные записи.
Другой пример:
docs.example.com. 3600 IN CNAME documentation.provider.example.Ограничения CNAME
Имя с записью CNAME обычно не должно одновременно иметь другие типы данных:
# Некорректная конфигурация
www.example.com. IN CNAME example.com.
www.example.com. IN A 192.0.2.20Для одного имени следует выбрать либо CNAME, либо обычные записи.
У корня зоны обычно нельзя использовать стандартный CNAME:
example.comКорень зоны уже должен содержать SOA и NS, а имя с CNAME не должно одновременно иметь другие записи.
Некоторые DNS-провайдеры предлагают специальные записи:
ALIAS
ANAME
CNAME flatteningОни похожи на CNAME по назначению, но обрабатываются провайдером особым образом и не являются полным эквивалентом стандартной записи CNAME.
Цепочки CNAME
Возможна цепочка:
a.example.com → b.example.com → c.example.net → IP-адресДлинные цепочки нежелательны, поскольку увеличивают число DNS-запросов и усложняют диагностику.
Циклы недопустимы:
a.example.com → b.example.com
b.example.com → a.example.comТакая конфигурация не позволяет получить конечный адрес.
Запись MX
MX (Mail Exchange) указывает почтовые серверы, принимающие электронную почту для домена:
example.com. 3600 IN MX 10 mail1.example.com.
example.com. 3600 IN MX 20 mail2.example.com.Число перед именем сервера — приоритет. Меньшее значение означает более высокий приоритет.
В примере первым используется:
mail1.example.comЕсли он недоступен, отправитель может попробовать:
mail2.example.comДля почтовых серверов нужны адресные записи:
mail1.example.com. 3600 IN A 192.0.2.25
mail1.example.com. 3600 IN AAAA 2001:db8::25
mail2.example.com. 3600 IN A 192.0.2.26Значением MX должно быть имя сервера, а не IP-адрес:
# Правильно
example.com. IN MX 10 mail.example.com.
# Неправильно
example.com. IN MX 10 192.0.2.25В полном имени сервера важна завершающая точка:
example.com. IN MX 10 mail.example.com.Без точки редактор zone-файла может дополнить имя текущей зоной:
mail.example.com.example.comПоведение зависит от интерфейса. В веб-панелях DNS-провайдеров завершающую точку нередко добавлять не требуется.
Запись TXT
Запись TXT хранит текстовые данные:
example.com. 3600 IN TXT "Произвольный текст"Частые варианты использования:
- подтверждение владения доменом;
- SPF;
- DKIM;
- DMARC;
- проверочные токены облачных сервисов;
- служебная конфигурация.
Пример подтверждения домена:
example.com. 300 IN TXT "service-verification=abc123"Пример SPF:
example.com. 3600 IN TXT "v=spf1 include:_spf.example.net -all"Пример DMARC:
_dmarc.example.com. 3600 IN TXT "v=DMARC1; p=quarantine"У одного имени может быть несколько записей TXT:
example.com. IN TXT "service-one=abc"
example.com. IN TXT "service-two=xyz"Несколько отдельных TXT-записей не следует воспринимать как одну объединённую строку.
Длинное значение внутри одной записи может быть разбито на несколько строковых фрагментов:
selector._domainkey.example.com. IN TXT (
"v=DKIM1; k=rsa; "
"p=MIIBIjANBgkqh..."
)DNS-сервер логически объединяет эти фрагменты в значение одной записи.
Запись NS
NS (Name Server) указывает авторитетные DNS-серверы зоны:
example.com. 86400 IN NS ns1.dns-provider.example.
example.com. 86400 IN NS ns2.dns-provider.example.Обычно используется минимум два авторитетных сервера для отказоустойчивости.
Записи NS применяются:
- на вершине зоны;
- при делегировании поддомена;
- в родительской зоне.
Например, поддомен можно делегировать отдельным серверам:
dev.example.com. 86400 IN NS ns1.dev-dns.example.
dev.example.com. 86400 IN NS ns2.dev-dns.example.После делегирования записи внутри dev.example.com должны обслуживаться указанными авторитетными серверами.
Glue records
Иногда адрес DNS-сервера нельзя получить, не обратившись к зоне, которую он сам обслуживает.
Например:
example.com. NS ns1.example.com.Чтобы обратиться к ns1.example.com, нужен его IP-адрес. Но этот адрес находится внутри зоны example.com, к которой ещё только нужно получить доступ.
Для решения используются glue records — адреса DNS-серверов, опубликованные в родительской зоне.
У регистратора могут быть зарегистрированы данные:
ns1.example.com → 192.0.2.53
ns2.example.com → 192.0.2.54Glue-записи настраиваются не только в обычной DNS-зоне, но и через интерфейс регистратора или реестра домена.
Запись SOA
Хотя SOA не входит в основной список адресных записей, она обязательна для авторитетной DNS-зоны.
SOA (Start of Authority) содержит основные служебные параметры зоны:
example.com. 3600 IN SOA ns1.example.com. hostmaster.example.com. (
2026091601 ; serial
3600 ; refresh
900 ; retry
1209600 ; expire
300 ; negative cache TTL
)Здесь:
ns1.example.com.— основной авторитетный сервер;hostmaster.example.com.— административный адрес электронной почты;2026091601— серийный номер версии зоны;refresh— как часто вторичный сервер проверяет обновления;retry— когда повторить неудачную проверку;expire— когда вторичный сервер перестанет считать данные действительными;- последнее значение — параметр отрицательного кэширования.
В поле электронной почты первая точка заменяет символ @:
hostmaster.example.com.означает:
hostmaster@example.comСерийный номер зоны
При изменении zone-файла серийный номер нужно увеличить.
Распространённый формат:
YYYYMMDDNNНапример:
2026091601где 01 — номер изменения за день.
Если serial не увеличить, вторичные DNS-серверы могут не обнаружить обновление.
TTL записей
TTL (Time to Live) — время, в течение которого DNS-ответ разрешается хранить в кэше.
TTL указывается в секундах:
www.example.com. 3600 IN A 192.0.2.10Значение 3600 означает один час.
Распространённые значения:
| TTL | Продолжительность |
|---|---|
60 |
1 минута |
300 |
5 минут |
900 |
15 минут |
1800 |
30 минут |
3600 |
1 час |
14400 |
4 часа |
86400 |
24 часа |
Как работает TTL
Пусть запись имеет TTL 3600.
После получения ответа рекурсивный сервер может хранить его до одного часа. При повторном запросе он вернёт кэшированное значение, не обращаясь к авторитетному серверу.
Оставшийся TTL постепенно уменьшается:
3600 → 3599 → 3598 → ... → 0После истечения TTL резолвер должен снова получить актуальные данные.
Высокий TTL
Преимущества:
- меньше запросов к авторитетным серверам;
- ниже задержка при кэш-попаданиях;
- меньше нагрузка на DNS-инфраструктуру;
- выше устойчивость к кратковременной недоступности авторитетного сервера.
Недостаток — изменения распространяются медленнее.
Низкий TTL
Преимущества:
- можно быстрее менять IP-адреса;
- удобно при миграциях;
- подходит для динамического управления трафиком.
Недостатки:
- больше DNS-запросов;
- выше нагрузка;
- меньше эффективность кэширования;
- изменение всё равно не гарантированно становится мгновенно видимым каждому клиенту.
Изменение TTL перед миграцией
Если планируется замена IP-адреса, TTL желательно уменьшить заранее.
Пример:
- Текущая запись имеет TTL
86400. - Не менее чем за сутки TTL уменьшается до
300. - Нужно дождаться истечения старого TTL.
- После этого изменяется IP-адрес.
- Через некоторое время после проверки TTL возвращается к обычному значению.
Если уменьшить TTL непосредственно перед заменой IP, старые ответы уже могут находиться в кэшах с прежним большим TTL.
Отрицательное кэширование
DNS может кэшировать не только существующие записи, но и отрицательные ответы, например:
NXDOMAINNXDOMAIN означает, что запрошенного доменного имени не существует.
Поэтому недавно созданная запись иногда не появляется сразу: резолвер мог ранее закэшировать отрицательный ответ.
Продолжительность отрицательного кэширования связана с параметрами SOA и поведением резолвера.
TTL не равен гарантированному времени обновления
TTL определяет допустимое время хранения ответа, но фактическое поведение зависит от:
- рекурсивного резолвера;
- локального кэша ОС;
- кэша приложения;
- браузера;
- прокси;
- корректности делегирования;
- отрицательного кэша;
- времени обновления DNS-провайдера.
Поэтому выражение «распространение DNS» обычно означает постепенное исчезновение старых данных из разных кэшей, а не передачу записи одновременно всем DNS-серверам мира.
Настройка доменной зоны
Конкретный интерфейс зависит от регистратора и DNS-провайдера, но общий порядок похож.
Шаг 1. Зарегистрировать домен
Регистратор управляет регистрацией доменного имени и настройкой делегирования.
Регистратор домена и DNS-провайдер могут быть одной компанией, но это разные функции:
- регистратор управляет регистрацией домена;
- DNS-провайдер обслуживает авторитетную зону.
Шаг 2. Создать DNS-зону
У DNS-провайдера создаётся зона:
example.comПровайдер сообщает авторитетные серверы, например:
ns1.dns-provider.example
ns2.dns-provider.exampleШаг 3. Настроить делегирование
В панели регистратора указываются авторитетные DNS-серверы:
ns1.dns-provider.example
ns2.dns-provider.exampleВажно отличать:
NS-серверы доменаот:
обычных NS-записей, добавленных в интерфейс зоныДля полноценного делегирования серверы должны быть указаны на уровне родительской зоны через регистратора.
Шаг 4. Добавить записи
Минимальный пример:
@ 3600 IN A 192.0.2.10
www 3600 IN CNAME example.com.
mail 3600 IN A 192.0.2.25
@ 3600 IN MX 10 mail.example.com.
@ 3600 IN TXT "service-verification=abc123"В панелях DNS символ @ обычно означает корень зоны:
example.comИмя www относительно зоны означает:
www.example.comШаг 5. Проверить авторитетные серверы
Проверка NS:
dig example.com NSПроверка через трассировку делегирования:
dig +trace example.comШаг 6. Проверить записи
dig example.com A
dig example.com AAAA
dig www.example.com CNAME
dig example.com MX
dig example.com TXTШаг 7. Проверить конкретный авторитетный сервер
dig @ns1.dns-provider.example example.com AТакой запрос помогает отделить данные авторитетного сервера от кэшированного ответа рекурсивного резолвера.
Пример zone-файла
Упрощённый zone-файл для BIND-подобного DNS-сервера:
$ORIGIN example.com.
$TTL 3600
@ IN SOA ns1.example.com. hostmaster.example.com. (
2026091601 ; serial
3600 ; refresh
900 ; retry
1209600 ; expire
300 ; negative cache TTL
)
@ IN NS ns1.example.com.
@ IN NS ns2.example.com.
ns1 IN A 192.0.2.53
ns2 IN A 192.0.2.54
@ IN A 192.0.2.10
@ IN AAAA 2001:db8::10
www IN CNAME example.com.
mail IN A 192.0.2.25
@ IN MX 10 mail.example.com.
@ IN TXT "service-verification=abc123"$ORIGIN
Директива:
$ORIGIN example.com.задаёт базовое имя для относительных записей.
Запись:
www IN A 192.0.2.10означает:
www.example.com. IN A 192.0.2.10$TTL
Директива:
$TTL 3600задаёт TTL по умолчанию для записей, у которых он не указан отдельно.
Символ @
Символ:
@означает текущее значение $ORIGIN, то есть корень зоны:
example.com.Завершающая точка
Абсолютное имя заканчивается точкой:
mail.example.com.Относительное имя без точки дополняется текущим $ORIGIN.
Например, внутри зоны example.com:
mail.example.comможет быть интерпретировано как:
mail.example.com.example.com.Поэтому в zone-файлах полные имена обычно завершают точкой.
Работа с dig
dig — консольная утилита для выполнения DNS-запросов и диагностики.
Обычно она доступна в составе:
dnsutilsв Debian/Ubuntu;bind-utilsв системах семейства RHEL;- BIND tools в других системах.
Базовый запрос
dig example.comПо умолчанию обычно запрашивается запись A.
Сокращённый результат:
;; QUESTION SECTION:
;example.com. IN A
;; ANSWER SECTION:
example.com. 3600 IN A 192.0.2.10Запрос конкретного типа
dig example.com A
dig example.com AAAA
dig example.com MX
dig example.com TXT
dig example.com NS
dig example.com SOA
dig www.example.com CNAMEКороткий вывод
dig +short example.com AПример:
192.0.2.10Для MX:
dig +short example.com MXРезультат:
10 mail.example.com.
20 mail2.example.com.Запрос через конкретный DNS-сервер
dig @1.1.1.1 example.com AДругой пример:
dig @8.8.8.8 example.com AПроверка авторитетного сервера:
dig @ns1.example.com example.com SOAТрассировка DNS-иерархии
dig +trace example.comКоманда показывает путь:
корневые серверы → серверы TLD → авторитетные серверы доменаОна полезна при диагностике:
- неправильного делегирования;
- отсутствующих
NS; - проблем с glue-записями;
- несогласованности между родительской и дочерней зонами.
Запрос без рекурсии
dig +norecurse @ns1.example.com example.com AАвторитетному серверу обычно отправляют нерекурсивный запрос, чтобы проверить данные, за которые он отвечает непосредственно.
Просмотр всех доступных записей
dig example.com ANYЗапрос ANY не гарантирует получение всех записей. DNS-сервер может вернуть ограниченный ответ или отказаться раскрывать полный набор данных.
Для диагностики надёжнее запрашивать типы отдельно:
dig example.com A
dig example.com AAAA
dig example.com MX
dig example.com TXT
dig example.com NS
dig example.com SOAОбратный DNS-запрос
dig -x 192.0.2.10Обратный запрос ищет запись PTR, связывающую IP-адрес с именем.
Для IPv4 используются зоны внутри:
in-addr.arpaДля IPv6:
ip6.arpaОбратная DNS-зона обычно управляется владельцем диапазона IP-адресов, например хостинг-провайдером.
Основные части ответа dig
Типичный ответ содержит несколько секций.
Заголовок
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12345Поле status показывает результат запроса.
Частые статусы:
| Статус | Значение |
|---|---|
NOERROR |
Запрос обработан без DNS-ошибки |
NXDOMAIN |
Имя не существует |
SERVFAIL |
Сервер не смог получить корректный ответ |
REFUSED |
Сервер отказался выполнять запрос |
FORMERR |
Ошибка формата запроса |
NOERROR не обязательно означает, что нужная запись найдена. Имя может существовать, но не иметь запрошенного типа записи.
Флаги
Пример:
flags: qr rd raЧастые флаги:
| Флаг | Значение |
|---|---|
qr |
Это ответ, а не запрос |
aa |
Авторитетный ответ |
rd |
Клиент запросил рекурсию |
ra |
Сервер поддерживает рекурсию |
tc |
Ответ усечён |
ad |
Данные прошли DNSSEC-проверку у резолвера |
cd |
Клиент отключил DNSSEC-проверку |
QUESTION SECTION
Показывает, что именно было запрошено:
;example.com. IN AANSWER SECTION
Содержит непосредственный ответ:
example.com. 3600 IN A 192.0.2.10AUTHORITY SECTION
Может содержать сведения об авторитетных серверах или SOA зоны.
ADDITIONAL SECTION
Может содержать дополнительные данные, например IP-адреса серверов, указанных в NS или MX.
Строка SERVER
Показывает DNS-сервер, который обработал запрос:
;; SERVER: 192.168.1.1#53Время запроса
;; Query time: 18 msecЭто время получения DNS-ответа, а не время установления HTTP-соединения с сайтом.
Работа с nslookup
nslookup — утилита для простых DNS-запросов. Она доступна во многих операционных системах, включая Windows.
Базовый запрос
nslookup example.comПримерный результат:
Server: resolver.local
Address: 192.168.1.1
Name: example.com
Address: 192.0.2.10Запрос конкретного типа
nslookup -type=A example.com
nslookup -type=AAAA example.com
nslookup -type=MX example.com
nslookup -type=TXT example.com
nslookup -type=NS example.com
nslookup -type=SOA example.comВ Windows часто используется тот же синтаксис:
nslookup -type=mx example.comЗапрос через конкретный DNS-сервер
nslookup example.com 1.1.1.1Запрос MX через указанный сервер:
nslookup -type=MX example.com 8.8.8.8Интерактивный режим
Запуск:
nslookupДалее можно вводить команды:
server 1.1.1.1
set type=MX
example.comЗавершение:
exitdig или nslookup
nslookup удобен для быстрых проверок, особенно в Windows.
dig обычно удобнее для подробной диагностики, поскольку показывает:
- флаги ответа;
- TTL;
- секции DNS-сообщения;
- авторитетность ответа;
- используемый сервер;
- трассировку делегирования.
Практические команды
Узнать IPv4-адрес
dig +short example.com Aили:
nslookup -type=A example.comУзнать IPv6-адрес
dig +short example.com AAAAНайти почтовые серверы
dig +short example.com MXНайти авторитетные серверы
dig +short example.com NSПосмотреть SOA
dig example.com SOAПроверить TXT-записи
dig example.com TXTПроверить отдельный поддомен
dig api.example.com AПроверить CNAME-цепочку
dig www.example.com CNAME
dig www.example.com AДля краткого вывода:
dig +short www.example.comСравнить ответы разных резолверов
dig @1.1.1.1 example.com A
dig @8.8.8.8 example.com AЕсли ответы различаются, возможны:
- неистёкшие кэши;
- географический DNS;
- балансировка;
- разные представления зоны;
- неполное обновление авторитетных серверов.
Спросить каждый авторитетный сервер напрямую
Сначала получить список:
dig +short example.com NSЗатем проверить каждый сервер:
dig @ns1.dns-provider.example example.com A
dig @ns2.dns-provider.example example.com AАвторитетные серверы одной зоны обычно должны возвращать согласованные данные.
DNS и CDN
CDN (Content Delivery Network) — распределённая сеть узлов, которая доставляет контент с серверов, расположенных ближе к пользователям или лучше подходящих для текущих условий.
DNS часто используется как первая точка управления CDN-маршрутизацией.
Подключение CDN через CNAME
Поддомен сайта может ссылаться на имя CDN:
static.example.com. 300 IN CNAME example.cdn-provider.net.Клиент запрашивает:
static.example.comDNS приводит его к имени CDN, после чего инфраструктура CDN возвращает подходящий IP-адрес.
Корневой домен и CDN
Для поддомена можно использовать обычный CNAME:
www.example.comДля корня зоны:
example.comстандартный CNAME обычно неприменим.
Поэтому провайдеры используют:
- записи
AиAAAA; ALIAS;ANAME;- CNAME flattening;
- собственные авторитетные DNS-серверы.
Конкретный механизм зависит от DNS- и CDN-провайдера.
Географическое распределение
CDN может возвращать разные адреса в зависимости от:
- приблизительного местоположения клиента;
- местоположения рекурсивного резолвера;
- доступности узлов;
- текущей нагрузки;
- сетевой задержки;
- состояния маршрутов;
- настроенной политики балансировки.
Поэтому два клиента могут получить разные DNS-ответы для одного имени.
DNS-балансировка
Одному имени может соответствовать несколько IP-адресов:
cdn.example.com. 60 IN A 192.0.2.10
cdn.example.com. 60 IN A 192.0.2.11
cdn.example.com. 60 IN A 192.0.2.12Простая выдача нескольких адресов не гарантирует равномерного распределения нагрузки. Клиенты и резолверы могут выбирать и кэшировать адреса по-разному.
Промышленные CDN обычно применяют более сложные механизмы:
- географический DNS;
- проверки доступности;
- управление весами;
- Anycast;
- динамический выбор точки присутствия.
Anycast
При Anycast один IP-адрес объявляется из нескольких географически распределённых точек.
DNS может вернуть один и тот же адрес разным клиентам, но сетевые маршруты доставят трафик к различным узлам.
DNS и Anycast могут использоваться совместно:
- DNS выбирает сервис или группу адресов;
- маршрутизация Anycast направляет трафик к подходящей точке.
TTL в CDN
CDN часто использует сравнительно небольшой TTL:
60–300 секундЭто позволяет быстрее менять направление трафика при:
- отказе узла;
- изменении нагрузки;
- техническом обслуживании;
- переключении между регионами.
Слишком низкий TTL увеличивает число DNS-запросов, поэтому его выбирают как компромисс между скоростью переключения и эффективностью кэширования.
DNS не передаёт HTTP-контент
DNS только помогает определить адрес сервиса. После разрешения имени клиент отдельно устанавливает соединение и выполняет HTTP- или HTTPS-запрос.
Упрощённо:
DNS: static.example.com → 192.0.2.50
TCP/QUIC: соединение с 192.0.2.50
TLS: проверка сертификата static.example.com
HTTP: запрос нужного ресурсаПри использовании HTTPS сертификат CDN должен быть действителен для исходного имени:
static.example.comДаже если оно настроено через CNAME на домен CDN-провайдера.
Частые ошибки конфигурации
Запись добавлена не в ту зону
Например, запись создана в старой панели DNS, а домен уже делегирован другим авторитетным серверам.
Проверка:
dig example.com NSИзменять записи нужно у провайдера, чьи серверы указаны в действующем делегировании.
Изменены NS-записи только внутри зоны
Добавление новых NS в zone-файл не всегда изменяет делегирование в родительской зоне.
Для смены DNS-провайдера авторитетные серверы обычно нужно изменить у регистратора.
Пропущена завершающая точка
В zone-файле:
@ IN MX 10 mail.example.comможет превратиться в:
mail.example.com.example.com.Правильный абсолютный вариант:
@ IN MX 10 mail.example.com.CNAME совмещён с другими записями
Некорректно:
app.example.com. IN CNAME target.example.net.
app.example.com. IN TXT "verification=123"Имя с CNAME не должно одновременно содержать обычные ресурсные записи других типов.
CNAME создан в корне зоны
Конфигурация вида:
example.com. IN CNAME target.example.net.конфликтует с обязательными SOA и NS.
Следует использовать поддерживаемый провайдером механизм ALIAS/ANAME/flattening либо адресные записи.
MX указывает на IP-адрес
Некорректно:
example.com. IN MX 10 192.0.2.25Правильно:
example.com. IN MX 10 mail.example.com.
mail.example.com. IN A 192.0.2.25Не увеличен serial
При ручном управлении зоной вторичные серверы могут не загрузить изменения, если номер SOA serial остался прежним.
Слишком высокий TTL перед миграцией
Если старый ответ закэширован на сутки, изменение IP не станет быстро доступно всем пользователям.
TTL следует уменьшать заранее.
Авторитетные серверы возвращают разные данные
Проверка:
dig @ns1.example.net example.com A
dig @ns2.example.net example.com AПричинами могут быть:
- не выполнена передача зоны;
- не обновлён serial;
- серверы используют разные конфигурации;
- один из серверов обслуживает устаревшую зону.
Есть AAAA, но IPv6 не работает
Клиенты могут пытаться подключаться по IPv6 и получать ошибки.
Если сервис не обслуживает IPv6, не следует публиковать неработающую запись AAAA.
Алгоритм диагностики DNS
Если имя не разрешается или возвращает неправильный адрес, полезно проверять систему по уровням.
1. Проверить обычный запрос
dig example.com AОбратить внимание на:
- статус;
- ответ;
- TTL;
- используемый DNS-сервер.
2. Проверить другие резолверы
dig @1.1.1.1 example.com A
dig @8.8.8.8 example.com AЕсли ответы различаются, вероятна проблема кэша или распределённой конфигурации.
3. Проверить делегирование
dig example.com NS
dig +trace example.com4. Проверить авторитетные серверы напрямую
dig @ns1.dns-provider.example example.com A
dig @ns2.dns-provider.example example.com A5. Проверить SOA serial
dig @ns1.dns-provider.example example.com SOA
dig @ns2.dns-provider.example example.com SOAРазные serial могут указывать на рассинхронизацию.
6. Проверить нужный тип записи
dig example.com A
dig example.com AAAA
dig example.com MX
dig example.com TXTУспешный ответ для A не гарантирует правильность MX или TXT.
7. Проверить CNAME-цепочку
dig www.example.com CNAME
dig www.example.com AСледует убедиться, что цепочка завершается существующей записью A или AAAA.
8. Учитывать кэш и TTL
Если авторитетный сервер уже возвращает новое значение, а публичный резолвер — старое, нужно проверить оставшийся TTL старого ответа.
9. Отделить DNS от доступности сервиса
Успешный DNS-ответ не гарантирует работу приложения.
После получения адреса можно отдельно проверить соединение:
curl -v https://example.com/DNS отвечает на вопрос:
Куда подключаться?Но не гарантирует:
- доступность порта;
- корректность TLS-сертификата;
- работу HTTP-сервера;
- правильную маршрутизацию;
- отсутствие блокировки firewall.
Краткая памятка
| Задача | Запись или команда |
|---|---|
| Связать имя с IPv4 | A |
| Связать имя с IPv6 | AAAA |
| Создать псевдоним | CNAME |
| Указать почтовые серверы | MX |
| Опубликовать текстовые данные | TXT |
| Указать авторитетные серверы | NS |
| Описать параметры зоны | SOA |
| Проверить IPv4 | dig example.com A |
| Проверить IPv6 | dig example.com AAAA |
| Проверить почтовые серверы | dig example.com MX |
| Проверить TXT | dig example.com TXT |
| Проверить делегирование | dig example.com NS |
| Проследить DNS-цепочку | dig +trace example.com |
| Спросить конкретный сервер | dig @1.1.1.1 example.com A |
| Получить краткий ответ | dig +short example.com |
| Выполнить обратный запрос | dig -x 192.0.2.10 |
DNS — распределённая и кэшируемая система. Для корректной диагностики важно отдельно проверять делегирование, авторитетные данные, ответы рекурсивных серверов и оставшийся TTL.