Руководства

Что такое DNS и как работает система доменных имён

DNS превращает имена сайтов в IP-адреса. Как устроен запрос от браузера до авторитетного сервера, какие бывают записи и частые проблемы с DNS.

Опубликовано ~9 мин чтения

Короткий ответ: 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, которая обходит ваш резолвер и сама идёт от корня вниз:

Linux · пройти запрос от корня
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-записи?

ТипХранитПример значения
AIPv4-адрес203.0.113.10
AAAAIPv6-адрес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 из командной строки?

Linux · dig (пакет dnsutils или bind9-dnsutils в Debian/Ubuntu, bind-utils в RHEL)
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)
Linux · что использует сам сервер
resolvectl status                 # systemd-resolved: серверы по интерфейсам
cat /etc/resolv.conf              # 127.0.0.53 значит stub systemd-resolved
getent hosts example.com          # резолвит так же, как приложения, с учётом /etc/hosts
Windows · PowerShell или cmd
Resolve-DnsName example.com -Type A
nslookup example.com 1.1.1.1
ipconfig /flushdns

nslookup есть и в 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, и переключение дойдёт до всех за несколько минут.

Читайте также

Все статьи раздела