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

Зачем использовать это?

DNS - это служба, которую используют все, но она передает все в виде простого текста. Это позволяет безопасно использовать DNS с шифрованием, чтобы даже ваши интернет-провайдеры не могли видеть ваши запросы DNS :) Вы также можете туннелировать запросы через известные серверы DNSSEC.

Не только вы получаете шифрование DNS, но при правильной настройке с помощью Anonymized-DNS может препятствовать тому, чтобы посредники записывали и вмешивались в трафик DNS, поскольку это «мешает серверам узнавать что-либо об IP-адресах клиентов, используя промежуточные реле, предназначенные для пересылки зашифрованных данных DNS

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

Сначала установите его

sudo apt update
sudo apt install dnscrypt-proxy

Далее мы настраиваем это следующим образом

После установки DNSCrypt Proxy переходим к настройке, по сути, можно оставить сервера которые используются по умолчанию. А можно заменить на свои, это дело индивидуальное, для того что бы изменить сервера открываем конфигурационный файл, для примера я буду использовать текстовый редактор “Nano”

sudo nano /etc/dnscrypt-proxy/dnscrypt-proxy.toml

В открывшемся окне для изменения сервером ищем строку “server_names”, раскомментируем её и заменяем имена серверов на нужные нам public-resolvers по принципу server_names = [‘cloudflare’, ‘scaleway-fr’] можно через запятые перечислять несколько имен адресов. Обязательно используйте несколько адресов. Бывает такое, что один блокируют или отваливается. В таком случае будет подхватываться другой, который Вы указали. После того как отредактировали конфигурационный файл, сохраняем его комбинацией клавиш “ctrl + o” и выходим из редактора “Nano” комбинацией клавиш “ctrl + x”. Идём в настройки сети IPV4 – DNS – отключаем Автоматический и вписываем 127.0.0.1

определить критерии используемых серверов

ipv4_servers = true
ipv6_servers = true
dnscrypt_servers = true
doh_servers = true

require_dnssec = true
require_nolog = true
require_nofilter = true

установить ответ для заблокированных запросов

blocked_query_response = 'refused'

установите журнал в системный журнал

use_syslog = true

(необязательно) создайте новый и уникальный ключ для каждого запроса DNS

dnscrypt_ephemeral_keys = true

затем настройте анонимные маршруты DNS - больше информации здесь и Anonymized DNS relays

[anonymized_dns]
routes = [
{ server_name='scaleway-fr', via=['anon-meganerd', 'anon-scaleway-ams'] },
{ server_name='cloudflare', via=['anon-scaleway', 'anon-meganerd'] }
]

затем сохраните конфигурацию и выйдите.

Далее настройте чёрный список

В разделе чёрный список раскомментируйте и установите

[blocked_names]
blocked_names_file = '/etc/dnscrypt-proxy/dnscrypt-blacklist-domains.txt'
log_file = '/etc/dnscrypt-proxy/dnscrypt-blacklist-domains.log'
log_format = 'tsv'

Создайте свой собственный файл чёрного списка из примера и используйте эту ссылку. Есть и другие чёрные списки там.

Кроме того, вы можете раскомментировать «log_file» в этом разделе, если вы хотите получить журнал того, что занесено в чёрный список. Очень полезно для устранения неполадок в вашем dnscrypt-blacklist-domains.txt.

Перезапускаем NetworkManager

sudo systemctl restart NetworkManager

Перезапускаем dnscrypt-proxy.

sudo systemctl restart dnscrypt-proxy.service

Вот небольшой скрипт bash update-adblocker.sh для загрузки и обновления чёрного списка от Steven Black lists.

#!/bin/bash
# Name: update-adblocker.sh
# Purpose: Download and update adblocker list for dnscrypt proxy
DEST="/etc/dnscrypt-proxy/dnscrypt-blacklist-domains.txt"
#
# Blocks both adware + malware 
# See for other lists https://github.com/StevenBlack/hosts
SRC="https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts"
TMP_HOSTS="$(mktemp)"
TMP_B_FILE="$(mktemp)"
TMP_B_FILE_SORTED="$(mktemp)"
wget --timeout=3 --tries=5 -qO "${TMP_HOSTS}" "${SRC}" 
grep -Ev "(localhost)" "${TMP_HOSTS}"  | grep -Ev "#" | sed -E "s/(0.0.0.0 |127.0.0.1 |255.255.255.255 )//" >> "${TMP_B_FILE}"
awk '/^[^#]/ { print $1 }' "${TMP_B_FILE}" | sort -u > "${TMP_B_FILE_SORTED}"
cat "${TMP_B_FILE_SORTED}" > "$DEST"
rm -f "${TMP_B_FILE}" "${TMP_B_FILE_SORTED}" "${TMP_HOSTS}"
./update-adblocker.sh

Убедитесь, что вы ежедневно запускаете скрипт update-adblocker.sh, чтобы получать обновленный список файла hosts. Добавьте новое задание cron следующим образом

@daily /etc/dnscrypt-proxy/update-adblocker.sh

Помимо рекламы и вредоносного ПО, вы также можете блокировать поддельные новости, азартные игры и социальные сети.

Далее настройте белый список

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

[allowed_names]
allowed_names_file = '/etc/dnscrypt-proxy/dnscrypt-whitelist-domains.txt'
log_file = '/etc/dnscrypt-proxy/dnscrypt-whitelisted-domains.log'
log_format = 'tsv'

Создайте свой собственный файл белого списка из примера.

Кроме того, вы можете раскомментировать «log_file» в этом разделе, если вы хотите получить журнал того, что занесено в белом списке.

Измените /etc/resolv.conf для использования dnscrypt-proxy

Теперь редактируем файл /etc/resolv.conf и на сервере имён мы удаляем то, что там есть, и ставим 127.0.0.1

sudo nano /etc/resolv.conf
nameserver 127.0.0.1

Включите прокси-сервис dnscrypt

Используйте команду systemctl для включения службы dnscrypt-proxy в Linux

sudo systemctl enable dnscrypt-proxy.service
sudo systemctl start dnscrypt-proxy.service
sudo systemctl status dnscrypt-proxy.service

Перейдите на dnsleaktest.com, нажмите на расширенный тест, а затем убедитесь, что он работает, так как результаты не будут отображать DNS вашего провайдера, а только те, которые есть в нашем файле конфигурации.

Поиск проблемы

Q1: Что делать, если /etc/resolv.conf перезаписывается при перезагрузке?

A1: следуйте инструкциям выше, чтобы изменить, но затем используйте следующую команду, чтобы убедиться, что /etc/resolv.conf не изменился.

sudo chattr + i /etc/resolv.conf

Заключение

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