DNS через HTTPSDNS через HTTPS

T.me Такие компании, как Microsoft, Google и Mozilla, продвигают DNS через HTTPS (DoH). Эта технология будет шифровать поисковые запросы DNS, улучшая конфиденциальность и безопасность в Интернете. Давайте познакомимся поближе с технологией DNS Over HTTPS, узнаем, для чего она нужна и как её включить. Вполне возможно, что вы уже пользуетесь DNS через HTTPS даже не зная этого!

Что такое DNS через HTTPS (DoH)?

Интернет стремится, чтобы по умолчанию шифрование присутствовало везде. На данный момент большинство веб-сайтов, к которым вы обращаетесь, вероятно, используют шифрование HTTPS. Современные веб-браузеры, такие как Chrome, теперь помечают любые сайты, использующие стандартный HTTP, как «небезопасные». HTTP/3, новая версия протокола HTTP, имеет встроенное шифрование.

Это шифрование гарантирует, что никто не сможет вмешаться в работу веб-страницы, пока вы её просматриваете, или следить за тем, что вы делаете в Интернете. Например, если вы подключаетесь к Wikipedia.org, оператор сети — будь то общедоступная точка доступа Wi-Fi компании или ваш Интернет-провайдер — может видеть только то, что вы подключены к wikipedia.org. Они не видят, какую статью вы читаете, и не могут изменять статью Википедии пока она идёт до вашего компьютера.

Но в стремлении к шифрованию DNS остался позади. Система доменных имён делает так, что мы можем подключаться к веб-сайтам через их доменные имена, а не с помощью числовых IP-адресов. Вы вводите доменное имя, например google.com, и ваша система свяжется с DNS-сервером, который указан в настройках системы, чтобы получить IP-адрес, связанный с google.com. Затем ваш компьютер или телефон подключится к этому IP-адресу.

До сих пор эти запросы DNS не были зашифрованы. Когда вы подключаетесь к веб-сайту, ваша система отправляет запрос о том, что вы ищете IP-адрес, связанный с определённым доменом. Любой посредник передачи данных — возможно, ваш интернет-провайдер, но, возможно, также просто общедоступная точка доступа Wi-Fi, записывающая трафик, — могут регистрировать, к каким доменам вы подключаетесь. Из-за этого возможны атаки и сбор информации

DNS через HTTPS делает этот надзор невозможным. При использовании DNS через HTTPS ваша система установит безопасное зашифрованное соединение с вашим DNS-сервером и будет передавать запрос и ответ через это соединение. Все, кто находится между ними, не смогут увидеть, какие доменные имена вы ищете, или вмешаться в присланный ответ.

Сегодня большинство людей используют DNS-серверы, предоставленные их интернет-провайдером. Однако существует множество сторонних DNS-серверов, таких как Google Public DNS, Cloudflare и OpenDNS. Эти сторонние поставщики одними из первых включили поддержку DNS через HTTPS на стороне сервера. Чтобы использовать DNS через HTTPS, вам потребуется как DNS-сервер, так и клиент (например, веб-браузер или операционная система), который его поддерживает.

Как соотносятся DNS поверх HTTPS, DNSSEC, DNSCrypt, DNS поверх TLS

Имеется несколько протоколов, обеспечивающих шифрование DNS запросов. В настоящее время на клиентском программном обеспечении лучше всего поддерживается DNS поверх HTTPS (DoH) — именно ему и посвящена данная статья. Чтобы ориентироваться в терминах, рассмотрим краткие характеристики каждого из протоколов.

DNS поверх HTTPS (DoH) — протокол для выполнения разрешения DNS по протоколу HTTPS. Целью этого метода является повышение конфиденциальности и безопасности пользователей путём предотвращения перехвата и манипулирования данными DNS с помощью атак типа «Атака посредника».

DNS поверх TLS (DoT) — предлагаемый стандартный протокол для выполнения разрешения удалённой системы DNS с использованием TLS. Целью этого метода является повышение конфиденциальности и безопасности пользователей путём предотвращения перехвата и манипулирования данными DNS с помощью атак типа «Атака посредника».

DNSSEC (англ. Domain Name System Security Extensions) — набор расширений IETF протокола DNS, позволяющих минимизировать атаки, связанные с подменой DNS-адреса при разрешении доменных имён. Он направлен на предоставление DNS-клиентам (англ. термин resolver) аутентичных ответов на DNS-запросы (или аутентичную информацию о факте отсутствия данных) и обеспечение их целостности. При этом используется криптография с открытым ключом.


DNSCrypt — это сетевой протокол, который аутентифицирует и шифрует трафик системы доменных имён (DNS) между компьютером пользователя и рекурсивными серверами имён. Первоначально он был разработан Фрэнком Денисом и Йеченг Фу.

Хотя существует несколько реализаций клиента и сервера, протокол никогда не предлагался Инженерной группе Интернета (IETF) в виде RFC.

DNSCrypt обёртывает неизмененный DNS-трафик между клиентом и преобразователем DNS в криптографической конструкции для обнаружения подделки. Хотя он не обеспечивает сквозную безопасность, он защищает локальную сеть от атак типа «злоумышленник в середине».

Он также снижает опасность атак с усилением на основе UDP, требуя, чтобы вопрос был не меньше размера соответствующего ответа. Таким образом, DNSCrypt помогает предотвратить атаки с усилением DNS.

DNSCurve — это предлагаемый безопасный протокол для системы доменных имён (DNS), разработанный Дэниелом Дж. Бернстайном.

Способы включения DNS через HTTPS (DoH)

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

Включение безопасного DNS на уровне веб-браузеров выполняется очень просто, достаточно поставить галочку в настройках. Более того, в Google Chrome эта настройка уже включена по умолчанию. Недостаток этого метода в том, что все другие приложения, использующие Интернет-подключение, не смогут использовать DNS через HTTPS. Такими приложениями могут быть программы для скачивания файлов, мессенджеры, службы обновления программ и операционной системы и так далее.

Включение DoH на уровне системы делает так, что все программы будут делать DNS запросы исключительно по зашифрованному каналу. Но это требует установки программы — кэширующего DNS сервера. На самом деле, установка очень простая и программа будет потреблять минимум ресурсов. При этом собственный DNS будет кэшировать полученные данные благодаря чему немного увеличит скорость работы сети.

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

Публичные сервера имён с поддержкой DNS через HTTPS

Чтобы использовать DNS через HTTPS сервер имён должен поддерживать эту технологию. В настоящее время публичные самые популярные DNS серверы её поддерживают. Их адреса для DoH или обычных DNS запросов одинаковые.

ПровайдерIP-адресаБлокированиеОсобенности
Cloudflare1.1.1.1
1.0.0.1
2606:4700:4700::1111
2606:4700:4700::1001
нетКонечная точка DNS поверх HTTPS.
Google Public DNS8.8.8.8
8.8.4.4
2001:4860:4860::8888
2001:4860:4860::8844
нетКонечная точка DNS поверх HTTPS.
CleanBrowsing185.228.168.168
185.228.169.168
2a0d:2a00:1::
2a0d:2a00:2::
Взрослый контент.Конечная точка DNS поверх HTTPS.
Adguard176.103.130.130
176.103.130.131
2a00:5a60::ad1:0ff
2a00:5a60::ad2:0ff
Рекламный контент.Конечная точка DNS поверх HTTPS.
Quad99.9.9.9
149.112.112.112
2620:fe::fe
2620:fe::9
Вредоносный контент. 
OpenDNS208.67.222.222
208.67.220.220
2620:119:35::35
2620:119:53::53
нет 

Источник.

Независимо от того, включаете вы DoH в браузерах или для всей системы, вы можете использовать любой DNS сервер из этого списка. Лично я предпочитаю DNS сервера от Google.

Как включить DNS через HTTPS (DoH) в веб-браузерах

Google Chrome

В Google Chrome в Windows уже включена опция DNS через HTTPS. Вы можете её проверить перейдя в «Настройки» → «Конфиденциальность и безопасность» → «Безопасность» → «Дополнительные» → «Использовать безопасный DNS сервер». Чтобы быстро найти эту настройку, введите в адресную строку «chrome://settings/security/» и пролистните в самый низ.

Сопротивление нарастает

Вы можете выбрать из списка любой DNS сервер с поддержкой DoH или указать свой собственный.


DNS через HTTPS

На момент написания, в Google Chrome в Linux данная опция недоступна.

Firefox

Перейдите в Настройки → Основные. Пролистните в самый низ, чтобы найти кнопку «Параметры сети, Настроить».

DNS через HTTPS

Поставьте галочку «Включить DNS через HTTPS» и выберите провайдера из списка или введите свой IP адрес:

бомбят Киев

Opera

Перейдите в настройки (шестерёнка внизу левого сайдбара или кнопка «Простые настройки» → «Открыть все настройки браузера»).

Затем перейдите в «Дополнительно» → «Система».

DNS через HTTPS

Включите галочку «Использовать DNS поверх HTTPS вместо системных настроек DNS» и выберите желаемый DNS сервер.

DNS через HTTPS

Microsoft Edge

На момент написания предустановленный по умолчанию Internet Explorer (Microsoft Edge) вовсе не знает про DNS через HTTPS. Если скачать последнюю версию Microsoft Edge, то там эту настройку можно включить с помощью флага.

Введите в адресную строку edge://flags#dns-over-https

Война

Включите экспериментальный флаг и перезапустите веб-браузер.

Эммм… вроде как нужно бы ещё ввести настройки DNS сервера, но я не нашёл, где это сделать в Microsoft Edge. Да и кому дело до Microsoft Edge — кто им вообще пользуется?!

Как включить DNS через HTTPS (DoH) для всех приложений

Программы для DNS через HTTPS (DoH)

dnscrypt-proxy

dnscrypt-proxy — это гибкий DNS-прокси с поддержкой современных зашифрованных DNS-протоколов, таких как DNSCrypt v2, DNS-over-HTTPS и Anonymized DNSCrypt.

У программы открыт исходный код, также программа доступна в виде предварительно скомпилированных двоичных файлов для большинства операционных систем и архитектур.

Характеристики:

  • Шифрование и аутентификация DNS-трафика. Поддерживает DNS-over-HTTPS (DoH) с использованием TLS 1.3, DNSCrypt и анонимного DNS
  • IP-адреса клиентов могут быть скрыты с помощью Tor, SOCKS-прокси или анонимных DNS-ретрансляторов
  • Мониторинг DNS-запросов с отдельными файлами журналов для обычных и подозрительных запросов
  • Фильтрация: блокируйте рекламу, вредоносное ПО и другой нежелательный контент. Совместим со всеми службами DNS
  • Фильтрация по времени с гибким недельным расписанием
  • Прозрачное перенаправление определённых доменов на определённые резолверы
  • Кэширование DNS для уменьшения задержки и повышения конфиденциальности
  • Локальная блокировка IPv6 для уменьшения задержки в сетях только с IPv4
  • Балансировка нагрузки: выберите набор резолверов, dnscrypt-proxy будет автоматически измерять и отслеживать их скорость, а также балансировать трафик между самыми быстрыми из доступных.
  • Маскировка: как файл HOSTS на стероидах, который может возвращать предварительно настроенные адреса для определённых имён или разрешать и возвращать IP-адреса других имён. Это можно использовать для локальной разработки, а также для обеспечения безопасных результатов поиска в Google, Yahoo, DuckDuckGo и Bing.
  • Автоматическое обновление списков резолверов в фоновом режиме
  • Может заставить исходящие соединения использовать TCP
  • Совместим с DNSSEC
  • Включает локальный сервер DoH для поддержки ECHO (ESNI)

DNS-over-HTTPS

DNS-over-HTTPS — это клиентское и серверное программное обеспечение для запроса DNS через HTTPS, используя протоколы Google DNS-over-HTTPS и IETF DNS-over-HTTPS (RFC 8484).

Как включить DNS через HTTPS (DoH) на уровне операционной системы в Windows

Как включить DNS через HTTPS (DoH) на уровне операционной системы в Windows (в настройках ОС)

Данный метод удобен тем, что не нужно устанавливать дополнительное программное обеспечение. Но недостатком данного метода является то, что в качестве DNS сервера вы можете использовать только тот, который предусмотрен ОС Windows — всего около 5 провайдеров. Ещё одно ограничение в том, что данный метод работает только начиная с Windows 11.

Сначала выберите, какой DNS с поддержкой DoH вы хотите использовать

Начиная с выпуска Windows 11, DNS через HTTPS в Windows 11 работает только с определенным жёстко запрограммированным списком бесплатных служб DNS (вы можете увидеть список самостоятельно, запустив

1netsh dns show encryption

в окне терминала).

DNS через HTTPS

Вот текущий список поддерживаемых адресов серверов DNS IPv4 по состоянию на октябрь 2022 года:

  • Основной DNS Google: 8.8.8.8
  • Дополнительный Google DNS: 8.8.4.4
  • Основной DNS Cloudflare: 1.1.1.1
  • Вторичный DNS Cloudflare: 1.0.0.1
  • Первичный DNS Quad9: 9.9.9.9
  • Вторичный DNS Quad9: 149.112.112.112

Для IPv6 список поддерживаемых адресов серверов DNS:

  • Основной DNS Google: 2001:4860:4860::8888
  • Вторичный DNS Google: 2001:4860:4860::8844
  • Основной DNS-сервер Cloudflare: 2606:4700:4700::1111
  • Дополнительный DNS Cloudflare: 2606:4700:4700::1001
  • Первичный DNS Quad9: 2620:fe::fe
  • Вторичный DNS Quad9: 2620:fe::fe:9

Когда придёт время включить DoH в разделе ниже, вам нужно будет выбрать две пары этих DNS-серверов — первичный и вторичный для IPv4 и IPv6 — для использования с ПК с Windows 11. В качестве бонуса их использование, скорее всего, ускорит работу в Интернете.

Затем включите DNS через HTTPS в Windows 11

Чтобы начать настройку DNS через HTTPS, откройте приложение «Настройки», нажав Win+i на клавиатуре. Либо можно нажать правой кнопкой мыши кнопку «Пуск» и в появившемся специальном меню выбрать пункт «Параметры».

рассказ Крымчанки

В настройках нажмите «Сеть и Интернет» на боковой панели.

Для «Wi-Fi» и «Ethernet» процедура настройки DNS поверх HTTPS чуть различается.

Настройка DNS поверх HTTPS для Ethernet (проводное подключение)

В настройках сети и Интернета щёлкните имя вашего основного подключения к Интернету в списке, например «Ethernet».

DNS через HTTPS

На странице свойств Ethernet найдите параметр «Назначение DNS-сервера» и нажмите кнопку «Изменить» рядом с ним.

DNS через HTTPS

В появившемся окне в раскрывающемся меню выберите «Вручную» настройки DNS.

DNS через HTTPS

Затем переведите переключатель «IPv4» в положение «Вкл.».

DNS через HTTPS

В разделе IPv4 введите адрес основного DNS-сервера, который вы выбрали в разделе выше, в поле «Предпочтительный DNS» (например, «8.8.8.8»).

смертоносный сентябрь

Станет активным выпадающий список «Предпочтительное шифрование DNS». В этом списке выберите «Только зашифрованные (DNS поверх HTTPS)».

DNS через HTTPS

Аналогичным образом введите адрес вторичного DNS-сервера в поле «Дополнительный DNS» (например, «8.8.4.4»). Станет активным выпадающий список «Предпочтительное шифрование DNS». В этом списке выберите «Только зашифрованные (DNS поверх HTTPS)».

DNS через HTTPS

Если ваш Интернет-провайдер поддерживает IPv6, то повторите этот процесс с IPv6. Если ваш Интернет-провайдер НЕ поддерживает IPv6, то вам НЕ НУЖНО включать IPv6 DNS серверы. Если вы не уверены, то лучше не включайте IPv6 DNS. 

Переведите переключатель IPv6 в положение «Вкл.», а затем скопируйте основной IPv6-адрес из раздела выше и вставьте его в поле «Предпочитаемый DNS». Затем скопируйте соответствующий вторичный IPv6-адрес и вставьте его в поле «Дополнительный DNS».

DNS через HTTPS

После этого установите для обоих параметров «Шифрование DNS» значение «Только зашифрованные (DNS поверх HTTPS)».

DNS через HTTPS

Наконец, нажмите «Сохранить».

Вернувшись на страницу свойств оборудования Ethernet, вы увидите список своих DNS-серверов с пометкой «(Зашифровано)» рядом с каждым из них.

DNS через HTTPS

Настройка DNS поверх HTTPS для Wi-Fi (беспроводное подключение)

В настройках Сети и Интернета щёлкните имя вашего основного подключения к Интернету в списке, например «Wi-Fi».

DNS через HTTPS

На странице свойств Wi-Fi перейдите в раздел «Свойства оборудования».

DNS через HTTPS

На следующем окне найдите параметр «Назначение DNS-сервера» и нажмите кнопку «Изменить» рядом с ним.

China prints a trillion yuan in a week

В появившемся окне в раскрывающемся меню выберите «Вручную» настройки DNS. Затем переведите переключатель «IPv4» в положение «Вкл.».

В разделе IPv4 введите адрес основного DNS-сервера, который вы выбрали в разделе выше, в поле «Предпочтительный DNS» (например, «8.8.8.8»).

Станет активным выпадающий список «Предпочтительное шифрование DNS». В этом списке выберите «Только зашифрованные (DNS поверх HTTPS)».

Подсказка: Если вы не видите параметры шифрования DNS, значит, вы редактируете настройки DNS для конкретного подключения Wi-Fi, а не для беспроводного адаптера в целом. Убедитесь, что вы выбрали тип подключения в «Настройки» → «Сеть и Интернет», затем сначала нажмите «Свойства оборудования».


Аналогичным образом введите адрес вторичного DNS-сервера в поле «Дополнительный DNS» (например, «8.8.4.4»).

DNS через HTTPS

Если ваш Интернет-провайдер поддерживает IPv6, то повторите этот процесс с IPv6. Если ваш Интернет-провайдер НЕ поддерживает IPv6, то вам НЕ НУЖНО включать IPv6 DNS серверы. Если вы не уверены, то лучше не включайте IPv6 DNS.

Переведите переключатель IPv6 в положение «Вкл.», а затем скопируйте основной IPv6-адрес из раздела выше и вставьте его в поле «Предпочитаемый DNS». Затем скопируйте соответствующий вторичный IPv6-адрес и вставьте его в поле «Дополнительный DNS».

После этого установите для обоих параметров «Шифрование DNS» значение «Только шифрование (DNS через HTTPS)».

Наконец, нажмите «Сохранить».

Вернувшись на страницу свойств оборудования Wi-Fi, вы увидите список своих DNS-серверов с пометкой «(Зашифровано)» рядом с каждым из них.

DNS через HTTPS

Это всё, что вам нужно сделать. Закройте приложение «Настройки», и вы готовы к работе. Отныне все ваши DNS-запросы будут конфиденциальными и безопасными.

Примечание. Если после изменения этих настроек у вас возникли проблемы с сетью, убедитесь, что вы правильно ввели IP-адреса. Ошибочный IP-адрес может привести к недоступности DNS-серверов. Если адреса введены правильно, попробуйте отключить переключатель «IPv6» в списке DNS-серверов. Если вы настраиваете DNS-серверы IPv6 на компьютере без подключения к IPv6, это может вызвать проблемы с подключением.


Как включить DNS через HTTPS (DoH) на уровне операционной системы в Windows (с помощью dnscrypt-proxy)

Для операционной системы Windows мы можем использовать только dnscrypt-proxy, поскольку эта программа является кроссплатформенной.

Чтобы скачать dnscrypt-proxy для Windows, перейдите на официальную страницу https://github.com/DNSCrypt/dnscrypt-proxy/releases и скачайте файл вида dnscrypt-proxy-win64-*.zip

Распакуйте скаченный архив — в нём папка «win64». Переименуйте эту папку в «dnscrypt-proxy» и переместите в корень диска C:\. Таким образом, папка и все файлы расположены по пути C:\dnscrypt-proxy\.

Откройте командную строку с правами администратора. Для этого нажмите Win+x и выберите «PowerShell (администратор)».

Выполните там команды:

123cdC:\dnscrypt-proxy\cpexample-dnscrypt-proxy.toml dnscrypt-proxy.toml./dnscrypt-proxy

При запуске nscrypt-proxy загружает списки DNS серверов с шифрованием, тестирует доступность и скорость отклика DNS серверов с поддержкой шифрования.

DNS через HTTPS

Если всё запустилось нормально, то продолжайте, здесь же несколько подсказок для тех, у кого возникла ошибка:

  • dnscrypt-proxy.toml: no such file or directory (dnscrypt-proxy.toml — нет такого файла или директории): скопируйте файл с образцом конфигурации и назовите его dnscrypt-proxy.toml как это написано выше.
  • listen udp 127.0.0.1:53: bind: permission denied (отклонён запрос на прослушивание порта): вы используете PowerShell без прав администратора, об этом также сказано выше.
  • listen udp 127.0.0.1:53: bind: address already in use (порт 53 уже используется): какая-то программа уже прослушивает DNS порт. Может быть какая-то другая программа, а может быть предыдущий экземпляр dnscrypt-proxy, который вы не остановили перед запуском нового.

Нет ошибок? Отлично!

Пока не закрывайте терминал. В дальнейшем мы установим dnscrypt-proxy как системную службу и нам не нужно будет каждый раз запускать её в командной строке. Но пока мы этого не сделали, dnscrypt-proxy будет работать только пока не закрыто окно консоли.

Теперь мы поменяем системные настройки DNS.

В Windows 11

В Windows 10

Кликните правой кнопкой мыши по сетевому адаптеру, который используется для выхода в Интернет, и выберите «Свойства».

прогнозы

Найдите и дважды кликните пункт IP версии 4 (TCP/IPv4).

DNS через HTTPS

В открывшемся окне поставьте переключатель на «Использовать следующие адреса DNS-серверов» и впишите 127.0.0.1:

DNS через HTTPS

В качестве резервного DNS сервера впишите «8.8.8.8».

Если ваш Интернет провайдер поддерживает IPv6, то повторите эту же процедуру для «IP версии 6 (TCP/IPv6)», но в качестве IPv6 адресов используйте «::1» и «2001:4860:4860::8888».

Откройте ещё одно окно командной строки и выполните там:

1C:\dnscrypt-proxy\dnscrypt-proxy -resolve hackware.ru
DNS через HTTPS

Также в командной строке проверим IP адрес домена с помощью утилиты nslookup:

1nslookuphackware.ru
DNS через HTTPS

Обратите внимание на строку:

1Address:  127.0.0.1

Она означает, что IP адресом DNS сервера является 127.0.0.1.

Проверьте работу операционной системы — откройте веб сайты, загрузите файлы, используйте свою систему обычным образом, чтобы проверить, что нет никаких проблем с DNS.

Если что-то пошло не так и вы хотите вернуть всё назад, то откройте настройки сетевого адаптера, как это показано чуть выше и переключитесь на автоматическое получение адреса DNS-сервера.

Если всё нормально, то нажмите Ctrl+c в первом терминале, где запущен dnscrypt-proxy чтобы остановить DNS прокси.

Теперь зарегистрируйте его как системную службу (эту команду нужно выполнить в окне с повышенными привилегиями, то есть с правами администратора):

1C:\dnscrypt-proxy\dnscrypt-proxy -service install

Если не появились ошибки, то это прекрасно! Значит ваша версия Windows совместима со встроенным установощиком.

Теперь, когда служба установлена, запустите её:

1C:\dnscrypt-proxy\dnscrypt-proxy -service start

Всё готово! При перезагрузке компьютера, данная служба будет запускаться автоматически.

Если вам нужно остановить службу, то выполните:

1C:\dnscrypt-proxy\dnscrypt-proxy -service stop

Чтобы перезапустить запущенную службу (например, после изменения конфигурационного файла) выполните:

1C:\dnscrypt-proxy\dnscrypt-proxy -service restart

Для удаления службы выполните:

1C:\dnscrypt-proxy\dnscrypt-proxy -service uninstall

Для проверки DNS сервера используйте команду:

1C:\dnscrypt-proxy\dnscrypt-proxy -resolve example.com

Чтобы полностью удалить dnscrypt-proxy сервер выполните:

1C:\dnscrypt-proxy\dnscrypt-proxy -service uninstall

А затем удалите папку C:\dnscrypt-proxy — всё готово!

Как обновить nscrypt-proxy

Чтобы установить новую версию, остановите службу, замените исполнимый файл (dnscrypt-proxy) на новую версию и запустите службу снова.

У dnscrypt-proxy много опций, но они будут рассмотрены в следующем разделе.

Как включить DNS через HTTPS (DoH) на уровне операционной системы в Linux

Установка dnscrypt-proxy в Kali Linux

Данная инструкция с минимальными поправками должна также работать и в Linux Mint, Ubuntu и аналогичных. Если у вас данный дистрибутив, то попробуйте этот раздел и если что-то не получится, то пишите ваши ошибки в комментариях.

Установите пакет dnscrypt-proxy:

1sudoapt installdnscrypt-proxy

Проверьте, чтобы порт 53 не был занят:

1ss -lp 'sport = :domain'

В выводе должна быть всего одна строка, а именно шапка:

1Netid State   Recv-Q  Send-Q   Local Address:Port     Peer Address:Port Process

Если вывод содержит более чем одну первую строку с названием столбцов, нужно отключить сервис, который использует порт 53. Одним из частых виновников является systemd-resolved.service (NetworkManager), но другие сетевые менеджеры могут иметь аналогичные компоненты. В общем, какая бы там ни была служба (возможно, вы уже устанавливали другой кэширующий DNS сервер), её нужно остановить и убрать из автозагрузки. Если нет процессов, прослушивающих порт 53, то можно продолжать.

Выполните проверку, чтобы убедиться, что dnscrypt-proxy работает:

1/usr/sbin/dnscrypt-proxy-resolve example.com

Запустите службу dnscrypt-proxy и проверьте её статус:

12sudosystemctl start dnscrypt-proxy.servicesystemctl status dnscrypt-proxy.service

Если всё в порядке, добавьте службу в автозагрузку:

1sudosystemctl enablednscrypt-proxy.service

Откройте файл /etc/NetworkManager/NetworkManager.conf:

1sudogedit /etc/NetworkManager/NetworkManager.conf

и в раздел

1[main]

добавьте

1dns=none
DNS через HTTPS

Перезапустите NetworkManager:

1sudosystemctl restart NetworkManager

Сделайте резервную копию файла /etc/resolv.conf:

1sudocp/etc/resolv.conf /etc/resolv.conf.backup

А затем удалите /etc/resolv.conf (это важно, поскольку это может быть ссылка на файл, а не настоящий файл):

1sudorm-f /etc/resolv.conf

И создайте файл /etc/resolv.conf 

1sudogedit /etc/resolv.conf

со следующим содержимым:

1234nameserver 127.0.2.1# nameserver ::1 # для IPv6options edns0 single-request-reopenEDNSPayloadSize 4096

Установка dnscrypt-proxy в Arch Linux, BlackArch и их производные

Установите пакет dnscrypt-proxy:

1sudopacman -S dnscrypt-proxy

Проверьте, чтобы порт 53 не был занят:

1ss -lp 'sport = :domain'

В выводе должна быть всего одна строка, а именно шапка:

1Netid State   Recv-Q  Send-Q   Local Address:Port     Peer Address:Port Process

Если вывод содержит более чем одну первую строку с названием столбцов, нужно отключить сервис, который использует порт 53. Одним из частых виновников является systemd-resolved.service (NetworkManager), но другие сетевые менеджеры могут иметь аналогичные компоненты. В общем, какая бы там ни была служба (возможно, вы уже устанавливали другой кэширующий DNS сервер), её нужно остановить и убрать из автозагрузки. Если нет процессов, прослушивающих порт 53, то можно продолжать.

Выполните проверку, чтобы убедиться, что dnscrypt-proxy работает:

1dnscrypt-proxy -resolve example.com

Запустите службу dnscrypt-proxy и проверьте её статус:

12sudosystemctl start dnscrypt-proxy.servicesystemctl status dnscrypt-proxy.service
DNS через HTTPS

Если всё в порядке, добавьте службу в автозагрузку:

1sudosystemctl enablednscrypt-proxy.service

Откройте файл /etc/NetworkManager/NetworkManager.conf:

1sudogedit /etc/NetworkManager/NetworkManager.conf

и проверьте, имеются ли там следующие строки:

12[main]dns=none

Если их нет, то добавьте их и перезапустите NetworkManager:

1sudosystemctl restart NetworkManager

Сделайте резервную копию файла /etc/resolv.conf:

1sudocp/etc/resolv.conf /etc/resolv.conf.backup

А затем удалите /etc/resolv.conf (это важно, поскольку это может быть ссылка на файл, а не настоящий файл):

1sudorm-f /etc/resolv.conf

И создайте файл /etc/resolv.conf 

1sudogedit /etc/resolv.conf

со следующим содержимым:

1234nameserver 127.0.0.1# nameserver ::1 # для IPv6options edns0 single-request-reopenEDNSPayloadSize 4096

Защита файла /etc/resolv.conf от изменений

Выше мы добавили настройку NetworkManager чтобы эта служба не меняла содержимое файла /etc/resolv.conf, как это делает она без предупреждений. На самом деле, NetworkManager действительно является самой частой причиной сброса настроек в /etc/resolv.conf, но не единственной.

Как настроить dnscrypt-proxy

Настройка dnscrypt-proxy выполняется с помощью файла dnscrypt-proxy.toml. В Windows этот файл расположен по пути C:\dnscrypt-proxy\dnscrypt-proxy.toml, а в Linux это файл /etc/dnscrypt-proxy/dnscrypt-proxy.toml. Независимо от операционной системы, настройка делается одинаково.

Откройте этот файл любым текстовым редактором, например, в Linux:

1sudogedit /etc/dnscrypt-proxy/dnscrypt-proxy.toml

Содержимое этого файла зависит от вашего дистрибутива: иногда там полный дефолтный файл, иногда уже настроенный сопровождающими пакета.

Чтобы после редактирования файла dnscrypt-proxy.toml изменения вступили в силу, выполните следующую команду.

  • Для Windows:
1C:\dnscrypt-proxy\dnscrypt-proxy -service restart
  • Для Linux:
1sudosystemctl restart dnscrypt-proxy.service

Чтобы понять, что настраивать, немного информации о том, как работает dnscrypt-proxy. Для преобразования имён в IP адреса dnscrypt-proxy скачивает большой список DNS серверов и в фоне проверяет их доступность и скорость отклика. Запросы делаются к разным DNS серверам в зависимости от скорости отклика и алгоритмов балансировки нагрузки. Это можно изменить — например, можно выбрать определённое имя или несколько имён и указать его (или их) в директиве server_names. Если директива server_names пустая, то будут использоваться все сервера. Если в директиве server_names указано одно или более имён DNS серверов, то будут использоваться только эти сервера.

К примеру, я предпочитаю DNS сервер Google, тогда значение моей директивы:

1server_names = ['google']

Если хотите сразу несколько DNS серверов, то укажите их используя следующий синтаксис:

1server_names = ['scaleway-fr', 'google', 'yandex', 'cloudflare']

Чтобы узнать, какие сервера выбраны для использования, выполните команду.

  • В Windows:
1C:\dnscrypt-proxy\dnscrypt-proxy -list
  • В Kali Linux:
1/usr/sbin/dnscrypt-proxy-list -config /etc/dnscrypt-proxy/dnscrypt-proxy.toml
  • В Arch Linux, BlackArch:
1dnscrypt-proxy -list -config /etc/dnscrypt-proxy/dnscrypt-proxy.toml

Директива listen_addresses устанавливает порт и IP адрес для прослушивания. Обычно, нет необходимости здесь что-то менять. Для работы с сокетами устанавливается следующее значение:

1listen_addresses = []

Установите fallback_resolvers на

1fallback_resolvers = ['8.8.8.8:53', '8.8.4.4:53']

Если вам зачем-то нужно вести журнал сделанных запросов, то найдите и раскомментируйте следующие строки:

12[query_log]file = '/var/log/dnscrypt-proxy/query.log'

Как добавить DNS сервер в исключение

Предположим, вы хотите использовать полный список DNS серверов, но хотите исключить некоторые из них. К примеру, как написали в комментарии, в данный момент у сервера rdns.faelix.net просрочен сертификат, что приводит к выводу предупреждений от антивирусного ПО. По этой причине мы хотим исключить данный сервер из списка используемых.

Это можно сделать с помощью директивы disabled_server_names, в качестве её значения нужно перечислить имена серверов, которые нужно избегать даже если они удовлетворяют всем критериям.

В первую очередь нам нужно знать имя проблемного DNS сервера. Для этого перейдите на страницу https://dnscrypt.info/public-servers

Внизу найдите выпадающий список «Rows per page» (Строк на страницу) и выберите там «All» (Все).

DNS через HTTPS

Нажмите в веб-браузере Ctrl+f для поиска по странице. Мы знаем, что проблемный адрес rdns.faelix.net, попробуем поискать по части имени «faelix»:

DNS через HTTPS

Итак, имена IPv4 DNS серверов это faelix-ch-ipv4 и faelix-uk-ipv4.

В файле настроек найдите disabled_server_names и добавьте имена туда:

1disabled_server_names = ['faelix-ch-ipv4', 'faelix-uk-ipv4']

Если вы используете IPv6 подключение, то также добавьте в список исключений и IPv6 имена.

Сохраните файл настроек и перезапустите службу dnscrypt-proxy.

Документация по настройке dnscrypt-proxy на русском

На странице карточки программы размещён пример конфигурационного файла dnscrypt-proxy с объяснением всех опций и переводом комментариев на русский язык: https://kali.tools/?p=5964

Проверка работы dnscrypt-proxy

Я уже упоминал, что благодаря кэшированию, повторные DNS запросы обрабатываются быстрее. Для проверки можно выполнить два раза подряд команду:

1timedigkali.tools +short
DNS через HTTPS

Первый ответ получен через 0,047s, а второй всего через 0,006s. Конечно, это только доли секунды, но всё равно хорошо. К тому же, вы реже будете сталкиваться с ситуацией, когда браузер «задумался» во время запроса из-за того, что по какой-то причине некоторые DNS ответы идут слишком долго или вовсе потеряны.

Можно проверить, сколько идёт запрос «напрямую», без DoH:

1timedigkali.tools +short @8.8.8.8

В моём случае это 0,058s-0,094s с периодическими таймаутами, видимо, задержка на СОРМ. Видимо, зашифрованный трафик пропускается «как есть», а незашифрованный проходит какую-то обработку, вроде как проверку доменов/IP по реестру запрещённых сайтов и т. п. Больше шифрования — больше скорости!

Запустите Wireshark и начните захват трафика. Через некоторое время проверьте с использованием фильтра

1dns

Там должно быть пусто, совсем.

США и ЕС

Также с помощью фильтра посмотрим на пакеты, которые уходят к DNS серверу и возвращаются от него:

1ip.addr == 8.8.8.8
DNS через HTTPS

Как можно увидеть на скриншоте, всё зашифровано, теперь у Интернет-провайдера и других посредников нет никакой возможности узнать или изменить содержимое DNS запросов и ответов.

Настройка dnscrypt-proxy для использования с IPv6

Во-первых, измените файл /etc/resolv.conf

1sudogedit /etc/resolv.conf

там должны быть строки

1234nameserver 127.0.2.1nameserver ::1options edns0 single-request-reopenEDNSPayloadSize 4096

В файле dnscrypt-proxy.toml

1sudogedit /etc/dnscrypt-proxy/dnscrypt-proxy.toml

Нужно установить прослушивание IPv6 интерфейса:

1listen_addresses = ['127.0.0.1:53', '[::1]:53'])

Замените

1ipv6_servers = false

на

1ipv6_servers = true

Помните, что сервер google это IPv4 сервер, а google-ipv6 это IPv6 сервер. Поэтому если вы установили значение server_names, то не забудьте туда вписать и IPv6 сервера, например:

1server_names = ['google-ipv6', 'google']

От KaligulBorhes

"How long, ignoramuses, will you love ignorance? How long will fools hate knowledge?"