Что такое DNS-резолвер и каким вы пользуетесь?
DNS-резолвер - это служба, к которой ваше устройство обращается первой, когда ему нужен IP-адрес для имени, и один запрос обычно проходит через три разные роли: стаб-резолвер на вашей собственной машине, рекурсивный резолвер, который выполняет сам поиск, и авторитативные серверы, которые хранят настоящий ответ. Большинство людей настраивают только первый и никогда не видят два других напрямую.
Что происходит, когда ваше устройство ищет имя?
Ваша операционная система не ищет имя в интернете сама. Она передает запрос небольшой программе, которая называется стаб-резолвером и вовсе не является сервером имен. RFC 8499 определяет его как резолвер, «который не может выполнить всю работу по разрешению имени самостоятельно» и зависит от рекурсивного резолвера, который проделывает настоящую работу. Задача стаб-резолвера - отправить ваш запрос тому серверу, который указан в сетевых настройках, и вернуть ответ или кэшированную копию недавнего.
Стаб-резолвер, рекурсивный резолвер, авторитативный сервер: в чем разница?
В каждом запросе задействованы три роли, и один и тот же физический сервер может играть больше одной из них:
- Стаб-резолвер. Работает на вашем устройстве, пересылает запросы, держит небольшой кэш и не может разрешить имя самостоятельно.
- Рекурсивный резолвер. По RFC 8499, «резолвер, работающий в рекурсивном режиме», то есть выполняющий всю работу по поиску ответа через столько серверов, сколько потребуется, а затем кэширующий и возвращающий результат. Эту роль выполняет резолвер вашего провайдера или публичный DNS-сервис.
- Авторитативный сервер. RFC 8499 определяет его как сервер, который «знает содержимое DNS-зоны из собственных данных и потому может отвечать на запросы об этой зоне, не обращаясь к другим серверам». Это сервер, который держит собственный DNS-провайдер домена, и его ответ никто больше не копирует.
Сервер, который отвечает отсылкой, а не полным ответом, действует итеративно; тот, который продолжает работать, пока не получит окончательный ответ или окончательную ошибку, действует рекурсивно, что и означает слово «рекурсивный» в его названии.
Путь одного запроса: корень, домен верхнего уровня и авторитативные переходы
Холодный запрос, для которого нигде ничего не закэшировано, проходит по фиксированной иерархии. Рекурсивный резолвер начинает с корневого сервера, одного из тринадцати именованных идентичностей корневых серверов, которые IANA перечисляет от a.root-servers.net до m.root-servers.net, и спрашивает у него про example.com. Корневой сервер не знает ответа; он возвращает отсылку к серверам, отвечающим за домен верхнего уровня .com. Резолвер спрашивает один из них и получает вторую отсылку, на этот раз к авторитативным серверам имен для example.com, тем, которые настроил владелец домена. Только этот последний сервер дает настоящий ответ, а не указатель куда-то еще. Рекурсивный резолвер кэширует его и возвращает вашему стаб-резолверу, а тот передает его браузеру.
Каждый переход после первого пропускается, если ответ уже есть в каком-нибудь кэше по пути, поэтому подавляющее большинство повседневных запросов вообще никогда не доходят до корневого сервера.
Резолвер провайдера против публичного резолвера: что на самом деле меняется?
Резолвер, который ваше устройство использует по умолчанию, обычно приходит по DHCP, выданный роутером или провайдером, и это почти всегда рекурсивный резолвер, выполняющий полный поиск от вашего имени. Что он делает с вашими запросами, насколько велик его кэш и из скольких точек он работает, задает тот, кто им управляет, и с вашей стороны это не видно.
Публичные резолверы существуют как альтернатива, на которую можно направить устройство вместо этого: Google Public DNS работает на 8.8.8.8, Cloudflare на 1.1.1.1, а Quad9 на 9.9.9.9. Каждый публикует собственную политику о том, что логирует и как долго хранит, каждый работает через собственную anycast-сеть, так что один и тот же адрес отвечает из ближайшей к вам точки, а Quad9 еще и по умолчанию блокирует известные вредоносные домены на уровне резолвера, чего провайдерский резолвер обычно не делает. Ничто из этого не меняет то, что умеет сам DNS: резолвер решает только то, как выполняется поиск, а не то, что говорят записи домена.
Какой резолвер сейчас использует ваша машина?
Резолвер, который вы на самом деле используете, это настройка, а не догадка, и в каждой ОС есть команда, которая ее показывает:
- Windows:
ipconfig /allвыводит «DNS-серверы» для каждого сетевого адаптера, в том порядке, в котором их опрашивают. - macOS:
scutil --dnsсообщает текущую конфигурацию DNS, включая серверы имен, действующие для каждой сетевой службы. - Linux с systemd-resolved:
resolvectl statusпоказывает, согласно собственному руководству утилиты, «глобальные настройки DNS и настройки для каждого интерфейса, действующие в данный момент», то есть и резолвер по умолчанию, и то, чем его переопределило конкретное соединение вроде Wi-Fi или VPN.
VPN, корпоративная сеть или собственная настройка защищенного DNS в браузере могут подменить резолвер, никак не изменив то, что показывает команда ОС, так что если ответ команды не совпадает с ожидаемым, смотреть нужно именно сюда в первую очередь.
От того, какой резолвер отвечает на запрос, может зависеть сам результат, а не только скорость его получения: резолвер с устаревшим кэшем, региональным сбоем или собственной политикой фильтрации может вернуть не то, что напрямую ответили бы авторитативные серверы. Запустите поиск инструментом DNS-запроса, чтобы сравнить, а если резолвер отвечает медленно, а не по-разному, руководство как ускорить медленный DNS-запрос разбирает, как это измерить и исправить. Если он не отвечает вовсе, начните с DNS-сервер не отвечает. О поведении кэширования, лежащем в основе всего этого, смотрите что такое DNS-кэш. HostTracker следит за сайтами с 2004 года, сейчас наблюдает более 500 000 сайтов из более чем 300 точек проверки в 158 городах и может оповещать по email, SMS, голосовым звонком, в Slack, Telegram и другими способами в тот момент, когда проверка, ожидающая конкретный IP-адрес, видит другой.
Часто задаваемые вопросы
Мой роутер - это DNS-резолвер?
Часто лишь в ограниченном смысле. Многие домашние роутеры запускают небольшой DNS-форвардер: он отвечает из крошечного кэша, но для всего, чего в нем еще нет, просто передает запрос резолверу провайдера, а не выполняет полную рекурсию сам. RFC 2308 описывает эту роль как форвардер, «сервер имен, используемый для разрешения запросов вместо прямого обращения к цепочке авторитативных серверов имен».
Делает ли использование публичного резолвера браузинг быстрее?
Иногда да, иногда нет. Резолвер, близкий к вам, с прогретым кэшем отвечает за единицы миллисекунд независимо от того, кто им управляет. Главные переменные это то, насколько близко к вам ближайшая точка резолвера и насколько прогрет его кэш, а не название бренда.
В чем разница между рекурсией и форвардингом?
Резолвер, выполняющий рекурсию, сам опрашивает корень, домен верхнего уровня и авторитативные серверы, по одному переходу за раз, и кэширует итоговый результат. Резолвер, который вместо этого форвардит запрос, отправляет весь вопрос целиком другому резолверу и ждет от него полного ответа, отдавая работу и видимость того, что вы искали, в обмен на то, что уже есть в кэше у вышестоящего резолвера.
Все ли 13 корневых серверов работают на 13 машинах?
Нет. Существует тринадцать именованных идентичностей корневых серверов, но каждая из них обслуживается множеством физических машин по всему миру, так что запрос уходит на ближайшую копию, а не пересекает океан каждый раз.
Могут ли два устройства в одной сети использовать разные резолверы?
Да. Роутер по DHCP выдает резолвер по умолчанию, но любое устройство может переопределить его в собственных сетевых настройках, а VPN или защищенный DNS браузера может переопределить его еще раз поверх этого. Команды выше всегда показывают то, что использует конкретное устройство в данный момент, а не то, что задумывалось для сети.