За 30 секунд
Домен — это имя, которое вы арендуете у регистратора. DNS — глобальная телефонная книга, которая превращает это имя в IP-адреса и другую информацию, например куда доставлять почту. Своими записями вы управляете у DNS-хостинга. Понимание записей и TTL делает запуски, миграции и настройку почты спокойными, а не страшными.
Почему я это использую
- Я регулярно подключаю домены к серверам и сервисам, и почти каждый запуск начинается с DNS-записей.
- При миграции серверов DNS для меня — рубильник: скопировать, проверить, затем поменять запись, сохранив старый сервер, пока всё не подтвердится.
- Доставляемость почты зависит от DNS (SPF, DKIM, DMARC), и клиенты сразу замечают, когда там что-то не так.
- Понимание TTL позволяет планировать изменения так, чтобы пользователи переехали на новый сервер за минуты, а не за дни.
Как это работает
01Три разные роли: регистратор, nameserver'ы, DNS-хостинг
Их часто путают, потому что все три может делать одна компания. Регистратор — это место, где вы покупаете и продлеваете домен (например, Namecheap, Porkbun или Cloudflare Registrar); он взаимодействует с реестром, который управляет TLD, например .com. В панели регистратора вы указываете, какие nameserver'ы авторитативны для вашего домена. Nameserver'ы принадлежат DNS-хостингу, а DNS-хостинг — это место, где живут сами записи: A, CNAME, MX и так далее. То есть можно купить домен у одного регистратора, направить его nameserver'ы на Cloudflare и управлять всеми записями в Cloudflare. Если вы редактируете записи у регистратора, а nameserver'ы указывают на другого провайдера, ничего не произойдёт, — это очень частая причина путаницы. Аналогия: регистратор — это земельный кадастр, nameserver'ы — табличка, какая контора хранит адресную книгу, а DNS-хостинг — сама эта контора.
- Регистратор: владение, продление, настройка nameserver'ов, контакты WHOIS/RDAP, блокировка трансфера.
- Nameserver'ы: какой DNS-провайдер авторитативно отвечает за домен.
- DNS-хостинг: сами записи.
02Как работает DNS-запрос
Ваше устройство спрашивает рекурсивный резолвер (провайдера, 1.1.1.1, 8.8.8.8). Если ответа нет в кэше, резолвер спрашивает корневой сервер, где находится .com, затем спрашивает серверы .com, какие nameserver'ы обслуживают example.com, а затем запрашивает запись у этих авторитативных nameserver'ов. Каждый ответ кэшируется на его TTL (time to live) в секундах. В следующий раз любой пользователь этого резолвера мгновенно получит ответ из кэша. Именно благодаря кэшированию DNS масштабируется на весь интернет — и именно поэтому изменения видны не везде одновременно.
# Ask a specific resolver, then follow the whole chain
dig example.com A @1.1.1.1
dig +trace example.com
# Which nameservers are authoritative?
dig example.com NS +short
# Ask the authoritative server directly (skips caches)
dig example.com A @ns1.example-dns.net +short
03Типы записей, которые вам реально понадобятся
A сопоставляет имя с IPv4-адресом, AAAA — с IPv6. CNAME делает одно имя псевдонимом другого; его нельзя ставить на корневой домен (apex) рядом с другими записями, поэтому провайдеры предлагают для apex ALIAS, ANAME или CNAME flattening. MX сообщает миру, какие серверы принимают почту, с приоритетом (меньший пробуется первым). TXT хранит текст и используется для подтверждения домена и безопасности почты: SPF перечисляет, кто может отправлять почту от вашего имени, DKIM публикует ключ подписи, DMARC говорит получателям, что делать с письмами, не прошедшими проверку. NS делегирует зону, CAA ограничивает, какие центры сертификации могут выпускать сертификаты для вашего домена, а SRV описывает сервисы с портом. У каждой записи есть имя, тип, значение и TTL.
example.com. 300 IN A 203.0.113.10
example.com. 300 IN AAAA 2001:db8::10
www.example.com. 300 IN CNAME example.com.
example.com. 3600 IN MX 10 mail.example-mail.com.
example.com. 3600 IN TXT "v=spf1 include:_spf.example-mail.com -all"
_dmarc.example.com. 3600 IN TXT "v=DMARC1; p=quarantine; rua=mailto:[email protected]"
example.com. 3600 IN CAA 0 issue "letsencrypt.org"
04TTL и «распространение»
На самом деле DNS не «распространяется» — истекают кэши. Если у записи TTL 86400 (одни сутки), резолвер, закэшировавший старое значение, может использовать его ещё до суток после изменения. Смена nameserver'ов идёт ещё медленнее, потому что у делегирования на уровне TLD TTL часто составляет сутки-двое. Практический рецепт для миграции: понизить TTL до 300 секунд как минимум за один период старого TTL до переключения, внести изменение, проверить с нескольких резолверов и снова поднять TTL, когда всё стабилизируется. Некоторые резолверы кэшируют и отрицательные ответы («такого имени нет») согласно SOA-записи, поэтому создавайте записи до того, как объявляете о них.
- 300 с для записей, которые скоро могут поменяться; 3600 с и больше — для стабильных.
- Проверяйте с нескольких резолверов, а не только со своего ноутбука.
- Кэши браузера и ОС могут хранить старые ответы; сбросьте их или проверяйте через dig.
05Проверка записей через dig и nslookup
dig — стандартный инструмент в Linux и macOS; nslookup работает везде, включая Windows. Всегда проверяйте и авторитативный ответ, и публичный резолвер, чтобы понять, проблема в вашей записи или в кэше. Для почты проверяйте MX и TXT-записи SPF, DKIM (на поддомене селектора) и DMARC. Для сертификатов — CAA. Онлайн-сервисы, которые делают запросы из разных стран, помогают убедиться, что изменение дошло до большинства резолверов. Флаг +short выводит только ответ, что удобно в скриптах и ранбуках.
dig +short example.com A
dig +short www.example.com CNAME
dig +short example.com MX
dig +short example.com TXT
dig +short selector1._domainkey.example.com TXT
nslookup -type=MX example.com 8.8.8.8
# Windows / PowerShell
Resolve-DnsName example.com -Type A -Server 1.1.1.1
06Советы для продакшена
Относитесь к самому домену как к критической инфраструктуре. Включите автопродление и блокировку у регистратора, используйте аккаунт с двухфакторной аутентификацией и указывайте контактный email на ящике, который у вас останется и через пять лет. Включите DNSSEC, если его поддерживают регистратор и DNS-хостинг, чтобы ответы нельзя было подделать. Храните экспортированную копию файла зоны. Перед сменой nameserver'ов сначала воссоздайте все записи у нового хостинга, особенно MX и TXT, иначе почта молча сломается. Удаляйте «висячие» записи, указывающие на сервисы, которыми вы больше не пользуетесь, — их могут перехватить другие.
Когда применять
- Запуск сайта или его переезд на новый сервер.
- Настройка корпоративной почты так, чтобы письма попадали во «Входящие», а не в спам.
- Подтверждение домена для Google, Apple, платёжных провайдеров или выпуска сертификата.
- Подключение CDN или прокси вроде Cloudflare перед сайтом.
Когда не стоит
- Не используйте DNS round-robin как настоящий балансировщик нагрузки: у него нет health check'ов, а кэши игнорируют сбои.
- Не рассчитывайте на очень низкий TTL для мгновенного failover: некоторые клиенты кэшируют дольше, чем вы просите.
Альтернативы
- Cloudflare DNS
Бесплатный быстрый авторитативный DNS с проксированием, CNAME flattening и DNSSEC.
- AWS Route 53
Платный DNS с health check'ами, маршрутизацией по задержке и геолокации; хорош внутри AWS.
- DNS регистратора
Подходит для простых сайтов, но обычно медленнее и с меньшим набором функций.
Лучшие практики
- Понижайте TTL до 300 с за сутки до запланированных изменений и потом поднимайте обратно.
- Копируйте все записи на новый DNS-хостинг до переключения nameserver'ов.
- Публикуйте SPF, DKIM и DMARC для каждого домена, который отправляет почту, а для доменов, которые никогда её не отправляют, — SPF «-all» и DMARC reject.
- Используйте CAA-записи, чтобы ограничить центры сертификации, которые могут выпускать сертификаты для вас.
- Включите блокировку у регистратора, автопродление, 2FA и DNSSEC.
- Удаляйте записи, указывающие на ресурсы, которые вы больше не контролируете.
Частые ошибки
- Редактировать записи у регистратора, когда nameserver'ы указывают на другого провайдера.
- Ставить CNAME на apex-домен рядом с MX-записями и ломать почту.
- Переключать nameserver'ы, не скопировав сначала MX- и TXT-записи.
- Забыть запись для www, из-за чего www.example.com не резолвится.
- Упустить продление домена, потому что письмо о нём ушло бывшему сотруднику.
Глубже
07Делегирование, glue-записи и SOA
Зона — это часть дерева DNS, за которую отвечает один набор nameserver. Зона .com не хранит вашу A-запись; она хранит NS-записи, которые делегируют example.com вашим nameserver. Если ваши nameserver находятся внутри того же домена (ns1.example.com), возникает проблема курицы и яйца, поэтому родительская зона хранит также их IP-адреса в виде glue-записей, которые задаются у регистратора. Каждая зона начинается с SOA-записи: основной nameserver, контакт, серийный номер, по которому secondary понимают, когда забирать обновления, и TTL негативного кэширования. Последнее значение определяет, как долго резолверы помнят, что имени не существует. Lame delegation случается, когда родитель указывает на nameserver, которые на самом деле не отвечают за зону, и из-за этого у части резолверов запросы медленные или падают.
# Delegation as seen by the .com servers
dig example.com NS @a.gtld-servers.net +norecurse
# SOA: primary NS, serial, refresh, retry, expire, negative TTL
dig example.com SOA +short
# A name that does not exist returns NXDOMAIN plus the SOA
dig nothing-here.example.com A
08DNSSEC: подпись ответов
Классический DNS не может доказать, что ответ подлинный, поэтому атака cache poisoning могла бы отправить пользователей на поддельный IP. DNSSEC добавляет подписи. Ваш DNS-хостинг подписывает каждый набор записей (записи RRSIG) ключом зоны, опубликованным как запись DNSKEY. Родительская зона хранит запись DS — хэш вашего ключа, который вы добавляете у регистратора. Валидирующие резолверы проходят цепочку: от ключа корня к .com, к вашему DS, к вашему DNSKEY, к подписи ответа. Если что-то не совпадает, резолвер вместо поддельного ответа возвращает SERVFAIL. Эксплуатационный риск в том, что несовпадение ломает и легитимный домен: переезд на другой DNS-хостинг без предварительного удаления или обновления DS-записи выключает домен для всех валидирующих резолверов. Ротацию ключей берут на себя managed-провайдеры; ваша задача — запись DS.
dig example.com DNSKEY +dnssec +short
dig example.com DS +short # what the parent publishes
dig example.com A +dnssec # look for the "ad" flag from a validating resolver
# Online: dnsviz.net shows the full chain of trust
09Современные записи: HTTPS/SVCB, детали CAA и serve-stale
Запись HTTPS (RFC 9460, разновидность SVCB) позволяет домену ещё до подключения сообщить браузеру, какие протоколы он поддерживает (например, h3 и h2), альтернативные порты, IP-подсказки и ключи для Encrypted Client Hello. Её также можно поставить на apex и указать на другой hostname, что частично решает старую проблему CNAME на apex для поддерживающих браузеров. Cloudflare и другие провайдеры публикуют её автоматически для проксируемых hostname. Записи CAA могут также содержать iodef (куда CA сообщают об отклонённых запросах) и issuewild (какой CA может выпускать wildcard). На стороне резолверов многие реализации следуют serve-stale (RFC 8767): если ваши авторитетные серверы недоступны, они могут ещё какое-то время отдавать просроченные ответы. Это повышает доступность во время сбоев, но означает, что очень короткий TTL никогда не гарантирует быстрый failover.
dig example.com HTTPS +short
# 1 . alpn="h3,h2" ipv4hint=203.0.113.10
dig example.com CAA +short
# 0 issue "letsencrypt.org"
# 0 issuewild ";" <- nobody may issue wildcards
# 0 iodef "mailto:[email protected]"
10Безопасность: takeover, гигиена зоны и anycast
Subdomain takeover случается, когда запись, обычно CNAME, указывает на удалённый вами сторонний ресурс — бакет в облачном хранилище, PaaS-приложение или сервис лендингов. Кто-то другой занимает это имя ресурса и теперь отдаёт контент на вашем поддомене, причём ваши cookie попадают в его область видимости. Предотвращайте это: удаляйте DNS-записи до удаления ресурса или вместе с ним и регулярно проводите аудит зоны. Другие правила гигиены: никогда не разрешайте открытый трансфер зоны (AXFR) кому попало, избегайте wildcard-записей, если они не нужны специально, и не держите внутренние hostname в публичном DNS — они раскрывают карту вашей сети. Для устойчивости хорошие DNS-провайдеры используют anycast: один и тот же IP nameserver анонсируется из многих точек, поэтому запросы идут к ближайшей живой площадке, а крупные флуды распределяются.
Реальные ситуации
После переезда DNS к новому провайдеру перестала работать почта
Проблема
В пятницу nameserver переключили на новый DNS-хостинг. Сайт работает, но с тех пор исходящие письма попадают в спам, а часть входящих возвращается.
Как решить
Сравните экспорт старой зоны с новой запись за записью. Проверьте MX через dig, затем SPF на apex, TXT-записи DKIM-селекторов (например, selector1._domainkey) и _dmarc. Обычная дыра — пропущенный DKIM-селектор или SPF, разбитый на две TXT-записи, что недопустимо. Воссоздайте недостающее точно, с теми же значениями. Если старые nameserver ещё отвечают, запросите их напрямую, чтобы восстановить потерянные записи. Отправьте тестовое письмо в ящик и прочитайте заголовок authentication results, чтобы убедиться в spf=pass, dkim=pass и dmarc=pass.
Домен пропал после смены DNS-хостинга
Проблема
После переключения nameserver на нового провайдера одни пользователи видят сайт, а другие получают ошибку «server can't be found». dig к 1.1.1.1 возвращает SERVFAIL.
Как решить
Такая картина типична для несовпадения DNSSEC: регистратор всё ещё публикует DS-запись для ключей старого провайдера, и валидирующие резолверы отклоняют новые ответы. Проверьте через dig example.com DS и dnsviz.net. Быстрее всего удалить старую DS-запись у регистратора; резолверы восстановятся, когда истечёт TTL записи DS. Затем включите DNSSEC у нового провайдера и добавьте его DS-запись. В следующий раз соблюдайте порядок: удалить DS, переждать его TTL, переключить nameserver, затем снова включить DNSSEC.
Забытый поддомен начинает раздавать спам
Проблема
Служба безопасности сообщает, что promo.example.com показывает страницу казино. Маркетинговая кампания, для которой он создавался, закончилась год назад, а аккаунт хостинга закрыли.
Как решить
Это subdomain takeover через «висячий» CNAME. Немедленно удалите запись, затем проверьте, мог ли атакующий ставить cookie на родительский домен, и если да — сбросьте сессии. Проведите аудит всей зоны: составьте список всех CNAME- и A-записей и убедитесь, что каждая цель всё ещё принадлежит вам. Добавьте в чек-лист отключения любого сервиса правило: сначала убрать DNS, потом удалить ресурс. Рассмотрите инструменты, которые следят за логами Certificate Transparency на предмет неожиданных сертификатов для ваших доменов.
Шпаргалка
- Авторитетные nameserver
dig example.com NS +short- Ответ напрямую от авторитетного сервера
dig example.com A @ns1.example-dns.net +norecurse- Оставшийся TTL в кэше резолвера
dig example.com A @8.8.8.8 | grep -A1 "ANSWER SECTION"- Полный путь разрешения имени
dig +trace example.com- Серийный номер зоны и негативный TTL
dig example.com SOA +short- Запись делегирования DNSSEC
dig example.com DS +short- Обратный запрос (PTR)
dig -x 203.0.113.10 +short- Сбросить DNS-кэш в macOS
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder- Сбросить DNS-кэш в Ubuntu (systemd-resolved)
resolvectl flush-caches- Запретить любые wildcard-сертификаты
example.com. CAA 0 issuewild ";"
В моих реальных проектах
- Я управляю DNS своих сайтов и сайтов клиентов; на нескольких из них DNS уже на Cloudflare, и есть план перевести туда все домены.
- При миграции серверов я действую по схеме: инвентаризация, копирование, проверка, переключение DNS — и держу старый сервер, пока всё не подтвердится.
- Мой план консолидации переносит почту к хостинг-провайдеру, а значит, нужно аккуратно переписать записи MX, SPF, DKIM и DMARC.
Вопросы и ответы
Q1Чем регистратор отличается от DNS-провайдера?
Регистратор — это место, где вы регистрируете и продлеваете домен и где указываете его nameserver'ы; он сообщает это делегирование реестру TLD. DNS-провайдер обслуживает эти nameserver'ы и хранит сами записи — A, CNAME, MX, TXT. Это может быть одна компания, но часто нет: домен можно зарегистрировать в одном месте, а DNS держать на Cloudflare. Главное на практике: записи имеют значение только у того провайдера, на которого указывают nameserver'ы. Редактировать их где-то ещё бесполезно — этим объясняется множество тикетов в духе «я поменял запись, а ничего не изменилось».
Q2Почему изменение DNS появляется не сразу?
Потому что резолверы, операционные системы и браузеры кэшируют ответы на время TTL записи. Если у старой записи TTL был сутки, некоторые пользователи могут видеть старый IP ещё до суток. Смена nameserver'ов занимает больше времени, потому что делегирование на уровне TLD кэшируется отдельно, часто на 24–48 часов. То есть это не «распространение» в смысле рассылки данных, а истечение кэшей. Я это планирую: заранее понижаю TTL перед миграцией, переключаю, проверяю через dig на нескольких публичных резолверах и авторитативном сервере и держу старый сервер включённым, пока трафик полностью не переедет.
Q3Можно ли поставить CNAME на корневой домен?
По стандарту DNS — нет. CNAME означает, что имя является псевдонимом и других записей у него нет, а у apex обязательно есть записи SOA и NS, обычно ещё MX и TXT. CNAME там конфликтует с ними и может сломать почту. Провайдеры решают это через CNAME flattening, ALIAS или ANAME: вы настраиваете псевдоним, а DNS-сервер сам резолвит цель и возвращает A- и AAAA-записи. Поэтому для хостинг-платформы, которая выдаёт вам hostname, используйте эту функцию на apex, либо направьте apex на IP-адреса, а CNAME поставьте на www.
Q4Как SPF, DKIM и DMARC работают вместе?
SPF — это TXT-запись со списком серверов, которым разрешено отправлять почту от имени вашего домена; получатели проверяют IP отправителя. DKIM добавляет к каждому письму криптографическую подпись, а получатели проверяют её публичным ключом, опубликованным в DNS под селектором. DMARC связывает их с видимым доменом в поле From: требует, чтобы хотя бы одна проверка прошла и совпала по домену, задаёт политику для неудач (none, quarantine, reject) и адрес для отчётов. Вместе они защищают от подделки отправителя и улучшают доставляемость. Я начинаю DMARC с p=none, чтобы собрать отчёты, исправляю каждого легитимного отправителя, а затем перехожу на quarantine и reject.
Q5Как перенести сайт на новый сервер без простоя?
Сначала инвентаризация всего: файлы, база данных, cron-задачи, переменные окружения, сертификаты и DNS-записи. Понижаю TTL нужных записей до 300 секунд как минимум за один период TTL. Поднимаю новый сервер, копирую данные и тестирую его напрямую через запись в hosts-файле или curl --resolve. Для финального переключения замораживаю запись или синхронизирую базу, затем меняю A-записи. Слежу за логами на обоих серверах: запросы уходят со старого по мере истечения кэшей. Старый сервер не трогаю, пока новый не проработает стабильно какое-то время, потом поднимаю TTL и вывожу старый из эксплуатации.
Вопросы уровня senior
S1Как бы вы использовали DNS для failover и каковы его ограничения?
Managed DNS умеет делать health check и менять ответы, когда endpoint падает, например failover routing в Route 53 или функция балансировки у CDN. При TTL около 60 секунд большинство пользователей переезжает за несколько минут. Ограничения реальны: резолверы и клиенты могут кэшировать дольше TTL, некоторые отдают устаревшие ответы, если не могут обновиться, а долгоживущие соединения продолжают ходить на старый IP до переподключения. К тому же DNS не видит здоровье приложения дальше того, что проверяет check. Поэтому я считаю DNS failover грубым региональным механизмом, а для быстрого failover на уровне каждого запроса использую балансировщик или anycast-прокси. Репликация данных между двумя площадками обычно оказывается сложнее всего.
S2Нужен ли DNSSEC каждому домену?
Его стоит включать, когда регистратор и DNS-хостинг поддерживают его с автоматическим управлением ключами: он блокирует поддельные ответы для валидирующих резолверов и открывает возможности вроде DANE для почты. Цена — эксплуатационный риск: неверная или устаревшая DS-запись превращается в полный outage для всех, кто пользуется валидирующими резолверами, а сегодня это большая доля пользователей. Миграции требуют аккуратного порядка, и не все провайдеры поддерживают multi-signer. Для небольшой команды я включаю его у managed-провайдера, документирую шаг удаления DS в runbook миграции и мониторю внешним чекером. Без автоматизации и runbook неправильно настроенный DNSSEC хуже, чем его отсутствие.
S3Как вы спланируете DNS для multi-tenant SaaS с доменами клиентов?
Клиенты направляют CNAME, например shop.customer.com, на стабильный hostname под вашим контролем, вроде tenants.example-saas.com, а для apex им нужен ALIAS или flattening на их стороне либо A-запись на anycast IP. Владение вы подтверждаете TXT-токеном, затем автоматически выпускаете сертификаты — обычно через HTTP-01, как только приходит трафик, или через продукт custom hostname у CDN, который берёт на себя валидацию и продление. Маршрутизация находит tenant по заголовку Host. Важные риски: клиент удалил CNAME, а вы сохранили маппинг, или вы удалили tenant, а его запись всё ещё указывает на вас, поэтому нужны мониторинг и задачи очистки. Лимиты на выпуск сертификатов и понятные страницы ошибок для неподтверждённых доменов завершают дизайн.
Глоссарий
- Зона
- Часть пространства имён DNS, за которую авторитетен один набор nameserver, например example.com и его поддомены.
- Apex
- Сам «голый» домен (example.com), его также называют корневым или naked domain.
- Рекурсивный резолвер
- Сервер, который ищет ответы от имени клиентов и кэширует их, например 1.1.1.1.
- Авторитетный nameserver
- Сервер, который хранит настоящие записи зоны и даёт окончательный ответ.
- Glue-запись
- IP-адрес nameserver, хранящийся в родительской зоне; нужен, когда nameserver находится внутри собственного домена.
- NXDOMAIN
- Ответ DNS, означающий, что такого имени вообще не существует.
- DS-запись
- Хэш DNSSEC-ключа зоны, опубликованный в родительской зоне, чтобы связать цепочку доверия.
- PTR-запись
- Обратный DNS: сопоставляет IP-адрес с hostname; важно для почтовых серверов.
- Anycast
- Один IP-адрес, анонсируемый из многих точек, чтобы трафик попадал на ближайший рабочий сервер.
- Subdomain takeover
- Когда кто-то занимает удалённый сторонний ресурс, на который всё ещё указывает ваша DNS-запись.
Что изучить дальше
Есть идея продукта?Давайте создадим его.
Расскажите о своей идее, продукте или команде. Обычно отвечаю в течение одного рабочего дня.