awesome-everything EN
↑ Обратно к восхождению

Сети и протоколы

Обход резолвера: перенаправления, типы записей и glue

Суть Как рекурсивный резолвер следует перенаправлениям от root до авторитативного, что содержат секции DNS-сообщения и почему отсутствие glue ломает всё.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на middle-высоте — в небе
◷ 14 min

Резолвер, спрашивающий про cdn.example.co.uk, не получает ответ от корневого сервера. Он получает перенаправление — «спроси TLD .uk». Потом ещё одно — «спроси авторитативный сервер example.co.uk». Только на третьем запросе он получает реальный IP-адрес. Понять, что передаётся в этих ответах-перенаправлениях, — значит уметь отлаживать DNS, а не просто запускать dig и надеяться.

Итеративные vs рекурсивные запросы

Запросы резолвера к root, TLD и авторитативным серверам — итеративные: бит RD (Recursion Desired) очищен. Эти серверы возвращают только то, что знают, плюс перенаправление — они никогда не обходят дерево за клиента. Только исходный запрос клиента к резолверу имеет RD=1, прося резолвер сделать полный обход.

Это различие важно для безопасности. Авторитативный сервер, принимающий RD=1 от внешних клиентов — открытый резолвер — может быть использован как DNS-reflection-усилитель: атакующий отправляет запросы со spoof-адресом источника, и сервер шлёт большие ответы жертве. Продакшен-авторитативы (Route 53, Cloudflare DNS) никогда не рекурсируют для внешних клиентов.

Секции DNS-сообщения

DNS-сообщение имеет четыре секции:

СекцияНазначение
QuestionИмя запроса, тип (A, MX, …), класс (IN)
AnswerЗаписи, прямо отвечающие на вопрос
AuthorityNS-записи, указывающие на следующий nameserver
AdditionalЗаранее собранные A/AAAA для имён из Authority

Перенаправление не содержит ничего в Answer, зато содержит Authority + Additional. Бит AA (Authoritative Answer) устанавливается только когда отвечающий сервер владеет зоной — перенаправление от TLD-сервера имеет AA=0.

Цепочка перенаправлений для cdn.example.co.uk

  1. Резолвер → root: спрашивает cdn.example.co.uk. Root не знает ответа. Возвращает Authority: ns.nic.uk (NS-запись для .uk) + Additional: ns.nic.uk A 193.0.0.1 (glue). Секция Answer пуста.
  2. Резолвер → TLD .uk: спрашивает то же QNAME. TLD возвращает Authority: ns1.example.co.uk (NS для example.co.uk) + Additional: ns1.example.co.uk A 198.51.100.4 (glue). Answer по-прежнему пуст.
  3. Резолвер → авторитативный: спрашивает то же QNAME. Авторитативный возвращает Answer: cdn.example.co.uk A 203.0.113.10 TTL=300. Бит AA установлен.
Проследи
1/6

Трассируйте холодный DNS-lookup для cdn.example.co.uk из чистого кеша.

1
Step 1 of 6
Резолвер ничего не кешировал. Первый шаг?
2
Locked
Root отвечает. Что получает резолвер?
3
Locked
Резолвер запрашивает TLD .uk. О чём спрашивает?
4
Locked
TLD отвечает. Что теперь?
5
Locked
Резолвер запрашивает авторитативный example.co.uk. Что получает?
6
Locked
Следующий такой же запрос в рамках TTL?

Glue-записи и циклическая зависимость

Когда зона делегирует управление nameserver-у внутри своей же зоны (NS для example.com — это ns1.example.com), родительская зона обязана включить A-запись для ns1.example.com как glue в ответ-перенаправление. Без glue резолвер не может найти nameserver, не разрешив сначала example.com — порочный круг.

Отсутствие glue вызывает нерегулярные SERVFAIL или циклы перенаправлений. NS-записи вне зоны (например, ns1.somednsprovider.org) не требуют glue — резолвер запросит их IP у другой зоны.

Распространённые типы DNS-записей
A
IPv4-адрес
AAAA
IPv6-адрес
CNAME
псевдоним → другое имя (не IP)
MX
hostname почтового сервера + приоритет
TXT
свободный текст — SPF, DKIM, верификация
NS
делегирование — nameserver зоны
SOA
авторитет зоны: serial, refresh, мин. TTL
CAA
кому из CA разрешено выдавать сертификаты
HTTPS/SVCB
ALPN + ECH-ключи (RFC 9460)

CNAME и правило apex

CNAME-запись указывает имя на другое имя: www CNAME example.com. Резолвер затем разрешает цель. CNAME запрещён на вершине зоны (bare domain, например example.com) согласно RFC 1034, потому что SOA и NS тоже должны находиться на вершине, а CNAME заменил бы все другие типы записей для этого имени. CDN-специфичные ALIAS/ANAME и новая запись HTTPS (RFC 9460) обходят это ограничение.

Викторина

Откуда рекурсивный резолвер берёт информацию о следующем шаге при получении перенаправления от TLD-сервера?

Викторина

Почему CNAME запрещён на вершине зоны (example.com) согласно RFC 1034?

UDP, TCP и EDNS0

DNS по умолчанию использует UDP, порт 53. Если ответ превышает размер UDP-буфера, сервер устанавливает флаг TC (truncation) и резолвер повторяет запрос через TCP, порт 53. TCP также обязателен для зонных трансферов (AXFR/IXFR). Файервол, блокирующий TCP/53 при разрешённом UDP/53, молча ломает DNSSEC-ответы и зонную репликацию.

EDNS0 (RFC 6891) добавляет псевдозапись OPT для согласования больших UDP-буферов (обычно 1232 или 4096 байт) и передачи расширений: бит DNSSEC OK (DO), ECS (подсеть клиента), EDNS Cookies. Каждый современный резолвер рекламирует EDNS0; без него DNSSEC-ответы будут усечены.

Расставь шаги по порядку

Расставьте шаги при открытии https://shop.example.com из чистого кеша:

  1. 1 Браузер спрашивает OS-резолвер про shop.example.com
  2. 2 OS-резолвер перенаправляет запрос к настроенному upstream (ISP или 1.1.1.1)
  3. 3 Резолвер проходит root → .com → авторитативный example.com
  4. 4 Резолвер возвращает A-запись (IP) браузеру
  5. 5 Браузер выполняет TCP-рукопожатие к этому IP
  6. 6 Браузер выполняет TLS-рукопожатие поверх TCP
  7. 7 Браузер отправляет HTTPS-запрос и получает страницу
Почему это работает

Stub-резолвер vs полный рекурсивный резолвер. Операционная система запускает stub-резолвер — тонкий клиент, который перенаправляет запросы к настроенному upstream и кеширует ненадолго. Linux использует systemd-resolved или nscd; macOS — mDNSResponder; Windows — DNS Client service. Stub почти ничего не делает сам. Полный рекурсивный резолвер — тот, что обходит root→TLD→авторитативный — находится upstream (ваш роутер, ISP или публичный резолвер 1.1.1.1). Браузеры часто обходят OS-stub напрямую: Chrome’s Async DNS Resolver и Firefox’s TRR запрашивают DoH напрямую. Сброс кеша OS-stub (sudo systemd-resolve --flush-caches) не сбрасывает кеш upstream-резолвера.

Вспомните перед уходом
  1. 01
    В чём операционное различие между авторитативным сервером и рекурсивным резолвером?
  2. 02
    Почему glue-записи обязательны для in-bailiwick nameserver-ов?
  3. 03
    Почему DNS переходит с UDP на TCP для некоторых запросов?
Итог

Рекурсивный резолвер обходит DNS-дерево итеративно, собирая перенаправления на каждом уровне. Каждое перенаправление несёт NS-записи в секции Authority плюс glue A/AAAA в Additional — вместе они разрывают любую циклическую зависимость для in-bailiwick nameserver-ов. Бит AA (Authoritative Answer) устанавливается только когда отвечающий сервер владеет зоной. Типы DNS-записей выходят далеко за рамки A-записей: CNAME создаёт псевдонимы, MX направляет почту, TXT несёт SPF/DKIM, NS делегирует зоны, SOA определяет авторитет зоны. CNAME запрещён на apex зоны, поскольку там должны сосуществовать SOA и NS. DNS по умолчанию использует UDP; большие ответы (DNSSEC, зонные трансферы) переходят на TCP. EDNS0 расширяет UDP-буферы и передаёт DNSSEC-флаги.

Связанные уроки
встречается в152
Продолжить восхождение ↑TTL, кеширование и распространение DNS
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources5
expand
  1. 01
  2. 02
  3. 03
  4. 04
  5. 05

Trademarks belong to their respective owners. Editorial reference only.