DNS: система доменных имён explained
Как работает DNS, типы записей (A, AAAA, MX, TXT, CNAME), DNS-запросы, troubleshooting.
Введение
Когда вы вводите в адресной строке example.com, в течение миллисекунд происходит сложная цепочка событий, в результате которой браузер узнаёт IP-адрес сервера и устанавливает соединение. Этим занимается DNS — система доменных имён, без которой современный интернет в привычном виде существовать не мог бы. DNS — это огромная распределённая база данных, которая переводит понятные людям доменные имена в IP-адреса, необходимые машинам.
В этой статье мы разберём, как устроена система доменных имён, какие бывают типы DNS-записей, как проходит рекурсивный запрос, что такое TTL и кэширование, а также какие инструменты помогут диагностировать проблемы с DNS. Материал рассчитан на разработчиков, системных администраторов и всех, кто хочет понять, как «под капотом» работает интернет.
Что такое DNS
DNS (Domain Name System) — это иерархическая распределённая система, которая сопоставляет доменным именам различные данные: IP-адреса, информацию о почтовых серверах, текстовые записи, ключи шифрования и многое другое. Главная задача DNS — преобразование символьного имени в IP-адрес, но функциональность системы этим не ограничивается.
До появления DNS в начале 1980-х годов для разрешения имён использовался файл HOSTS.TXT, который централизованно вёл Stanford Research Institute. С ростом сети этот подход стал невозможным, и в 1983 году Пол Мокапетрис предложил DNS в её современном виде. Сегодня система обслуживает миллиарды запросов в секунду по всему миру.
Иерархия доменных имён
DNS имеет древовидную структуру. На вершине находятся корневые серверы (root), которые знают адреса серверов доменов верхнего уровня (TLD — top-level domain): .com, .ru,.org и так далее. Ниже — серверы доменов второго уровня (example.com), третьего (api.example.com) и так далее вглубь.
root (.)
/ com ru
/ |
google example yandex
/ api wwwКаждая зона делегирует ответственность за подзоны на свои авторитетные серверы. Это позволяет системе быть децентрализованной: никто не хранит всю базу целиком, но любой запрос может быть разрешён серией обращений от корня к листу дерева.
Типы DNS-записей
DNS хранит не только IP-адреса, но и множество других типов данных. Каждый тип записи обозначается латинскими буквами и имеет своё назначение. Ниже приведены самые распространённые.
| Тип | Назначение | Пример значения |
|---|---|---|
| A | IPv4-адрес хоста | 93.184.216.34 |
| AAAA | IPv6-адрес хоста | 2606:2800:220:1:: |
| CNAME | Каноническое имя — алиас на другой домен | www.example.com → example.com |
| MX | Почтовый сервер с приоритетом | 10 mail.example.com |
| TXT | Произвольный текст (SPF, DKIM, верификация) | v=spf1 include:_spf.google.com ~all |
| NS | Авторитетные серверы имён зоны | ns1.example.com |
| SOA | Начало зоны — метаданные | ns1.example.com admin.example.com ... |
| PTR | Обратное разрешение (IP → имя) | 34.216.184.93.in-addr.arpa |
| SRV | Сервисная запись с портом и приоритетом | 10 60 5060 sip.example.com |
| CAA | Каким CA разрешено выпускать сертификаты | 0 issue "letsencrypt.org" |
Записи для защиты почты и аутентификации
- SPF (в TXT) — список серверов, которым разрешено отправлять почту от имени домена.
- DKIM (в TXT) — публичный ключ для проверки цифровой подписи письма.
- DMARC (в TXT) — политика обработки писем, не прошедших SPF/DKIM.
Как проходит DNS-запрос
Когда приложение запрашивает адрес www.example.com, происходит следующая последовательность шагов (если результат ещё не в кэше):
- Приложение обращается к рекурсивному резолверу — обычно это сервер провайдера или публичный резолвер вроде Google DNS (8.8.8.8) или Cloudflare (1.1.1.1).
- Резолвер спрашивает корневой сервер: «кто отвечает за зону
.com?» — получает список TLD-серверов. - Резолвер спрашивает TLD-сервер: «кто отвечает за
example.com?» — получает адреса авторитетных серверов. - Резолвер спрашивает авторитетный сервер: «какой IP-адрес у
www.example.com?» — получает A-запись. - Результат кэшируется на всех уровнях: у резолвера, у ОС, у браузера — на время, указанное в поле TTL.
На практике большинство запросов не доходит до корневого сервера: популярные домены уже находятся в кэше. Корневые серверы обрабатывают лишь небольшую долю трафика, но без них разрешение новых имён было бы невозможно.
TTL и кэширование
TTL (Time To Live) — это время в секундах, в течение которого запись может храниться в кэше. После истечения TTL запись считается устаревшей и при следующем запросе происходит обращение к авторитетному серверу. TTL задаётся для каждой записи отдельно и может составлять от нескольких секунд до нескольких дней.
example.com. 3600 IN A 93.184.216.34
│ │ │ │ │
│ │ │ │ └── значение
│ │ │ └── тип записи
│ │ └── класс (Internet)
│ └── TTL в секундах (1 час)
└── имя (с завершающей точкой)Короткий TTL (60–300 секунд) удобен для быстрого переключения между серверами, но увеличивает нагрузку на резолверы. Длинный TTL (86400 — сутки) снижает нагрузку, но замедляет распространение изменений. При планировании миграции серверов TTL обычно заранее уменьшают, чтобы переключение прошло быстро.
Команды для работы с DNS
dig — универсальный инструмент
# A-запись по умолчанию
dig example.com
# Запись конкретного типа
dig example.com MX
dig example.com AAAA
dig example.com TXT
# Короткий ответ
dig +short example.com
# С указанием сервера
dig @8.8.8.8 example.com
# Только ответ, без метаданных
dig +noall +answer example.comnslookup — для быстрого запроса
nslookup example.com
nslookup -type=MX example.com
nslookup example.com 1.1.1.1host — максимально кратко
host example.com
host -t MX example.com
host -t NS example.comДля веб-интерфейса используйте наш DNS-lookup — он показывает все типы записей сразу и не требует установки утилит.
Распространённые проблемы и диагностика
Сайт не открывается после смены DNS
Скорее всего, изменения ещё не распространились из-за длинного TTL. Проверьте актуальную запись через разные резолверы (dig @8.8.8.8 и dig @1.1.1.1); если они показывают старый адрес, подождите или сбросьте локальный кэш.
Сброс кэша DNS
# Windows
ipconfig /flushdns
# macOS (разные версии)
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
# Linux с systemd-resolved
sudo resolvectl flush-caches
# Linux с nscd
sudo systemctl restart nscdПочта попадает в спам
Проверьте, что у домена корректно настроены SPF, DKIM и DMARC. Без этих записей принимающий сервер не может подтвердить подлинность отправителя и склонен помечать письмо как спам. Используйте dig example.com TXT, чтобы увидеть текущие записи.
Петли CNAME
Запись CNAME не должна указывать сама на себя или образовывать кольцо — это приводит к ошибке разрешения. Также CNAME нельзя использовать вместе с другими типами записей для одного имени (например, A и CNAME одновременно на корне домена).
Безопасность DNS
Классический DNS не шифруется и не проверяет подлинность ответов, что открывает возможности для атак:
- DNS-spoofing / cache poisoning — подмена ответа, чтобы направить пользователя на поддельный сайт.
- DNS-hijacking — перехват запросов на уровне провайдера или вредоносного ПО.
- Amplification-атаки — использование открытых DNS-резолверов для DDoS через UDP-ответы большого размера.
Для защиты используются расширения: DNSSEC добавляет цифровые подписи к записям и гарантирует их подлинность, DNS-over-HTTPS (DoH) и DNS-over-TLS (DoT)шифруют трафик между клиентом и резолвером. Современные браузеры по умолчанию поддерживают DoH, что затрудняет перехват и подмену DNS-запросов.
Заключение
DNS — это невидимая инфраструктура, без которой интернет перестал бы работать за считанные минуты. Знание типов записей, понимание механизма рекурсивных запросов и умение пользоваться инструментами диагностики позволяют быстро находить причины «загадочных» проблем: недоступности сайта, попадания почты в спам, медленной загрузки ресурсов.
Для быстрой проверки DNS-записей любого домена используйте наш инструмент DNS-lookup — он показывает A, AAAA, MX, TXT, NS, CNAME и другие записи в одном отчёте и работает прямо в браузере. А если нужно определить IP-адрес посетителя или проверить географию адреса, пригодится IP-lookup.
Попробуйте эти инструменты
Похожие статьи
Системы счисления: двоичная, восьмеричная, шестнадцатеричная
Позиционные системы счисления, конвертация между ними, использование в программировании.
Двоичная в десятичную: как конвертировать
Алгоритм перевода binary to decimal, степени двойки, примеры, использование в программировании.
Римские цифры: таблица и правила записи
Римская система счисления, символы, правила, запись больших чисел, история и современное использование.
Калькулятор процентов: как считать проценты
Виды расчёта процентов: от числа, процентное изменение, скидки, налоги, примеры.