DNS поверх HTTPS

Pause

DNS over HTTPS (DoH) — сетевой протокол, при котором DNS-запросы и ответы передаются внутри защищённых соединений HTTPS вместо открытого UDP-трафика. Стандартизирован IETF в октябре 2018 года документом RFC 8484. Протокол скрывает содержимое DNS-запросов от промежуточных узлов сети и препятствует их подмене, но вызывает споры из-за централизации разрешения имён и затруднений при сетевой фильтрации[1].

Общие сведения
Что важно знать
DNS over HTTPS
англ. DNS over HTTPS
Область использования Компьютерные сети, DNS, сетевая безопасность
Дата появления октябрь 2018 года (RFC 8484)
Место появления Инженерный совет Интернета, рабочая группа DOH
Автор понятия Пол Хоффман, Патрик Макманус

Определение

DoH определяет отображение каждой пары «DNS-запрос — DNS-ответ» на один обмен по протоколу HTTP, выполняемый поверх защищённого соединения. Клиент обращается к ресурсу резолвера, описанному шаблоном URI, и получает ответ в том же формате сообщений, что используется в классическом DNS[1].

Ключевое отличие от обычного DNS состоит не в изменении структуры самих сообщений, а в смене транспорта: вместо открытых датаграмм UDP на порте 53 применяется шифрованное соединение на стандартном для веба порте 443. Разработчики подчёркивают, что решение не является простым туннелированием DNS через HTTP: протокол задаёт форматы содержимого по умолчанию, но опирается на штатные механизмы HTTP — кэширование, перенаправления, проксирование, аутентификацию и сжатие[1].

При разработке рассматривались два основных сценария применения: защита DNS-обмена от вмешательства устройств на пути следования трафика, включая блокировку порта 53, и предоставление веб-приложениям доступа к данным DNS через существующие браузерные интерфейсы в рамках правил CORS[2]. Протокол ориентирован в первую очередь на взаимодействие клиента, например резолвера-заглушки операционной системы, с рекурсивным резолвером[1].

История стандарта

Причины появления

Классический DNS передаёт запросы и ответы без шифрования и без проверки подлинности, поэтому любой узел на пути — оператор связи, владелец точки доступа, оборудование фильтрации — способен прочитать список запрашиваемых доменов, а также подменить ответ, реализовав атаку посредника[3].

К моменту разработки протокола уже существовал DNS over TLS, стандартизированный в 2016 году, однако он использует выделенный порт, который в ряде сетей блокируется наравне с портом 53. DoH создавался как механизм, устойчивый к такому вмешательству и не требующий от сети ничего, кроме обычного доступа к HTTPS. Дополнительным обстоятельством была и остаётся слабая распространённость шифрованного DNS среди резолверов операторов связи, из-за чего пользователю приходится обращаться к сторонним публичным сервисам[2].

Стандартизация в IETF

Работа над протоколом велась в рабочей группе DOH Инженерного совета Интернета. В марте 2018 года Mozilla провела в сборках Firefox Nightly эксперимент с механизмом Trusted Recursive Resolver, направлявшим все DNS-запросы участников через DoH-сервер Cloudflare; проведение испытания в режиме отказа от участия вызвало возражения части сообщества[4]. В июне 2018 года поддержка DoH была добавлена в Firefox 62, но по умолчанию не активировалась[5].

В промежуточных редакциях проекта использовался тип содержимого application/dns-udpwireformat, в итоговом документе он был заменён на application/dns-message[1]. В октябре 2018 года документ был опубликован как RFC 8484 в категории Standards Track; авторами выступили Пол Хоффман из ICANN и Патрик Макманус из Mozilla[1].

В июне 2022 года в независимом потоке публикаций вышел экспериментальный RFC 9230, описывающий Oblivious DNS over HTTPS (ODoH). Расширение вводит два дополнительных участника обмена: прокси видит IP-адрес клиента, но не может прочитать зашифрованный запрос, а цель расшифровывает запрос, но видит лишь адрес прокси[6][7].

Принцип работы

Передача DNS-запросов через HTTPS

Клиент DoH кодирует один DNS-запрос в один HTTP-запрос, используя метод GET или POST; серверы обязаны реализовать оба метода. Адрес ресурса задаётся шаблоном URI, который клиент получает при настройке — вручную или автоматически, например через DHCP; распространённое значение пути — /dns-query. Один сервер может предлагать несколько шаблонов URI с различающимися свойствами, например с разными требованиями к аутентификации[1].

При использовании POST двоичное DNS-сообщение помещается в тело HTTP-запроса без дополнительного кодирования, а тип содержимого указывается в заголовке Content-Type. При использовании GET сообщение кодируется в base64url без символов заполнения и передаётся в переменной dns шаблона URI. Запросы методом POST компактнее, а запросы методом GET дружелюбнее к кэшам HTTP; ответы на POST-запросы в общем случае не кэшируются, и стандарт не рекомендует опираться на такое кэширование[1][8].

Форматы сообщений

Обязательный формат полезной нагрузки — одиночное сообщение DNS в двоичном «проводном» виде, определённом RFC 1035, под типом содержимого application/dns-message; максимальный размер сообщения ограничен 65 535 байтами. В отличие от DNS поверх TCP и DNS over TLS, двухбайтовый префикс длины не используется. Клиенты и серверы обязаны поддерживать этот тип, другие типы могут применяться по механизму согласования содержимого HTTP[1].

Для лучшей совместимости с кэшами HTTP клиентам рекомендуется указывать нулевой идентификатор в заголовке DNS-сообщения: соответствие запроса и ответа обеспечивает сам HTTP, а переменные идентификаторы приводят к раздельному кэшированию семантически одинаковых запросов[1].

Помимо стандартного двоичного интерфейса отдельные операторы предоставляют собственный JSON-интерфейс, удобный для скриптовых языков. В реализации Google Public DNS такой интерфейс доступен только методом GET[8].

Пример запроса методом POST в нотации HTTP/2[1]:

:method = POST
:scheme = https
:authority = dnsserver.example.net
:path = /dns-query
accept = application/dns-message
content-type = application/dns-message
content-length = 33

Взаимодействие клиента и резолвера

Соединение устанавливается по HTTPS, что обеспечивает проверку подлинности сервера по сертификату и шифрование канала. Минимальной рекомендуемой версией транспорта назван HTTP/2: для конкурентоспособной по сравнению с UDP работы нужны изменение порядка сообщений, параллелизм, приоритизация и сжатие заголовков, появившиеся именно в этой версии. Более ранние версии HTTP способны передать те же сообщения, но дают заметно худшую производительность[1].

Успешный код состояния HTTP из диапазона 2xx возвращается для любого корректного DNS-ответа, включая ответы с кодами ошибок DNS — например, SERVFAIL или NXDOMAIN. Неуспешные коды HTTP означают отсутствие ответа на исходный вопрос, и клиент обрабатывает их по обычным правилам HTTP: повторяет запрос к тому же серверу при ошибке авторизации либо обращается к другому серверу при неподдерживаемом типе содержимого[1].

Использование механизма server push ограничено: клиент не имеет права применять для разрешения имён данные, полученные с URI, который не входит в его конфигурацию, даже если такой URI обнаружен через server push или сервер прислал незапрошенный ответ, похожий на корректный[1].

Клиентом может выступать как приложение — прежде всего браузер, — так и системный сервис или локальный прокси, преобразующий обычные запросы на порт 53 в запросы DoH для всей операционной системы[9].

Преимущества

Конфиденциальность

Шифрование канала лишает промежуточные узлы возможности вести журнал запрашиваемых доменных имён: ни оператор связи, ни владелец точки доступа, ни атакующий в той же сети не видят, какие домены запрашивает пользователь[3].

Защита остаётся частичной. Сам стандарт указывает, что каждый уровень стека — IP, TCP, TLS, HTTP — несёт собственные механизмы корреляции запросов: адрес клиента, cookie сессии TLS и TCP Fast Open, HTTP cookie, заголовки User-Agent и Accept-Language. По этой причине принимать HTTP cookie клиентам DoH не рекомендуется, если это не требуется явным сценарием использования[1]. Выбранный резолвер по-прежнему видит и адрес клиента, и содержимое запросов; эту проблему решает расширение ODoH, которое поддерживает, в частности, резолвер Cloudflare в роли цели по адресу odoh.cloudflare-dns.com[7].

Защита от подмены и перехвата

Проверка серверного сертификата и целостность защищённого соединения препятствуют подмене и модификации DNS-трафика на пути, а также снимают характерные для UDP-версии DNS сценарии атак с усилением трафика[1][10].

При этом HTTPS защищает лишь участок между клиентом и резолвером и не даёт той целостности данных DNS, которую обеспечивает DNSSEC. Стандарт прямо называет DoH и DNSSEC независимыми и полностью совместимыми протоколами, решающими разные задачи: клиент либо проводит проверку DNSSEC самостоятельно, либо доверяет её резолверу и опирается на бит AD в полученном сообщении[1].

Сетевые особенности

DoH использует тот же порт 443, что и обычный веб-трафик, поэтому его запросы маскируются среди прочих соединений HTTPS и с точки зрения администратора сети выглядят как обращения к сайтам и веб-приложениям[10][11]. Мультиплексирование нескольких обменов в одном соединении и кэширование GET-запросов позволяют сократить задержки при разрешении множества имён[1][8].

Ограничения и критика

Централизация DNS-разрешения

Массовое внедрение DoH на уровне браузеров переносит разрешение имён от резолвера оператора связи к небольшому числу крупных провайдеров, задаваемых по умолчанию. Критики указывают, что это концентрирует данные о просмотре у нескольких компаний, а не устраняет наблюдение как таковое; включение DoH по умолчанию в Firefox с резолвером Cloudflare обсуждалось именно в этом ключе[12][13].

Сетевое администрирование и фильтрация

Стандарт прямо отмечает, что системы фильтрации и инспекции, рассчитанные на незащищённый транспорт DNS, в среде DoH работать не будут из-за конфиденциальности и целостности, обеспечиваемых TLS[1]. На практике протокол обходит настройки DNS, заданные в сети или на устройстве, из-за чего перестают действовать родительский контроль, корпоративные политики доступа и предписанная законом блокировка ресурсов.

Заблокировать сам протокол также непросто. DNS over TLS отсекается по номеру порта, тогда как DoH приходится фильтровать по IP-адресам, значению расширения SNI в TLS и сочетанию с номером порта, а перечни известных DoH-резолверов неполны, что не позволяет администратору перекрыть все такие соединения[14].

В 2019 году Ассоциация интернет-провайдеров Великобритании (ISPA) включила Mozilla в число претендентов на антипремию «Интернет-злодей года» за намерение включить DoH по умолчанию, полагая, что это подорвёт национальные механизмы фильтрации. После волны критики ассоциация отозвала как саму номинацию, так и категорию целиком, сохранив при этом возражения против протокола; Mozilla заявила, что не будет включать DoH по умолчанию в Великобритании[15].

Производительность и диагностика

Установление защищённого соединения и обработка HTTP добавляют накладные расходы по сравнению с одиночной UDP-датаграммой. Стандарт описывает и специфические эксплуатационные сложности: возможен взаимоблокирующий сценарий, когда проверка отзыва сертификата по OCSP или загрузка списка отзыва сама требует разрешения имени, а также задача первоначальной загрузки, при которой клиент не может разрешить имя своего DoH-сервера через этот же сервер. Кроме того, DoH не даёт гарантий порядка обработки разных запросов и не может служить транспортом для протоколов, требующих строгой упорядоченности[1].

Выбор резолвера влияет на результат разрешения: при локальных политиках или расщеплённой конфигурации DNS разные серверы дают разные ответы на один вопрос, что может нарушить, например, работу трансляции адресов DNS64[1]. Для администраторов усложняется диагностика, поскольку DNS-обмен более не выделяется в отдельный поток трафика.

Поддержка и внедрение

25 февраля 2020 года Mozilla начала поэтапное включение DoH по умолчанию для пользователей Firefox в США: по умолчанию запросы направляются в Cloudflare, доступен также выбор NextDNS или произвольного провайдера, а за пределами США функция включается вручную. Функция отключается при обнаружении средств родительского контроля и в корпоративных конфигурациях[16]. В текущих версиях браузера доступны несколько уровней защиты, включая режим с обязательным использованием шифрованного DNS и предупреждением при невозможности его применить[17].

Браузеры на основе Chromium — Chrome, Microsoft Edge, Brave — предоставляют настройку «Использовать безопасный DNS» с выбором предустановленного провайдера или собственного адреса конечной точки[18].

На стороне операционных систем DNS-клиент с поддержкой DoH доступен в Windows 11 и Windows Server 2022 и более новых выпусках: в параметрах сетевого адаптера задаётся адрес сервера из списка известных и режим шифрования, вплоть до передачи запросов только в зашифрованном виде[19]. В июне 2026 года Microsoft объявила об общедоступности серверной поддержки DoH в Windows DNS Server на Windows Server 2025 для трафика между клиентом и сервером[20].

Поддержка реализована также в сетевом оборудовании и прикладном ПО: в прошивке KeeneticOS начиная с версии 3.1, в OpenWrt через связку dnsmasq и https-dns-proxy, а также в локальном прокси dnscrypt-proxy[21][22][9].

Сравнение с альтернативами

DNS over TLS

DNS over TLS (DoT), стандартизированный в 2016 году документом RFC 7858, также шифрует DNS-обмен и не позволяет подделать или изменить трафик, но передаёт сообщения непосредственно поверх TLS на выделенном порте 853, без слоя HTTP. Из-за отдельного порта такой трафик легко выделяется и фильтруется, зато он прозрачнее для сетевого администрирования и мониторинга[10][14]. Форматы полезной нагрузки различаются: в DoT сообщение предваряется двумя байтами длины, которых в DoH нет[1].

DNSCrypt

DNSCrypt шифрует и аутентифицирует обмен между клиентом и резолвером, предотвращая подмену ответов, однако не проходил процедуру стандартизации IETF и не описан отдельным RFC. Протокол распространён главным образом через клиент dnscrypt-proxy, который умеет работать и как клиент DoH; ряд публичных операторов, включая AdGuard DNS и Quad9, предоставляет конечные точки одновременно по DNSCrypt, DoH и DoT[9][23].

Классический DNS

Классический DNS передаёт запросы открытым текстом по UDP или TCP на порте 53. Он остаётся наиболее быстрым по накладным расходам и полностью прозрачным для сетевых средств управления, но уязвим и для пассивного наблюдения, и для активного вмешательства устройств на пути следования трафика[1][2].

Примечания

  1. ↑ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 Hoffman, P.; McManus, P. RFC 8484. DNS Queries over HTTPS (DoH) (англ.). RFC Editor (октябрь 2018). Дата обращения: 3 сентября 2026.
  2. ↑ 1 2 3 DNS Encryption Explained (англ.). The Cloudflare Blog. Дата обращения: 3 сентября 2026.
  3. ↑ 1 2 Set up Cloudflare 1.1.1.1 resolver (англ.). Cloudflare Docs (6 мая 2026). Дата обращения: 3 сентября 2026.
  4. ↑ Mozilla’s opt-out Firefox DNS privacy test sparks, er, privacy outcry (англ.), The Register (20 March 2018). Дата обращения: 3 сентября 2026.
  5. ↑ Improving DNS Privacy in Firefox (англ.). Firefox Nightly News (1 июня 2018). Дата обращения: 3 сентября 2026.
  6. ↑ Kinnear, E.; McManus, P.; Pauly, T.; Verma, T.; Wood, C. A. RFC 9230. Oblivious DNS over HTTPS (англ.). RFC Editor (июнь 2022). Дата обращения: 3 сентября 2026.
  7. ↑ 1 2 Oblivious DNS over HTTPS (англ.). Cloudflare Docs (6 мая 2026). Дата обращения: 3 сентября 2026.
  8. ↑ 1 2 3 DNS-over-HTTPS (DoH) (англ.). Google Public DNS. Дата обращения: 3 сентября 2026.
  9. ↑ 1 2 3 DNS over HTTPS (англ.). curl wiki. Дата обращения: 3 сентября 2026.
  10. ↑ 1 2 3 DNS over TLS vs. DNS over HTTPS (англ.). Cloudflare Learning Center. Дата обращения: 3 сентября 2026.
  11. ↑ DNS over HTTPS (англ.). Cloudflare Docs (5 мая 2026). Дата обращения: 3 сентября 2026.
  12. ↑ Headache for UK ISPs as Firefox Adopt DNS Over HTTPS by Default (англ.), ISPreview (13 September 2019). Дата обращения: 3 сентября 2026.
  13. ↑ Firefox now defaults to DNS-over-HTTPS for US netizens (англ.), The Register (25 February 2020). Дата обращения: 3 сентября 2026.
  14. ↑ 1 2 The prevalence of DNS over HTTPS (англ.). APNIC Blog (13 сентября 2021). Дата обращения: 3 сентября 2026.
  15. ↑ British ISPs fight to make the web less secure (англ.), IT Pro (14 September 2019). Дата обращения: 3 сентября 2026.
  16. ↑ Firefox continues push to bring DNS over HTTPS by default for US users (англ.). Mozilla (25 февраля 2020). Дата обращения: 3 сентября 2026.
  17. ↑ Configure DNS over HTTPS protection levels in Firefox (англ.). Mozilla (17 июня 2026). Дата обращения: 3 сентября 2026.
  18. ↑ Use secure DNS: How to enable DNS-over-HTTPS in Chrome, Brave, Edge, Firefox and other browsers (англ.), gHacks (23 October 2021). Дата обращения: 3 сентября 2026.
  19. ↑ Безопасный DNS-клиент по протоколу HTTPS (DoH). Microsoft Learn (16 августа 2025). Дата обращения: 3 сентября 2026.
  20. ↑ DoH is now generally available on Windows DNS Server (англ.). Microsoft Tech Community (11 июня 2026). Дата обращения: 3 сентября 2026.
  21. ↑ Информация о релизе KeeneticOS 3.1. Keenetic (22 января 2020). Дата обращения: 3 сентября 2026.
  22. ↑ DNS over HTTPS with Dnsmasq and https-dns-proxy (англ.). OpenWrt. Дата обращения: 3 сентября 2026.
  23. ↑ Ошибка в сносках?: Неверный тег <ref>; для сносок adguard_kb не указан текст
Pause