Короткий ответ: DNS, Domain Name System, — это справочник интернета. Он превращает имена, которые легко запомнить человеку, вроде example.com, в IP-адреса, к которым подключаются компьютеры, вроде 203.0.113.10 или адреса IPv6, а ещё говорит почтовым серверам, куда доставлять письма, удостоверяющим центрам — кто может выпускать сертификаты, и многое другое. Это не один сервер, а всемирная, иерархическая, сильно кешируемая база данных, которую поддерживают тысячи организаций и к которой обращаются почти перед каждым соединением в интернете.
Что происходит, когда вы ищете имя?
Возьмём браузер, который открывает www.example.com, когда в кеше пока ничего нет:
- Stub-резолвер операционной системы спрашивает рекурсивный резолвер, на который она настроена, — ваш роутер, резолвер провайдера или публичный, например 1.1.1.1, 8.8.8.8, 9.9.9.9 или 77.88.8.8 от Яндекса.
- Рекурсивный резолвер спрашивает корневой сервер, где обслуживается
.com. Всего 13 идентичностей корневых серверов, отaдоm.root-servers.net, которые поддерживают 12 организаций, а отвечают больше 2 000 инстансов серверов по всему миру через anycast. - Корень отсылает к TLD-серверам .com, которые отсылают к авторитетным серверам домена.
- Авторитетный сервер возвращает ответ — скажем, A-запись с IPv4-адресом — вместе с TTL, который говорит, сколько его можно кешировать.
- Резолвер кеширует ответ и отдаёт его дальше; браузер подключается по этому адресу.
Всё это обычно занимает десятки миллисекунд, и только в первый раз: следующий посетитель с тем же резолвером получает кешированный ответ сразу. Всю цепочку можно увидеть с Linux-сервера командой dig +trace, которая обходит ваш резолвер и сама идёт от корня вниз:
dig +trace www.example.com AКакие бывают роли DNS-серверов?
| Роль | Что делает | Примеры |
|---|---|---|
| Stub-резолвер | Библиотека в ОС, пересылает запросы и ненадолго кеширует | systemd-resolved, служба DNS-клиента Windows |
| Рекурсивный резолвер | Делает всю работу от корня вниз, кеширует ответы для всех, кто его использует | резолверы провайдеров, 1.1.1.1, 8.8.8.8, 9.9.9.9, 77.88.8.8, Unbound на своём сервере |
| Корневые серверы | Знают, где обслуживается каждый домен верхнего уровня | a–m.root-servers.net |
| TLD-серверы | Знают серверы имён каждого домена в своей зоне | серверы реестра .com, .ru или .de |
| Авторитетные серверы имён | Хранят реальные записи домена и отвечают за него | ваш DNS-провайдер, регистратор, Cloudflare или свой BIND/PowerDNS |
Это разделение объясняет две совершенно разные проблемы, которые называют одним словом «DNS»: у компьютера, который не резолвит вообще ничего, проблема с резолвером, а у домена, который не резолвит никто, — проблема с авторитетными серверами. Какие серверы имён авторитетны для домена, задаётся у регистратора — это отдельный слой системы.
Что такое DNS-записи?
| Тип | Хранит | Пример значения |
|---|---|---|
| A | IPv4-адрес | 203.0.113.10 |
| AAAA | IPv6-адрес | 2001:db8::10 |
| CNAME | Псевдоним на другое имя | www → example.com |
| MX | Почтовый сервер домена с приоритетом | 10 mail.example.com |
| TXT | Произвольный текст: SPF, DKIM, DMARC, верификация сайта | v=spf1 mx -all |
| NS | Авторитетные серверы имён зоны | ns1.example-dns.net |
| SOA | Метаданные зоны: основной сервер, серийный номер, таймеры | Одна на зону |
| PTR | Обратный DNS: имя для IP-адреса | 10.113.0.203.in-addr.arpa → mail.example.com |
| SRV | Приоритет, вес, порт и хост службы | _minecraft._tcp → 0 5 25565 mc.example.com |
| CAA | Какие удостоверяющие центры могут выпускать сертификаты для домена | 0 issue "letsencrypt.org" |
Пара правил, на которых часто спотыкаются:
- CNAME не может делить своё имя с другими записями, поэтому голый домен (где живут NS и SOA) не может быть CNAME. Провайдеры, которые всё же разрешают такое, называют обходной путь ALIAS, ANAME или CNAME flattening.
- MX должна называть хост — полное доменное имя (FQDN), например
mail.example.com, — через записи A или AAAA, а не IP-адрес и не CNAME. - PTR-записи для IP сервера настраивает тот, кому принадлежит диапазон IP, — ваш хостинг-провайдер, а не ваша зона домена. Почтовые серверы их проверяют, поэтому обратную DNS-запись настраивают до отправки почты.
Что такое TTL и почему изменения DNS занимают время?
Каждый ответ несёт время жизни в секундах. Резолверы могут использовать его повторно до истечения, поэтому после изменения записи те, кто пользуется резолвером с закешированным старым значением, получают его ещё до окончания старого TTL. Это всё, что такое «распространение DNS», — истечение кешей, а не путешествие изменений. Отрицательные ответы — «такого имени не существует» — тоже кешируются, на время из записи SOA зоны.
Какие порты и протоколы использует DNS?
- UDP порт 53 для обычных запросов — один пакет в каждую сторону, без установления соединения.
- TCP порт 53 для ответов, слишком больших для UDP, для передачи зон между серверами имён и как запасной вариант. Файрволы, которые пускают только UDP 53, ломают разрешение больших записей, например длинных TXT или ответов с подписью DNSSEC.
- DNS over TLS (DoT, RFC 7858) на TCP-порту 853 и DNS over HTTPS (DoH, RFC 8484) на порту 443 шифруют участок до резолвера, так что локальная сеть не может прочитать или подменить ваши запросы.
- DNSSEC подписывает записи, чтобы резолвер мог доказать, что ответ пришёл от владельца зоны без изменений. Это подлинность, а не приватность — сами запросы остаются читаемыми, если их не несут DoT или DoH.
Как запрашивать DNS из командной строки?
dig example.com A +short # IPv4-адрес
dig example.com AAAA +short # IPv6-адрес
dig example.com MX # почтовые серверы, с TTL
dig @1.1.1.1 example.com # спросить конкретный резолвер
dig @ns1.example-dns.net example.com # спросить авторитетный сервер прямо
dig -x 203.0.113.10 +short # обратный запрос (PTR)resolvectl status # systemd-resolved: серверы по интерфейсам
cat /etc/resolv.conf # 127.0.0.53 значит stub systemd-resolved
getent hosts example.com # резолвит так же, как приложения, с учётом /etc/hostsResolve-DnsName example.com -Type A
nslookup example.com 1.1.1.1
ipconfig /flushdnsnslookup есть и в Linux, и в macOS; её типы записей, аргумент сервера и как читать вывод — в руководстве по команде nslookup.
Спросить авторитетный сервер напрямую, а затем публичный резолвер — самый быстрый способ отличить неверную запись от устаревшего кеша: если авторитетный ответ верный, а ответ резолвера старый, вы просто ждёте истечения TTL.
Если браузер уже знает, что это за имя, но считает, что оно не существует, — это DNS_PROBE_FINISHED_NXDOMAIN, другая по сути ошибка.
Какие бывают типичные проблемы с DNS?
- На машине не резолвится ничего — резолвер недоступен или настроен неверно. В Windows это «DNS-сервер не отвечает», на Linux-сервере —
Temporary failure in name resolution. - Не резолвится только один домен — неверные или недоступные авторитетные серверы, просроченный домен или сломанный DNSSEC. Chrome показывает такое как DNS_PROBE_FINISHED_NXDOMAIN.
- Часть пользователей видит старый сервер — закешированные записи; подождите истечения TTL и в следующий раз сделайте его короче.
- Почта отклоняется или попадает в спам — нет записей SPF, DKIM или DMARC, либо нет подходящей PTR для IP отправителя.
- Сайт за CDN-проксёй не открывается по таймауту — запись DNS указывает на CDN, который не может достучаться до вашего origin-сервера; это проблема соединения, а не DNS.
Запуск DNS на своём сервере
На VPS могут работать два разных сервиса. Кеширующий резолвер, например Unbound, привязанный к localhost, даёт серверу быстрые проверенные ответы, не зависящие ни от чьего чужого резолвера, — полезно на почтовых серверах, которые делают много запросов к спам-блок-листам. Авторитетный сервер имён, например BIND, Knot или PowerDNS, отдаёт ваши собственные зоны всему миру; держите минимум два, в разных сетях, и никогда не отвечайте рекурсивными запросами незнакомцам — иначе сервер станет инструментом для атак усиления (amplification).
Любая из этих ролей помещается на самый младший тариф Standard KVM в Амстердаме: у каждого сервера есть root и собственный IPv4-адрес. Для второго сервера имён в другом городе DMCA Ignored KVM и Pentesting KVM продаются также во Франкфурте.
Частые вопросы
Что такое DNS простыми словами?
DNS, Domain Name System, — справочник интернета: он превращает имена вроде example.com, которые легко запомнить человеку, в IP-адреса, по которым подключаются компьютеры. Это не один сервер, а всемирная иерархическая база данных из корневых серверов, серверов доменных зон (TLD) и авторитетных серверов имён каждого домена.
Какие бывают типы DNS-записей?
Самые частые — A (IPv4-адрес), AAAA (IPv6-адрес), CNAME (псевдоним на другое имя), MX (почтовый сервер домена), TXT (произвольный текст: SPF, DKIM, верификация сайта), NS (серверы имён зоны) и PTR (обратная запись — имя для IP-адреса). Полная таблица с примерами значений — в самой статье.
Почему изменения в DNS не применяются сразу?
Каждая запись несёт TTL — время жизни в секундах, на которое резолверы имеют право её закешировать. После изменения записи те, кто уже закешировал старое значение, продолжают получать его до истечения старого TTL — это всё, что называют «распространением DNS». Перед плановым переносом снизьте TTL заранее, минимум на один период старого TTL, и переключение дойдёт до всех за несколько минут.