Содержание

DNSCrypt на Pi-hole

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

Шифрование DNS запросов позволяет защитить себя от некоторых видов сетевых атак, скрывает от посторонних глаз ваш трафик по протоколу DNS и позволяет обойти блокировки на уровне DNS-запросов.

Для использования DNSCrypt на клиентских машинах (или на локальном DNS-сервере) необходимо установить DNSCrypt-proxy, код которого открыт и размещен на GitHub.

В качестве DNSCrypt-сервера (резолвера) могут использоваться публичные сервера (сразу несколько), либо собственный сервер на базе dnscrypt-server.

Установка DNSCrypt-proxy

Со страницы релизов скачиваем архив для нашей системы:

cd ~ && wget https://github.com/DNSCrypt/dnscrypt-proxy/releases/download/2.0.45/dnscrypt-proxy-linux_arm-2.0.45.tar.gz

Распаковываем и удаляем архив:

tar -xvzf dnscrypt-proxy-linux_arm-2.0.45.tar.gz && rm -f dnscrypt-proxy-linux_arm-2.0.45.tar.gz

Переходим в распакованный каталог, создаем конфигурационный файл, путем копирования файла из поставки:

mv linux-arm dnscrypt-proxy && cd dnscrypt-proxy && cp example-dnscrypt-proxy.toml dnscrypt-proxy.toml

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

Редактируем файл:

nano dnscrypt-proxy.toml

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

listen_addresses = ['127.0.0.1:5053']

Параметру cache можно присвоить значение false, для того, чтобы dnscrypt-proxy не использовала собственный кэш, т.к., у нас будет использоваться кэш pi-hole.

cache = true

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

Адреса этих списков перечислены в разделе [sources] конфигурационного файла.

DNSCrypt-proxy будет автоматически выбирать из них самые быстрые сервера.

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

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

Здесь через запятую перечисляются имена серверов, которые будут использоваться DNSCrypt-proxy (имена, описание и адреса можно посмотреть в конкретном списке (public-resolvers.md)).

Например, для использования только серверов AdGuard можно оставить такую строку:

server_names = ['adguard-dns']

Для использования какого-то одного DNS-резолвера (например, своего собственного или какого-то платного), укажите его имя иадрес в секции [static].

Пример:

[static]
 
[static.'myserver']
stamp = 'sdns://AQcAAAAAAAAAAAAQMi5kbnNjcnlwdC1jZXJ0Lg'

Не забудьте в этом случае указать имя вашего сервера в параметре server_names:

server_names = ['myserver']

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

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

Пример:

routes = [
    { server_name='example-server-1', via=['anon-example-1', 'anon-example-2'] },
    { server_name='example-server-2', via=['sdns://gRIxMzcuNzQuMjIzLjIzNDo0NDM'] }
]

В этом примере для разрешения имен будут использоваться два сервера: example-server-1 и example-server-2. Запросы к первому серверу будут идти через сервера anon-example-1 и anon-example-2, ко второму серверу - через сервер с адресом sdns://gRIxMzcuNzQuMjIzLjIzNDo0NDM.

Кроме того, можно отключить запросы к несовместимым серверам с помощью параметра: skip_incompatible = false

Более подробную информацию о списках можно получить со страницы: https://github.com/DNSCrypt/dnscrypt-resolvers

Остальные параметры конфигурационного файла можно оставить без изменений.

Проверяем корректность конфигурационного файла:

./dnscrypt-proxy -check

Установка сервиса DNSCrypt-proxy

Установка производится исполнением распакованного бинарного файла с параметром -service install:

sudo ./dnscrypt-proxy -service install

Запуск сервиса:

sudo ./dnscrypt-proxy -service start

Проверяем, что всё работает:

sudo systemctl status dnscrypt-proxy

и

./dnscrypt-proxy -resolve www.aol.com

Настройка Pi-hole

Необходимо указать сервис адрес и порт установленного DNSCrypt-proxy в соответствующем поле настроек для вышестоящего DNS-сервера (Settings - DNS):

Настройки вышестоящего DNS-сервера

На этом всё.

Информацию по быстрой настройке собственного DNSCrypt-сервера можно найти на этой странице (EN):
https://github.com/DNSCrypt/dnscrypt-proxy/wiki/How-to-setup-your-own-DNSCrypt-server-in-less-than-10-minutes

Ссылки

Страница проекта на GitHub: https://github.com/DNSCrypt/
Сравнение DNS over TLS и DNSCrypt (EN): https://tenta.com/blog/post/2017/12/dns-over-tls-vs-dnscrypt