Учебники (How-To & F.A.Q)
   7953

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

В свете увеличения событий в сети с подменой dns-запросов, перехватом и прочее, наткнулся на такую статью. Здесь подобного не нашел. Публикую ее с небольшим редактированием. Ссылку на источник дам в конце статьи. Сам себе это все установил. По субъективным ощущениям, сетка стала отзывчивей. Конечно, это не панацея, но, по крайней мере, dns ходит более защищенным))

Такие компании, как Microsoft, Google и Mozilla, продвигают DNS через HTTPS (DoH). Эта технология будет шифровать поисковые запросы DNS, улучшая конфиденциальность и безопасность в Интернете. Интернет стремится, чтобы по умолчанию шифрование присутствовало везде. На данный момент большинство веб-сайтов, к которым вы обращаетесь, вероятно, используют шифрование HTTPS. Современные веб-браузеры, такие как Chrome, теперь помечают любые сайты, использующие стандартный HTTP, как «небезопасные». HTTP/3, новая версия протокола HTTP, имеет встроенное шифрование. До сих пор эти запросы DNS не были зашифрованы. Когда вы подключаетесь к веб-сайту, ваша система отправляет запрос о том, что вы ищете IP-адрес, связанный с определённым доменом. Любой посредник передачи данных — возможно, ваш интернет-провайдер, но, возможно, также просто общедоступная точка доступа Wi-Fi, записывающая трафик, — могут регистрировать, к каким доменам вы подключаетесь. Из-за этого возможны атаки и сбор информации. DNS через HTTPS делает этот надзор невозможным. При использовании DNS через HTTPS ваша система установит безопасное зашифрованное соединение с вашим DNS-сервером и будет передавать запрос и ответ через это соединение. Все, кто находится между ними, не смогут увидеть, какие доменные имена вы ищете, или вмешаться в присланный ответ.

Включение DoH на уровне системы делает так, что все программы будут делать DNS запросы исключительно по зашифрованному каналу. Но это требует установки программы — кэширующего DNS сервера. На самом деле, установка очень простая и программа будет потреблять минимум ресурсов. При этом собственный DNS будет кэшировать полученные данные благодаря чему немного увеличит скорость работы сети.
Программы для DNS через HTTPS (DoH)
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 через HTTPS (DoH) на уровне операционной системы в Linux

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

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

Проверьте, чтобы порт 53 не был занят:
ss -lp 'sport = :domain'

В выводе должна быть всего одна строка, а именно шапка:
Netid State   Recv-Q  Send-Q   Local Address:Port     Peer Address:Port Process

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

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

Если выскакивает ошибка:
[FATAL] Unable to load the configuration file [dnscrypt-proxy.toml] -- Maybe use the -config command-line switch?

То выполняем следующее:
sudo ln -s /etc/dnscrypt-proxy/dnscrypt-proxy.toml /usr/sbin/dnscrypt-proxy.toml

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

systemctl status dnscrypt-proxy.service

Учебники (How-To & F.A.Q): Как включить DNS через HTTPS (DoH) для всех приложений
Если всё в порядке, добавьте службу в автозагрузку:
sudo systemctl enable dnscrypt-proxy.service

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

и проверьте, имеются ли там следующие строки:
[main] 
dns=none

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

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

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

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

со следующим содержимым:
nameserver 127.0.0.1
# nameserver ::1 # для IPv6
options edns0 single-request-reopen
EDNSPayloadSize 4096

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

Как настроить dnscrypt-proxy
Настройка dnscrypt-proxy выполняется с помощью файла dnscrypt-proxy.toml.
Этот файл расположен по пути: /etc/dnscrypt-proxy/dnscrypt-proxy.toml.
Откройте этот файл любым текстовым редактором:
sudo gedit /etc/dnscrypt-proxy/dnscrypt-proxy.toml

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

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

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

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

Если хотите сразу несколько DNS серверов, то укажите их используя следующий синтаксис:
server_names = ['scaleway-fr', 'google', 'yandex', 'cloudflare']

Чтобы узнать, какие сервера выбраны для использования, выполните команду:
dnscrypt-proxy -list -config /etc/dnscrypt-proxy/dnscrypt-proxy.toml

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

Установите fallback_resolvers на
fallback_resolvers = ['8.8.8.8:53', '8.8.4.4:53']

Если вам зачем-то нужно вести журнал сделанных запросов, то найдите и раскомментируйте следующие строки:
[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» (Все).
Учебники (How-To & F.A.Q): Как включить DNS через HTTPS (DoH) для всех приложений
Нажмите в веб-браузере Ctrl+f для поиска по странице. Мы знаем, что проблемный адрес rdns.faelix.net, попробуем поискать по части имени «faelix»:
Учебники (How-To & F.A.Q): Как включить DNS через HTTPS (DoH) для всех приложений
Итак, имена IPv4 DNS серверов это faelix-ch-ipv4 и faelix-uk-ipv4.
В файле настроек найдите disabled_server_names и добавьте имена туда:
disabled_server_names = ['faelix-ch-ipv4', 'faelix-uk-ipv4']

Если вы используете IPv6 подключение, то также добавьте в список исключений и IPv6 имена.
Сохраните файл настроек и перезапустите службу dnscrypt-proxy.

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

Запустите Wireshark https://kali.tools/?p=1407 и начните захват трафика. Через некоторое время проверьте с использованием фильтра
dns

Там должно быть пусто, совсем.
Учебники (How-To & F.A.Q): Как включить DNS через HTTPS (DoH) для всех приложений
Также с помощью фильтра посмотрим на пакеты, которые уходят к DNS серверу и возвращаются от него:
ip.addr == 8.8.8.8

Учебники (How-To & F.A.Q): Как включить DNS через HTTPS (DoH) для всех приложений
Как можно увидеть на скриншоте, всё зашифровано, теперь у Интернет-провайдера и других посредников нет никакой возможности узнать или изменить содержимое DNS запросов и ответов.

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

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

там должны быть строки
nameserver 127.0.0.1
nameserver ::1
options edns0 single-request-reopen
EDNSPayloadSize 4096

В файле dnscrypt-proxy.toml
sudo gedit /etc/dnscrypt-proxy/dnscrypt-proxy.toml

Нужно установить прослушивание IPv6 интерфейса:
listen_addresses = ['127.0.0.1:53', '[::1]:53']

Замените
ipv6_servers = false

На
ipv6_servers = true

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

https://hackware.ru/?p=13707

4 комментария

avatar
юзаю этот метод роутер doh dot из коробки поддерживает.
Последний раз редактировалось
+2
avatar
сложна
?
Всегда есть быстрое простое неправильное решение.
быстрые простые правильные (иногда) ответы здесь t.me/ManjaroRu
+1
avatar
Это гораздо проще и правильнее сделать на уровне роутера.
0
avatar
Согласен. Но у меня, к примеру, роутер TP-link archer ax90. Для него нет альтернативных прошивок к сожалению. А на стоковой это сделать невозможно.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.