Для тех, кто не знает, 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-файл, действующий в системе.
Спасибо за внимание!
Комментарии (5)
stangri
21.03.2018 08:25Спасибо за статью. Но если писать про DNSCrypt, наверно стоило бы также указать такую почти детективную историю, что старый разработчик (@jedisct1) сначала в прошлом году забросил, вроде, свой проект (из-за появления RFC на DNS over TSL: tools.ietf.org/html/rfc7858), в связи с чем @dyne просили отдать им управление проектом, в итоге сделали форк и переписали на Go, а потом @jedisct1 внезапно выложил обновление до 2.0.7, которое, впрочем, скорее всего будет последним.
Так же, если кто-то все-таки захочет выбрать DNSCrypt, а не DNS-over-TLS (сравнение на английском языке «для чайников» тут: tenta.com/blog/post/2017/12/dns-over-tls-vs-dnscrypt), на роутере проще будет поднять все-таки вариант от @jedisct1.cybran24 Автор
21.03.2018 08:37Спасибо за отзыв. Весьма полезная информация и думаю, стоит попробовать предложенный вами вариант.
silmor_senedlen
21.03.2018 21:08Какая-то очень обрывочная статья(скорее заметка), в которой всё перемешано.
Вторая версия самого протокола DNSCrypt существует уже очень давно, а тут по факту речь о ветке 2.x dnscrypt-proxy.
Из основных возможностей новой версии, прежде всего, хочется отметить возможность коммуникации с сервером по протоколу TCP
Такая возможность присутствовала в dnscrypt-proxy уже очень давно(если не всегда), ещё до перехода на ветку 2.x. Из конфига версии 1.9.5:
## Do not send queries using UDP. Only use TCP.
## Even if some resolvers mitigate this, DNS over TCP is almost always slower
## than UDP and doesn't offer additional security.
## Only enable this option if UDP doesn't work on your network.
# TCPOnly no
И поддержка TCP транспорта является прямым требованием спецификации:
The DNSCrypt protocol can use the UDP and TCP transport protocols.
DNSCrypt Clients and resolvers should support the protocol over UDP
and must support it over TCP.
А вот действительной фичей dnscrypt-proxy 2.x является поддержка сразу нескольких серверов, автоматический выбор самых быстрых из них (из списка разрешённых), а также автоматический failover и load-balancing.
Весь список различий относительно ветки 1.x можно посмотреть тут:
github.com/jedisct1/dnscrypt-proxy/wiki/Differences-to-v1cybran24 Автор
21.03.2018 21:11Благодарю, статья на уровне заметки, вы правы. Но написана исключительно исходя из благих намерений, может кому нибудь пригодится ;)
Antiever
Способ хорош, к сожалению некоторые ресурсы определяют отсутствие «контента» с запрещенных источников и блокируют содержимое полностью (например overclockers).