Теория: DNS: как имя превращается в адрес
Иерархия зон, путь рекурсивного запроса, основные типы записей и почему кеш заставляет ждать после переезда сайта. Прочитайте материал, а затем пройдите тест — следующий пункт курса откроется после верных ответов.
Зачем нужен DNS
Сеть работает с адресами, человек — с именами. DNS (Domain Name System) — служба, которая превращает имя в адрес.
Ценность не только в удобстве запоминания. Адрес сервера можно поменять — переехать к другому провайдеру, добавить второй сервер, увести трафик на резервную площадку, — и снаружи ничего не изменится: имя останется тем же. Привязка «имя → адрес» становится точкой управления, а не просто справочником.
Ценность не только в удобстве запоминания. Адрес сервера можно поменять — переехать к другому провайдеру, добавить второй сервер, увести трафик на резервную площадку, — и снаружи ничего не изменится: имя останется тем же. Привязка «имя → адрес» становится точкой управления, а не просто справочником.
Иерархия: корень, домены верхнего уровня, зоны
DNS устроен как дерево, и читается имя справа налево. В имени
Каждый уровень отвечает не за все имена, а только за то, кому делегирован следующий. Корневые серверы не знают адреса
Такое разделение и позволяет системе работать в мировом масштабе: полного списка имён не существует нигде.
www.example.com самая правая часть — не www, а невидимый корень, затем com (домен верхнего уровня), затем example, и только потом www.Каждый уровень отвечает не за все имена, а только за то, кому делегирован следующий. Корневые серверы не знают адреса
www.example.com — они знают, кто отвечает за com. Серверы com знают, кто отвечает за example.com. И только там лежит нужная запись.Такое разделение и позволяет системе работать в мировом масштабе: полного списка имён не существует нигде.
Рекурсивный запрос: кто на самом деле бегает
Хост задаёт один вопрос своему резольверу (это тот самый адрес DNS из настроек) — и ждёт готовый ответ. Дальше бегает резольвер:
• спрашивает корневой сервер — получает «иди к серверам com»;
• спрашивает сервер com — получает «иди к серверам example.com»;
• спрашивает сервер example.com — получает адрес.
Запрос хоста называется рекурсивным («принеси готовый ответ»), а запросы самого резольвера — итеративными («скажи, что знаешь, дальше я сам»).
Практический вывод: медленный сайт при быстром канале иногда упирается не в сервер сайта, а в резольвер — особенно если ответа нет в кеше и цепочку приходится проходить целиком.
• спрашивает корневой сервер — получает «иди к серверам com»;
• спрашивает сервер com — получает «иди к серверам example.com»;
• спрашивает сервер example.com — получает адрес.
Запрос хоста называется рекурсивным («принеси готовый ответ»), а запросы самого резольвера — итеративными («скажи, что знаешь, дальше я сам»).
Практический вывод: медленный сайт при быстром канале иногда упирается не в сервер сайта, а в резольвер — особенно если ответа нет в кеше и цепочку приходится проходить целиком.
Хост задаёт один вопрос и ждёт готовый ответ — это рекурсивный
запрос. Всю цепочку проходит резольвер, и его запросы уже итеративные: «скажи, что
знаешь, дальше я сам».
Типы записей
A — имя → IPv4-адрес. Самая частая.AAAA — имя → IPv6-адрес.CNAME — имя → другое имя (псевдоним). Позволяет держать адрес в одном месте: поменяли его там — поменялось у всех псевдонимов.MX — куда доставлять почту для домена.NS — какие серверы отвечают за зону. Именно эти записи делегируют уровень ниже.PTR — адрес → имя, обратное преобразование.TXT — произвольный текст; на нём держатся подтверждение владения доменом и почтовые политики.Одному имени может соответствовать несколько записей A с разными адресами — это простейшая балансировка: резольверы получают их в разном порядке.
Кеш и TTL — почему изменения не мгновенны
Каждая запись отдаётся вместе с TTL — временем, в течение которого её разрешено хранить в кеше. Кеширует резольвер, кеширует операционная система, кеширует браузер.
Отсюда главная практическая особенность DNS: изменение распространяется не мгновенно, а по мере истечения TTL. Поменяли адрес сайта с TTL в сутки — часть мира будет ходить на старый адрес ещё сутки, и никакая перезагрузка сервера этого не ускорит.
Отсюда рабочий приём: за несколько дней до переезда TTL снижают до нескольких минут, переезжают, убеждаются, что всё работает, и возвращают обратно. Сделать это после переезда уже поздно — старое значение уже разошлось по кешам.
Отсюда главная практическая особенность DNS: изменение распространяется не мгновенно, а по мере истечения TTL. Поменяли адрес сайта с TTL в сутки — часть мира будет ходить на старый адрес ещё сутки, и никакая перезагрузка сервера этого не ускорит.
Отсюда рабочий приём: за несколько дней до переезда TTL снижают до нескольких минут, переезжают, убеждаются, что всё работает, и возвращают обратно. Сделать это после переезда уже поздно — старое значение уже разошлось по кешам.
Обратная зона
Обычный запрос отвечает на вопрос «какой адрес у этого имени». Обратный — на противоположный: «чьё имя у этого адреса». Нужен он в трёх ситуациях, и все три встречаются в работе постоянно.
Разбор журналов и диагностика. В логах, в выводе
Почта. Самый жёсткий случай. Принимающий сервер смотрит, с какого адреса пришло соединение, и спрашивает обратную зону: есть ли у этого адреса имя. Нет записи — письмо почти наверняка уедет в спам или будет отвергнуто на входе. Для почтового сервера настроенная обратная зона — обязательное условие работы, а не украшение.
Подтверждение, что адрес и имя связаны по-настоящему. В прямой зоне владелец домена может назвать свой узел как угодно — объявить
Как устроено. Обратное преобразование живёт в отдельной зоне
Отсюда следствие, которое удивляет новичков: обратная зона не обязана совпадать с прямой и часто не совпадает. Вы можете завести у себя сколько угодно имён для своего адреса, но запись в обратной зоне за вас сделает тот, кому этот адрес принадлежит, — и запросить её у провайдера отдельно.
Разбор журналов и диагностика. В логах, в выводе
traceroute, в списке подключений вы видите голый адрес. Понять по нему, чей это узел, невозможно — а по имени часто сразу видно и организацию, и роль машины, и даже город. Поэтому утилиты спрашивают обратную зону сами: это ровно та причина, по которой tcpdump без ключа -n подтормаживает, а traceroute показывает не только адреса, но и имена промежуточных роутеров.Почта. Самый жёсткий случай. Принимающий сервер смотрит, с какого адреса пришло соединение, и спрашивает обратную зону: есть ли у этого адреса имя. Нет записи — письмо почти наверняка уедет в спам или будет отвергнуто на входе. Для почтового сервера настроенная обратная зона — обязательное условие работы, а не украшение.
Подтверждение, что адрес и имя связаны по-настоящему. В прямой зоне владелец домена может назвать свой узел как угодно — объявить
mail.google.com у себя никто не мешает. А вот обратную зону заполняет владелец блока адресов, обычно провайдер. Поэтому проверяющая сторона делает два шага: спрашивает имя по адресу, а потом адрес по этому имени — и сверяет, сошлось ли. Совпало — связь подтверждена обеими сторонами, а подделать её в одиночку нельзя.Как устроено. Обратное преобразование живёт в отдельной зоне
in-addr.arpa, а адрес в ней записывается задом наперёд: для 203.0.113.5 это 5.113.0.203.in-addr.arpa. Причина в той же иерархии: доменное имя читается справа налево, от корня к узлу, а у адреса старшая часть слева. Развернув адрес, его приводят к тому же порядку — и обратная зона делится между владельцами так же, как делятся сами блоки адресов.Отсюда следствие, которое удивляет новичков: обратная зона не обязана совпадать с прямой и часто не совпадает. Вы можете завести у себя сколько угодно имён для своего адреса, но запись в обратной зоне за вас сделает тот, кому этот адрес принадлежит, — и запросить её у провайдера отдельно.
Что здесь ломается
Работает по адресу, не работает по имени. Классика, которая сразу указывает на DNS, а не на сеть. Проверяется одной командой:
Сайт «не переехал». У вас открывается новый сервер, у коллеги старый. Никто не виноват — просто у него в кеше запись со старым адресом, и она ещё жива.
Единственный резольвер. Указан один DNS-сервер, он недоступен — и сеть выглядит полностью мёртвой, хотя работает целиком.
Резольвер отвечает, а ответ пустой. Домен не существует (NXDOMAIN) или зона отдана серверам, которые про неё не знают — делегирование настроено, а данных нет.
ping 1.1.1.1 идёт, ping ya.ru — нет.Сайт «не переехал». У вас открывается новый сервер, у коллеги старый. Никто не виноват — просто у него в кеше запись со старым адресом, и она ещё жива.
Единственный резольвер. Указан один DNS-сервер, он недоступен — и сеть выглядит полностью мёртвой, хотя работает целиком.
Резольвер отвечает, а ответ пустой. Домен не существует (NXDOMAIN) или зона отдана серверам, которые про неё не знают — делегирование настроено, а данных нет.
Как проверять
dig example.com — что отвечает резольвер и с каким TTL. Смотреть на TTL полезно: маленькое значение означает, что ответ только что получен, большое — что лежит в кеше давно.dig @8.8.8.8 example.com — спросить конкретный сервер в обход своего. Если чужой отвечает, а свой нет — проблема в вашем резольвере, а не в домене.dig +trace example.com — пройти цепочку от корня целиком и увидеть, на каком уровне она обрывается.dig -x 203.0.113.5 — обратный запрос.Первый вопрос при любой жалобе: «по адресу работает?» Ответ на него делит проблему пополам.
Команды — шпаргалка
# основные запросы
dig example.com # имя, которое спрашиваем; по умолчанию тип A
dig example.com MX # тип записи вторым словом: A, AAAA, MX, NS, PTR…
dig @8.8.8.8 example.com # @ — спросить именно этот сервер, а не системный
dig +short example.com # +short — только сам ответ, без служебных секций
dig +trace example.com # +trace — пройти цепочку от корневых серверов вниз
dig -x 203.0.113.5 # -x — обратный запрос: сам развернёт адрес
# и допишет in-addr.arpa
# что настроено у клиента
cat /etc/resolv.conf # какие серверы и домены поиска использует система
# поймать обмен
tcpdump -i eth0 -n port 53 # -i — интерфейс, -n — не резолвить адреса в имена
# (иначе tcpdump сам полезет в DNS), 53 — порт DNS
# сервер (dnsmasq): строки конфигурации, не команды
address=/lab.local/192.168.1.50
# отдавать этот адрес для домена и всего,
# что под ним. Косые черты — разделители
server=8.8.8.8 # кому пересылать вопросы про чужие зоны
local-ttl=60 # сколько секунд клиентам разрешено кэшировать
# ответы, которые сервер придумал самКонтрольные вопросы
Дальше — лабораторная работа «DNS: подними резолвер и заведи зону»
Для неё нужен аккаунт: стенд поднимается персонально под вас — свои роутеры, свои конфиги, никто в них не мешает. Регистрация — почта и пароль.
Теория прочитана. Дальше — руками.
Личный стенд из настоящих роутеров разворачивается за секунды. Платформа проверяет не ответы на тесты, а состояние вашей сети: поднялись ли соседства, сошлись ли маршруты, ходит ли ping. Рядом — AI-наставник, который видит ваши конфиги и ведёт к решению, не выдавая готовое.
Начать бесплатно →
бета открыта, доступ бесплатный