Kali linux dnscrypt настройка

Обновлено: 04.07.2024

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

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

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

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

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

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

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

Если выскакивает ошибка:

То выполняем следующее:

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

В файле dnscrypt-proxy.toml

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

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


Мануал

Хотя это не полностью скроет весь IP-трафик, он предотвратит опасные атаки подмены DNS, обеспечивая лучшую безопасность.

В Linux лучшим способом шифрования трафика DNS является использование DNSCrypt.

Установка DNSCrypt

Откройте терминал и введите команды, соответствующие вашему дистрибутиву Linux.

Ubuntu

Debian

Arch Linux

Fedora

OpenSUSE

Общий Linux

Если вы не можете найти версию DNSCrypt для своей операционной системы, то лучше всего загрузить программу непосредственно из Github.

К счастью, из-за усердия разработчика нет необходимости собирать DNSCrypt из исходников.

Вместо этого загружаются готовые бинарники.

Эти двоичные файлы будут работать во всех дистрибутивах Linux.

Чтобы скачать двоичный файл, откройте терминал и используйте инструмент загрузки wget, чтобы захватить самую последнюю версию.

или, чтобы загрузить 32-битную версию, выполните:

Знаете ли вы, что существует версия ARM версии DNSCrypt?

Этот инструмент можно использовать в операционных системах ARM Linux.

Чтобы скачать его, установите wget, откройте терминал и возьмите его с помощью следующей команды:

Чтобы начать, используйте команду «tаr» для полного извлечения содержимого архива.

Извлечение папки DNSCrypt поместит все необходимые файлы в папку Linux в /home.

Безопасно хранить эти файлы в /home/, где инструмент wget был запущен.

Хотя будьте осторожны, вы не удалите папку случайно!

С помощью команды CD перейдите к каталогу

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

Настройка DNSCrypt

Инструмент DNSCrypt находится на вашем ПК Linux и готов к работе.

Хотя, только потому, что он установлен, это не значит, что он работает.

К сожалению, вам нужно поработать с настройками DNSCrypt, чтобы заставить его работать.

Первым шагом является выбор общего DNS.

Существует множество безопасных общедоступных DNS-решений.

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

На самом деле нет смысла настраивать зашифрованный DNS на Linux, если вы не скрываете его от своего провайдера.

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

Примечание: не хотите работать с CloudFlare DNS?

Нажмите на значок своей сети и отредактируйте свое соединение по умолчанию.

Найдите параметр IPv4 и найдите «DNS-серверы».

В текстовом поле «DNS-серверы» вставьте следующий адрес:

После настройки программного обеспечения DNSCrypt настоятельно необходимо перезагрузить диспетчер сети с помощью следующей команды.

Если вы этого не сделаете, скорее всего, инструмент откажется работать.

Применение настроек DNS

Основные настройки, позволяющие работать с инструментом DNSCrypt, установлены.

Отключение DNSCrypt

Тем не менее если вы обнаружите, что-то не для вас (по какой-либо причине), вы можете отключить его.

Благодаря системе systemd init в Linux, DNSCrypt, пользователи могут запускать и останавливать ее в любое время, даже не требуя ее удаления!

Для этого откройте терминал и получите оболочку рута.

С помощью корневой оболочки вы можете манипулировать файлами службы DNSCrypt.

Чтобы остановить ее, выполните следующую команду:

Чтобы полностью отключить его и предотвратить его запуск при загрузке системы, выполните следующие действия:

dnscrypt

На этот раз давайте посмотрим, как мы можем повысить нашу конфиденциальность в Linux, что мы собираемся сделать, так это взять под контроль, кто может видеть нашу информацию поиска DNS.

Хотя он не скроет полностью весь IP-трафик, он предотвратит опасные атаки подмены DNS, обеспечивая большую безопасность.

В Linux лучший способ зашифровать DNS-трафик - использовать DNSCrypt.

DNSCrypt - сетевой протокол, предназначенный для аутентификации трафика DNS. (Система доменных имен) между пользователем компьютера и рекурсивными именами серверов.

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

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

DNSCrypt также можно использовать для управления доступом.

Как установить DNSCrypt в Linux?

Чтобы установить эту утилиту в нашей системе, мы должны выполнить описанные ниже действия в зависимости от используемого дистрибутива Linux.

Вы должны знать, что утилита DNSCrypt включена практически в большинство репозиториев дистрибутивов Linux.

Для властиr установить DNSCrypt на Debian, Ubuntu, Linux Mint и дистрибутивы, производные от этих, они должны открыть терминал и выполнить в нем следующую команду:

sudo apt install dnscrypt-proxy

В случае для пользователей Arch Linux и производных:

sudo pacman -S dnscrypt-proxy

Те, кто использует Fedora и производные:

sudo dnf install dnscrypt-proxy -y

Наконец, для те, кто использует любую версию OpenSUSE:

sudo zypper установить dnscrypt-proxy

Как настроить DNSCrypt в Linux?

Как только утилита будет установлена ​​в системе, необходимо настроить его, так как, хотя он установлен, он еще не работает.

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

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

Они могут выбрать тот, который им больше всего подходит, у нас есть варианты openDNS, CloudFlare среди других,

Сейчас Мы должны щелкнуть значок сети и отредактировать соединение по умолчанию.

Вотí Мы собираемся позиционировать себя в варианте IPv4 и искать «DNS-серверы». В текстовом поле «DNS-серверы» вставьте следующий адрес:

Просто добавьте следующий DNS-адрес pДля IPv4:

В то время как для IPv6:

После настройки программного обеспечения DNSCrypt крайне необходимо перезапустить сетевой менеджер с помощью следующей команды.

соло просто введите:

sudo systemctl restart NetworkManager.service

Базовые настройки, позволяющие инструменту DNSCrypt работать, уже на месте. Последнее, что нужно сделать, это применить профиль DNS в командной строке.

И все, они уже используют этот отличный сервис в своих системах. Если вы хотите остановить службу DNSCrypt, просто введите следующую команду

sudo systemctl stop dnscrypt-proxy.service

Y Чтобы полностью отключить его и предотвратить его запуск при запуске, просто введите:

sudo systemctl disable dnscrypt-proxy.service

Вы можете найти много информации в Интернете о том, как настроить DNSCrypt, а также о различных службах DNS, которые могут быть использованы в нем, просто проверьте DNSCript Wiki. Если вы хотите узнать об этом больше, вы можете проконсультироваться ссылку а также это другое.

Содержание статьи соответствует нашим принципам редакционная этика. Чтобы сообщить об ошибке, нажмите здесь.

Полный путь к статье: Из Linux » Учебники / Руководства / Советы » Как зашифровать DNS-трафик в Linux с помощью DNSCrypt?

DNSCrypt - это спецификация, реализованная в программном обеспечении unbound, dnsdist, dnscrypt-wrapper и dnscrypt-proxy.

Содержание

Настройка dnscrypt-proxy

1. Скачайте и установите dnscrypt-proxy для выбранной системы (Windows, Linux, MacOS):

2. Сохраните копию исходного файла конфигурации example-dnscrypt-proxy.toml и настройте согласно вашим требованиям как dnscrypt-proxy.toml.

Наш пример настройки файла dnscrypt-proxy.toml. Список общедоступных DNS-резольверов доступен по этой ссылке.

3. Убедитесь, что другие приложения и сервисы не прослушивают 53 порт в вашей системе и запустите приложение dnscrypt-proxy в командной строке Windows в режиме администратора устройства. Измените ваши настройки DNS для настроенного IP-адреса.

В нашем случае необходимо настроить DNS на 127.0.0.1 (указанное значение для параметра listen_addresses в конфигурационном файле) в параметрах протокола TCP/IP. Как это сделать для Windows рассказывается в статье настройка DNS на компьютере с ОС Windows. Приведем скриншот настройки для нашего случая:

настройка DNS на компьютере

4. Установите системную службу.

Установка системной службы dnscrypt-proxy (Windows, Linux, MacOS)

В командной строке, запущенной с правами администратора, введите следующую команду dnscrypt-proxy -service install для регистрации dnscrypt-proxy в качестве системной службы, а затем введите команду dnscrypt-proxy -service start для запуска службы.

В Windows данный шаг не требуется. Просто дважды щелкните по файлу server-install.bat для установки службы.

Служба будет автоматически запускаться при каждой перезагрузке.

Процедура установки совместима с операционными системами Windows, Linux (systemd, Upstart, SysV) и macOS (launchd).

Другие полезные команды: stop , restart (полезна при изменении конфигурации) и uninstall .

Установка dnscrypt-proxy в Ubuntu 18.04, 20.04

В настройках сети - IPV4 - DNS - отключаем Автоматический и ставим 127.0.2.1 . Перезапускаем NetworkManager:

Установка системной службы dnscrypt-proxy (Arch Linux, Manjaro)

1. Выполните установку:

2. Активируйте и запустите службу:

В настройках сети - IPV4 - DNS - отключаем Автоматический и ставим 127.0.0.1 . Перезапускаем NetworkManager:

3. Проверьте, был ли успешен запуск службы:

Проверка работы

Проверьте, что все работает корректно. DNS-запрос для resolver.dnscrypt.info должен возвращать один из выбранных DNS-серверов вместо серверов вашего провайдера

Так же проверить шифрование DNS трафика можно с помощью утилиты Wireshark - анализатор трафика компьютерных сетей. Программа доступна для операционных систем Windows и GNU/Linux.

Установка Wireshark в Ubuntu и подобные дистрибутивы:

В окне программы выбираем нужный сетевой интерфейс и нажимаем Enter. В следующей окне, в графе Filter вводим слово DNS и снова нажимаем Enter.

Пример отсутствия шифрования DNS запросов:

Wireshark

DNS запросы видны.

Пример шифрования DNS запросов с помощью dnscrypt-proxy:

Wireshark

Тот же сетевой интерфейс, тот же фильтр - DNS, но запросы не отображены, т.к зашифрованы.

Simple DNSCrypt для Windows

Для Windows также можно использовать Simple DNSCrypt - инструмент для настройки шифрования DNSCrypt на компьютерах Windows с помощью простого в использовании интерфейса.



Шифрование трафика между вашим устройством и DNS-сервисом помешает посторонним лицам отслеживать трафик или подменить адрес

Смерть сетевого нейтралитета и ослабление правил для интернет-провайдеров по обработке сетевого трафика вызвали немало опасений по поводу конфиденциальности. У провайдеров (и других посторонних лиц, которые наблюдают за проходящим трафиком) уже давно есть инструмент, позволяющий легко отслеживать поведение людей в интернете: это их серверы доменных имен (DNS). Даже если они до сих пор не монетизировали эти данные (или не подменяли трафик), то наверняка скоро начнут.

«Открытые» DNS-сервисы позволяют обходить сервисы провайдеров ради конфиденциальности и безопасности, а кое в каких странах — уклоняться от фильтрации контента, слежки и цензуры. 1 апреля (не шутка) компания Cloudflare запустила свой новый, бесплатный и высокопроизводительный DNS-сервис, предназначенный для повышения конфиденциальности пользователей в интернете. Он также обещает полностью скрыть DNS-трафик от посторонних глаз, используя шифрование.

Названный по своему IP-адресу, сервис 1.1.1.1 — это результат партнёрства с исследовательской группой APNIC, Азиатско-Тихоокеанским сетевым информационным центром, одним из пяти региональных интернет-регистраторов. Хотя он также доступен как «открытый» обычный DNS-резолвер (и очень быстрый), но Cloudflare ещё поддерживает два протокола шифрования DNS.

Хотя и разработанный с некоторыми уникальными «плюшками» от Cloudflare, но 1.1.1.1 — никак не первый DNS-сервис с шифрованием. Успешно работают Quad9, OpenDNS от Cisco, сервис 8.8.8.8 от Google и множество более мелких сервисов с поддержкой различных схем полного шифрования DNS-запросов. Но шифрование не обязательно означает, что ваш трафик невидим: некоторые службы DNS с шифрованием всё равно записывают ваши запросы в лог для различных целей.

Cloudflare пообещал не журналировать DNS-трафик и нанял стороннюю фирму для аудита. Джефф Хастон из APNIC сообщил, что APNIC собирается использовать данные в исследовательских целях: диапазоны 1.0.0.0/24 и 1.1.1.0/24 изначально были сконфигурированы как адреса для «чёрного» трафика. Но APNIC не получит доступ к зашифрованному трафику DNS.

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



Как работает DNS

Есть много причин для лучшей защиты DNS-трафика. Хотя веб-трафик и другие коммуникации могут быть защищены криптографическими протоколами, такими как Transport Layer Security (TLS), но почти весь трафик DNS передаётся незашифрованным. Это означает, что ваш провайдер (или кто-то другой между вами и интернетом) может регистрировать посещаемые сайты даже при работе через сторонний DNS — и использовать эти данных в своих интересах, включая фильтрацию контента и сбор данных в рекламных целях.



Как выглядит типичный обмен данными между устройством и DNS-резолвером

«У нас есть проблема “последней мили” в DNS, — говорил Крикет Лю, главный архитектор DNS в компании Infoblox, которая занимается информационной безопасностью. — Большинство наших механизмов безопасности решают вопросы коммуникаций между серверами. Но есть проблема с суррогатами резолверов на различных операционных системах. В реальности мы не можем их защитить». Проблема особенно заметна в странах, где власти более враждебно относятся к интернету.

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

Однако эта опция защиты недоступна массовому пользователю. Ни один из этих протоколов нативно не поддерживается ни одним DNS-резолвером, который идёт в комплекте с ОС. Все они требуют установки (и, вероятно, компиляции) клиентского приложения, которое действует как локальный «сервер» DNS, ретранслируя запросы, сделанные браузерами и другими приложениями вверх по течению к безопасному провайдеру DNS по вашему выбору. И хотя две из трёх данных технологий предлагаются на роль стандартов, ни один из проверенных нами вариантов пока не представлен в окончательном виде.

Поэтому если хотите погрузиться в шифрование DNS, то лучше взять для DNS-сервера в домашней сети Raspberry Pi или другое отдельное устройство. Потому что вы наверняка обнаружите, что настройка одного из перечисленных клиентов — это уже достаточно хакерства, чтобы не захотеть повторять процесс заново. Проще запросить настройки DHCP по локальной сети — и указать всем компьютерам на одну успешную установку DNS-сервера. Я много раз повторял себе это во время тестирования, наблюдая падение одного за другим клиентов под Windows и погружение в спячку клиентов под MacOS.



Сообщество DNSCrypt пыталось сделать доступный инструмент для тех, кто не обладает навыками работы в командной строке, выпустив программы DNSCloak (слева) под iOS и Simple DNSCrypt (справа) под Windows

Для полноты картины в исторической перспективе начнём обзор с самой первой технологии шифрования DNS — DNSCrypt. Впервые представленный в 2008 году на BSD Unix, инструмент DNSCrypt изначально предназначался для защиты не от прослушки, а от DNS-спуфинга. Тем не менее, его можно использовать как часть системы обеспечения конфиденциальности — особенно в сочетании с DNS-сервером без логов. Как отметил разработчик DNSCrypt Фрэнк Денис, гораздо больше серверов поддерживают DNSCrypt, чем любой другой вид шифрования DNS.

«DNSCrypt — это немного больше, чем просто протокол, — говорит Фрэнк Денис. — Сейчас сообщество и активные проекты характеризуют его гораздо лучше, чем мой изначальный протокол, разработанный в выходные». Сообщество DNSCrypt создало простые в использовании клиенты, такие как Simple DNSCrypt для Windows и клиент для Apple iOS под названием DNS Cloak, что делает шифрование DNS доступнее для нетехнических людей. Другие активисты подняли независимую сеть приватных DNS-серверов на основе протокола, помогающего пользователям уклониться от использования корпоративных DNS-систем.

«DNSCrypt — это не подключение к серверам конкретной компании, — сказал Денис. — Мы призываем всех поднимать собственные сервера. Сделать это очень дёшево и легко. Теперь, когда у нас есть безопасные резолверы, я пытаюсь решить задачу фильтрации контента с учётом конфиденциальности».

Для тех, кто хочет запустить DNS-сервер с поддержкой DNSCrypt для всей своей сети, лучшим клиентом будет DNSCrypt Proxy 2. Старая версия DNSCrypt Proxy по-прежнему доступна как пакет для большинства основных дистрибутивов Linux, но лучше загрузить бинарник новой версии непосредственно с официального репозитория на GitHub. Есть версии для Windows, MacOS, BSD и Android.

Опыт сообщества DNSCrypt по защите конфиденциальности воплощён в DNSCrypt Proxy. Программа легко настраивается, поддерживает ограничения по времени доступа, шаблоны для доменов и чёрный список IP-адресов, журнал запросов и другие функции довольно мощного локального DNS-сервера. Но для начала работы достаточно самой базовой конфигурации. Есть пример файла конфигурации в формате TOML (Tom's Obvious Minimal Language, созданный соучредителем GitHub Томом Престоном-Вернером). Можете просто переименовать его перед запуском DNSCrypt Proxy — и он станет рабочим файлом конфигурации.

По умолчанию прокси-сервер использует открытый DNS-резолвер Quad9 для поиска и получения с GitHub курируемого списка открытых DNS-сервисов. Затем подключается к серверу с самым быстрым откликом. При необходимости можно изменить конфигурацию и выбрать конкретный сервис. Информация о серверах в списке кодируется как «штамп сервера». Он содержит IP-адрес поставщика, открытый ключ, информацию, поддерживает ли сервер DNSSEC, хранит ли провайдер логи и блокирует ли какие-нибудь домены. (Если не хотите зависеть от удалённого файла при установке, то можно запустить «калькулятор штампов» на JavaScript — и сгенерировать собственный локальный статичный список серверов в этом формате).

Для своего тестирования DNSCrypt я использовал OpenDNS от Cisco в качестве удалённого DNS-сервиса. При первых запросах производительность DNSCrypt оказалась немного хуже, чем у обычного DNS, но затем DNSCrypt Proxy кэширует результаты. Самые медленные запросы обрабатывались в районе 200 мс, в то время как средние — примерно за 30 мс. (У вас результаты могут отличаться в зависимости от провайдера, рекурсии при поиске домена и других факторов). В целом, я не заметил замедления скорости при просмотре веб-страниц.

С другой стороны, DNSCrypt для шифрования не полагается на доверенные центры сертификации — клиент должен доверять открытому ключу подписи, выданному провайдером. Этот ключ подписи используется для проверки сертификатов, которые извлекаются с помощью обычных (нешифрованных) DNS-запросов и используются для обмена ключами с использованием алгоритма обмена ключами X25519. В некоторых (более старых) реализациях DNSCrypt есть условие для сертификата на стороне клиента, который может использоваться в качестве схемы управления доступом. Это позволяет им журналировать ваш трафик независимо от того, с какой IP-адреса вы пришли, и связывать его с вашим аккаунтом. Такая схема не используется в DNSCrypt 2.

С точки зрения разработчика немного сложно работать с DNSCrypt. «DNSCrypt не особенно хорошо документирован, и не так много его реализаций», — говорит Крикет Лю из Infoblox. На самом деле мы смогли найти только единственный клиент в активной разработке — это DNSCrypt Proxy, а OpenDNS прекратил поддерживать его разработку.

Интересный выбор криптографии в DNSCrypt может напугать некоторых разработчиков. Протокол использует Curve25519 (RFC 8032), X25519 (RFC 8031) и Chacha20Poly1305 (RFC 7539). Одна реализация алгоритма X24419 в криптографических библиотеках Pyca Python помечена как «криптографически опасная», потому что с ней очень легко ошибиться в настройках. Но основной используемый криптографический алгоритм Curve25519, является «одной из самых простых эллиптических кривых для безопасного использования», — сказал Денис.

Разработчик говорит, что DNSCrypt никогда не считался стандартом IETF, потому что был создан добровольцами без корпоративной «крыши». Представление его в качестве стандарта «потребовало бы времени, а также защиты на заседаниях IETF», — сказал он. «Я не могу себе этого позволить, как и другие разработчики, которые работают над ним в свободное время. Практически все ратифицированные спецификации, связанные с DNS, фактически написаны людьми из одних и тех же нескольких компаний, из года в год. Если ваш бизнес не связан с DNS, то действительно тяжело получить право голоса».



TLS стал приоритетом для CloudFlare, когда понадобилось усилить шифрование веб-трафика для защиты от слежки

У DNS по TLS (Transport Layer Security) несколько преимуществ перед DNSCrypt. Во-первых, это предлагаемый стандарт IETF. Также он довольно просто работает по своей сути — принимает запросы стандартного формата DNS и инкапсулирует их в зашифрованный TCP-трафик. Кроме шифрования на основе TLS, это по существу то же самое, что и отправка DNS по TCP/IP вместо UDP.

Существует несколько рабочих клиентов для DNS по TLS. Самый лучший вариант, который я нашел, называется Stubby, он разработан в рамках проекта DNS Privacy Project. Stubby распространяется в составе пакета Linux, но есть также версия для MacOS (устанавливается с помощью Homebrew) и версия для Windows, хотя работа над последней ещё не завершена.

Хотя мне удалось стабильно запускать Stubby на Debian после сражения с некоторыми зависимостями, этот клиент регулярно падал в Windows 10 и имеет тенденцию зависать на MacOS. Если вы ищете хорошее руководство по установке Stubby на Linux, то лучшая найденная мной документация — это пост Фрэнка Сантосо на Reddit. Он также написал shell скрипт для установки на Raspberry Pi.

Положительный момент в том, что Stubby допускает конфигурации с использованием нескольких служб на основе DNS по TLS. Файл конфигурации на YAML позволяет настроить несколько служб IPv4 и IPv6 и включает в себя настройки для SURFNet, Quad9 и других сервисов. Однако реализация YAML, используемая Stubby, чувствительна к пробелам, поэтому будьте осторожны при добавлении новой службы (например, Cloudflare). Сначала я использовал табы — и всё поломал.

Клиенты DNS по TLS при подключении к серверу DNS осуществляют аутентификацию с помощью простой инфраструктуры открытых ключей (Simple Public Key Infrastructure, SPKI). SPKI использует локальный криптографический хэш сертификата провайдера, обычно на алгоритме SHA256. В Stubby этот хэш хранится как часть описания сервера в файле конфигурации YAML, как показано ниже:


После установления TCP-соединения клиента с сервером через порт 853 сервер представляет свой сертификат, а клиент сверяет его с хэшем. Если всё в порядке, то клиент и сервер производят рукопожатие TLS, обмениваются ключами и запускают зашифрованный сеанс связи. С этого момента данные в зашифрованной сессии следуют тем же правилам, что и в DNS по TCP.

После успешного запуска Stubby я изменил сетевые настройки сети DNS, чтобы направлять запросы на 127.0.0.1 (localhost). Сниффер Wireshark хорошо показывает этот момент переключения, когда трафик DNS становится невидимым.



Переключаемся с обычного трафика DNS на шифрование TLS

Хотя DNS по TLS может работать как DNS по TCP, но шифрование TLS немного сказывается на производительности. Запросы dig к Cloudflare через Stubby у меня выполнялись в среднем около 50 миллисекунд (у вас результат может отличаться), в то время как простые DNS-запросы к Cloudflare получают ответ менее чем за 20 мс.

Здесь тоже имеется проблема с управлением сертификатами. Если провайдер удалит сертификат и начнёт использовать новый, то в настоящее время нет чистого способа обновления данных SPKI на клиентах, кроме вырезания старого и вставки нового сертификата в файл конфигурации. Прежде чем с этим разберутся, было бы полезно использовать какую-то схему управления ключами. И поскольку сервис работает на редком порту 853, то с высокой вероятностью DNS по TLS могут заблокировать на файрволе.



Google и Cloudflare, похоже, одинаково видят будущее зашифрованного DNS



Как Cloudflare, мы считаем, что туннели иллюстрируют операцию «Арго» лучше, чем Бен Аффлек

Дабы убедиться, что проблема именно в протоколе DoH, а не в программистах Cloudflare, я испытал два других инструмента. Во-первых, прокси-сервер от Google под названием Dingo. Его написал Павел Форемски, интернет-исследователь из Института теоретической и прикладной информатики Академии наук Польши. Dingo работает только с реализацией DoH от Google, но его можно настроить на ближайшую службу Google DNS. Это хорошо, потому что без такой оптимизации Dingo сожрал всю производительность DNS. Запросы dig в среднем выполнялись более 100 миллисекунд.


Это сократило время отклика примерно на 20%, то есть примерно до того показателя, как у Argo.

А оптимальную производительность DoH неожиданно показал DNSCrypt Proxy 2. После недавнего добавления DoH Cloudflare в курируемый список публичных DNS-сервисов DNSCrypt Proxy почти всегда по умолчанию подключается к Cloudflare из-за низкой задержки этого сервера. Чтобы убедиться, я даже вручную сконфигурировал его под резолвер Cloudflare для DoH, прежде чем запустить батарею dig-запросов.

Все запросы обрабатывались менее чем за 45 миллисекунд — это быстрее, чем собственный клиент Cloudflare, причём с большим отрывом. С сервисом DoH от Google производительность оказалась похуже: запросы обрабатывались в среднем около 80 миллисекунд. Это показатель без оптимизации на ближайший DNS-сервер от Google.



Я не Бэтмен, но моя модель угроз всё равно немного сложнее, чем у большинства людей

Я профессиональный параноик. Моя модель угроз отличается от вашей, и я предпочел бы сохранить в безопасности как можно больше своих действий в онлайне. Но учитывая количество нынешних угроз приватности и безопасности из-за манипуляций с трафиком DNS, у многих людей есть веские основания использовать какую-либо форму шифрования DNS. Я с удовольствием обнаружил, что некоторые реализации всех трёх протоколов не оказывают сильно негативного влияния на скорость передачи трафика.

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

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

Так что в ближайшее время эти протоколы останутся инструментом для тех немногих людей, кто реально заботится о конфиденциальности своих данных и готов для этого немного потрудиться. Надеюсь, сообщество вокруг DNSCrypt продолжит свою активность и продвинет ситуацию вперёд.

Читайте также: