DNSCrypt 2.0 и блокировка рекламы

habr.png

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

Для тех, кто не знает, Dnscrypt — это уникальный протокол шифрования DNS-трафика. Он даёт возможность защитить DNS-коммуникации от перехватов и подмены, и к примеру, обойти блокировки реализуемые на уровне DNS-запросов.

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

В этой статье, воспользуемся этим преимуществом и для разнообразия/пользы ограничим доступ к рекламным доменам.

Dnscrypt-proxy


В новой версии, переписанной автором на языке Go, настройки Dnscrypt-proxy хранятся в конфигурационном файле «dnscrypt-proxy.toml». Рассмотрим только интересующие параметры:

# Значение true включит проверку DNSSEC
require_dnssec = false
# Значение true позволит прокси серверу выполнять DNS-запросы по TCP.
force_tcp = false
# Здесь можно указать незашифрованный DNS-сервер, который будет использоваться в случае недоступности сервера DNSCrypt.
fallback_resolver = '9.9.9.9:53'


К слову, теперь DNSCrypt кэширует запросы и обновляет список серверов без необходимости какой-либо дополнительной настройки.

Dnsmasq


Dnsmasq будет принимать обычные DNS-запросы на 53 порте протокола UDP и перенаправлять их на DNSCrypt-proxy сервер.

/etc/dnsmasq.conf
no-resolv
# Адрес прокси-сервера DNSCrypt
server=127.0.0.1#5353
listen-address=127.0.0.1
proxy-dnssec


Блокирование рекламы


Заблокировать рекламу проще всего по средствам файла hosts. В интернете можно найти множество открытых источников, предоставляющих доступ к списку нежелательных доменов. Я пользуюсь вот этим репозиторием, предназаначенным для блокирования рекламы и прочего малозначимого контента. Репозиторий содержит скрипт, написанный на языке Python, который обновляет действующий hosts-файл в системе, согласно, собственно репозиторию. Чтобы автоматизировать этот процесс, достаточно создать в системе запланированное задание. Я делаю это так:

# crontab -e
@daily python /путь/к/репозиторию/hosts/updateHostsFile.py -ar


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

Параметр »-r» указывает скрипту заменять hosts-файл, действующий в системе.

Спасибо за внимание!

© Habrahabr.ru