Рекурсивный резолвер — посредник между клиентским устройством и системой DNS. Клиент (браузер, ОС) отправляет один запрос резолверу, а тот последовательно опрашивает несколько серверов и возвращает окончательный ответ.
Процесс разрешения
- Клиент спрашивает резолвер: «Какой IP у www.example.com?»
- Резолвер проверяет кэш — если нет, идёт к корневому серверу.
- Корневой сервер отвечает: «.com знает TLD-сервер, вот его адрес».
- TLD-сервер .com отвечает: «example.com знает авторитативный сервер, вот его адрес».
- Авторитативный сервер example.com возвращает IP-адрес.
- Резолвер кэширует ответ (на TTL записи) и возвращает IP клиенту.
Весь процесс занимает 20–100 мс при первом запросе и <1 мс из кэша.
Публичные рекурсивные резолверы
| Провайдер | IP | Особенности |
|---|---|---|
| Google Public DNS | 8.8.8.8 / 8.8.4.4 | С 2009 года, глобальный anycast |
| Cloudflare | 1.1.1.1 / 1.0.0.1 | С 2018 года, приватность DoH/DoT |
| OpenDNS | 208.67.222.222 | С 2005 года, фильтрация |
| Quad9 | 9.9.9.9 | Блокировка вредоносных доменов |
История
Рекурсивный резолвинг описан в RFC 1034 и RFC 1035 (1987). До публичных резолверов клиенты использовали резолверы своего провайдера. Google запустил 8.8.8.8 в декабре 2009 года. Cloudflare запустил 1.1.1.1 1 апреля 2018 года.
DNS в хостинге
Провайдеры хостинга предоставляют собственные авторитативные DNS-серверы для управления записями доменов. Рекурсивные резолверы на серверах используют /etc/resolv.conf — в production рекомендуется прописывать 127.0.0.1 (локальный unbound или bind) для снижения зависимости от внешних серверов.
Рекурсивный резолвер в деталях
Рекурсивный DNS-резолвер выполняет полный цикл разрешения имени вместо клиента: 1) Запрашивает root-серверы (13 кластеров, 1000+ экземпляров по всему миру) — получает адреса TLD-серверов. 2) Запрашивает TLD-серверы (.com, .ru) — получает адреса авторитативных DNS-серверов для домена. 3) Запрашивает авторитативные серверы — получает итоговый IP-адрес. 4) Кэширует результат на TTL DNS-записи. Весь процесс: 50–300 мс при первом запросе, 0–5 мс при кэшированном.
Типичные рекурсивные резолверы в интернете: 8.8.8.8 и 8.8.4.4 (Google Public DNS), 1.1.1.1 и 1.0.0.1 (Cloudflare), 9.9.9.9 (Quad9 с фильтрацией малвари), 77.88.8.8 (Яндекс DNS). Корпоративные сети используют собственные резолверы (Unbound, BIND, PowerDNS Recursor).
DNS-кэш и TTL
TTL (Time-To-Live) DNS-записи определяет, сколько секунд резолвер кэширует ответ. Типичные значения: 300–3600 секунд (5 минут — 1 час). При смене хостинга (новый IP) старые записи кэшируются у резолверов до истечения TTL. Лайфхак: за 24–48 часов до миграции снизить TTL до 300 секунд — новые настройки распространятся быстрее. После миграции можно вернуть TTL на прежнее значение.
DNS-over-HTTPS и DNS-over-TLS
Классический DNS работает по UDP/TCP на порту 53 в открытом виде — запросы видны провайдеру и могут быть перехвачены. DNS-over-HTTPS (DoH, RFC 8484) и DNS-over-TLS (DoT, RFC 7858) шифруют запросы. Cloudflare 1.1.1.1 поддерживает DoH и DoT. Firefox и Chrome поддерживают DoH нативно. Для хостинга это важно при работе через публичные Wi-Fi сети, но на уровне сервера — стандартный DNS достаточен, если канал до провайдера защищён.
Безопасность рекурсивных резолверов
DNS-over-HTTPS (DoH) и DNS-over-TLS (DoT) шифруют запросы к резолверу. DNSSEC подписывает зоны цифровой подписью — резолвер проверяет подлинность ответа. Атака DNS Cache Poisoning подменяет записи в кэше.
На сервере с BIND или unbound рекурсивный резолвер следует ограничить allow-recursion только доверенными IP. Иначе сервер может использоваться как Open Resolver для DDoS-усиления — атакующий отправляет запросы с подделанным IP жертвы, получая многократно увеличенный ответ.