dnscrypt-proxy в OpenATV – понятный обзор + важные настройки
О чём идёт речь?
dnscrypt-proxy — это локальный DNS-прокси. Он принимает DNS-запросы от устройства и отвечает на них либо из локального кэша, либо пересылает их в зашифрованном виде выбранным DNS-серверам (DNSCrypt/DoH). При желании он может блокировать или разрешать доступ к определённым доменам/IP-адресам.
Важно для OpenATV- Файл конфигурации: /etc/dnscrypt-proxy/dnscrypt-proxy.toml
- Запуск: Служба запускается как демон с помощью скрипта инициализации.
- Системный DNS: Сервер имен статически установлен на 127.0.0.1:53.
- Важно: Если dnscrypt-proxy не запущен или неправильно настроен, разрешение имен, как правило, будет завершаться с ошибкой.
Какие преимущества для обычных пользователей?- Повышенная конфиденциальность: DNS-запросы больше не передаются по сети в виде открытого текста.
- Повышенная безопасность: манипуляции с DNS в сети становятся сложнее.
- Дополнительно: блокировка рекламных/трекерных/вредоносных доменов с помощью черного списка.
- Дополнительно: контроль доступа по времени (например, разрешение/блокировка веб-сайтов только в определенное время).
Чем dnscrypt-proxy не является:- Это не VPN: Он шифрует DNS, но не автоматически весь интернет-трафик.
- Не гарантирует защиту от географических ограничений: Многие географические ограничения основаны на вашем публичном IP-адресе, а не на DNS.
================================================== =============================
Географическая защита, блокировки по странам/провайдерам и что DNS может (и чего не может) решить.
================================================== =============================
1) Географические ограничения (например, медиатеки/стриминг «только в стране X»)
Геоблокировка обычно определяется на основе вашего публичного IP-адреса. Использование другого DNS-сервера не изменит ваш IP-адрес. Поэтому:
- dnscrypt-proxy может шифровать DNS и переключаться на другие DNS-серверы,
- но это не снимет типичные географические ограничения.
2) Блокировка по IP-адресу или стране (общие сведения)
«Блокировка» не всегда одинакова. Существуют различные методы:
- Блокировка на основе DNS (манипуляции/перенаправление DNS, черный список DNS у провайдера)
- Блокировка на основе IP-адреса (блокируется целевой IP-адрес)
- Фильтрация HTTPS/SNI или DPI (глубокий анализ пакетов)
Что dnscrypt-proxy может (обычно) делать:
- Зашифрованный DNS может помочь против чистой манипуляции DNS, поскольку DNS-запрос больше не отправляется провайдеру в открытом виде.
Что dnscrypt-proxy не может делать:
- Если блокировка происходит на уровне IP/SNI/DPI, использование другого DNS-резолвера само по себе обычно не помогает.
Примечание относительно незаконного контента:
Это руководство предназначено для законного использования (конфиденциальность/родительский контроль/ложная блокировка). Оно не включает шаги по обходу блокировок для доступа к контенту, нарушающему авторские права или иным образом незаконному.
3) Варианты действий в случае некорректной блокировки легитимных веб-сайтов
3.1 Выбор резолвера без фильтров
Многие резолверы имеют собственные фильтры (родительский контроль, фильтры безопасности, рекламные фильтры). Для максимально «нейтральной» работы DNS:
- Резолверы можно фильтровать по свойствам в конфигурации.
- Пример: `require_nofilter = true` означает «только резолверы, которые не объявляют свой собственный список блокировки».
3.2 Проверка локальных списков блокировки
Если в образе включены списки блокировки, запись может непреднамеренно заблокировать страницу.
- Временно отключите списки блокировки (или удалите правила) — только для целей тестирования.
- Лучше: используйте список разрешенных сайтов (см. ниже).
3.3 Списки разрешенных адресов (исключения) вместо «смягчения» списков блокировки
dnscrypt-proxy поддерживает списки разрешенных адресов, которые специально обходят блокировку, — но только в рамках ваших локальных фильтров (т. е., если вы блокируете себя сами).
- blocked_names блокирует домены.
- allowed_names может определять исключения, которые обходят фильтры имен/IP-адресов.
================================================== =============================
Защита детей / Контроль времени – выборочная блокировка или разрешение доступа
================================================== =============================
Если плагины на устройстве больше не обеспечивают надежное управление временем/родительский контроль, надежной альтернативой может стать уровень DNS. Пока устройства/приложения отправляют DNS-запросы через настроенный DNS-сервер, эти правила применяются независимо от отдельных приложений.
1) Основной принцип- Блок-лист: Заблокированные домены (или шаблоны).
- Расписание: Правила блокировки могут быть активны только в определенное время.
- Разрешенный список: Целевые исключения (например, «Всегда разрешать школьную платформу»).
2) Определение расписаний (пример)
В файле /etc/dnscrypt-proxy/dnscrypt-proxy.toml:
[schedules]
[schedules.time-to-sleep]
mon = [{after='21:00', before='07:00'}]
tue = [{after='21:00', before='07:00'}]
wed = [{after='21:00', before='07:00'}]
thu = [{after='21:00', before='07:00'}]
fri = [{after='22:00', before='07:00'}]
sat = [{after='22:00', before='09:00'}]
sun = [{after='21:00', before='07:00'}]
3) Список заблокированных пользователей с указанием времени (пример)
В файле blocked-names.txt:
- *.youtube.* @time-to-sleep
- *.tiktok.* @time-to-sleep
4) Полная блокировка (всегда)
В файле blocked-names.txt без расписания:
- example.com
- *.example.com
5) Белый список (исключения)
В файле allowed-names.txt:
- =schule.example
- *.bildungsportal.example
Примечание: Списки разрешенных элементов становятся особенно важными, когда списки заблокированных элементов очень широкие (правила использования подстановочных символов/подстрок).
6) DNS-фильтрация не заменяет контентную фильтрацию
DNS может блокировать только на уровне домена/IP-адреса. DNS не может фильтровать контент в пределах разрешенного домена (например, отдельные видео) на "детальном" уровне.
================================================== =============================
Готовые списки блокировки (реклама, отслеживание, вредоносное ПО/фишинг) – рекомендуемые источники
================================================== =============================
dnscrypt-proxy отлично работает с предварительно созданными списками блокировки доменов. Это позволяет блокировать рекламу, трекеры и известные вредоносные/фишинговые домены на уровне DNS.
Важное замечание:- DNS-списки блокируют только домены, а не контент внутри домена.
- Чем больше/агрессивнее список, тем выше риск того, что легитимные веб-сайты/приложения перестанут корректно работать (ложные срабатывания).
- Поэтому всегда включайте список разрешенных имен (allowed-names.txt) для правильного определения исключений.
Рекомендуемые списки/проектыБольшой, предварительно созданный список доменов из экосистемы DNSCrypt.
URL:
https://download.dnscrypt.info/blacklists/domains/mybase.txt
Очень распространённый DNS-список блокировки, ориентированный на минимизацию сбоев. Обычно хороший выбор для приёмников/семейных пользователей.
Домашняя страница:
Известный проект по сбору мусора (на основе хостов, множество вариаций). Довольно «мощный» и потенциально более ресурсоемкий в плане обслуживания, в зависимости от выбранной вариации.
Проект:
https://github.com/StevenBlack/hosts
Какой из них мне выбрать? (Практическая рекомендация)- Если вам нужна минимальная поддержка: сначала протестируйте OISD.
- Если вам нужна большая универсальная база данных: mybase — это хорошая отправная точка.
- Если вам нужна максимальная частота блокировок и вы готовы мириться с ложными срабатываниями: StevenBlack/hosts (а затем добавьте список разрешенных хостов).
Интеграция в образ OpenATV (основной принцип)
Вы настроили переадресацию DNS на 127.0.0.1:53. Обычно этого достаточно:
- Сохраните один или несколько списков в локальный файл (например, /etc/dnscrypt-proxy/blocked-names.txt).
- Активируйте этот файл в dnscrypt-proxy.toml (см. раздел «Списки блокировки/разрешения»).
- Перезапустите службу (скрипт инициализации), чтобы список был перезагружен.
Примечание относительно обновлений:
Списки блокировки регулярно меняются. Рекомендуется использовать простой механизм обновления (например, периодически через cron/скрипт), который обновляет файл, а затем перезапускает dnscrypt-proxy. Важно: Обновления могут привести к появлению новых ложных срабатываний, поэтому список разрешенных адресов необходим, если система должна оставаться безопасной для семейного использования.
================================================== =============================
Ключевые параметры конфигурации (dnscrypt-proxy.toml) – для OpenATV
================================================== =============================
A) Слушатель
В вашей конфигурации сервер имен фиксирован на 127.0.0.1:53. Следовательно, dnscrypt-proxy должен прослушивать этот сервер:
listen_addresses = ['127.0.0.1:53']
B) Выбор резолвера
Если параметр server_names оставлен пустым, dnscrypt-proxy автоматически выберет подходящие резолверы из включенных источников.
# server_names = ['cloudflare', 'scaleway-fr']
Важные фильтры (типичные значения по умолчанию, в зависимости от цели):
ipv4_servers = true
ipv6_servers = false
dnscrypt_servers = true
doh_servers = true
require_nolog = true
require_nofilter = true
require_dnssec = false
C) Начальная загрузка (для запуска/загрузки списков)
Для первоначального запуска и обновления списков резолверов dnscrypt-proxy может потребоваться использование «обычных» DNS-серверов в качестве начальных. Это не ваши фактические резолверы.
bootstrap_resolvers = ['9.9.9.11:53', '8.8.8.8:53']
ignore_system_dns = true
netprobe_timeout = 60
netprobe_address = '9.9.9.9:53'
D) Кэш (для повышения производительности)
cache = true
cache_size = 4096
E) Активировать списки блокировки/разрешения (файлы)
Укажите файлы в конфигурации:
[blocked_names]
blocked_names_file = '/etc/dnscrypt-proxy/blocked-names.txt'
[allowed_names]
allowed_names_file = '/etc/dnscrypt-proxy/allowed-names.txt'
================================================== =============================
Интерфейс мониторинга (веб-интерфейс) – Доступ, имя пользователя/пароль
================================================== =============================
dnscrypt-proxy может предоставлять веб-интерфейс для мониторинга (статус, кэш и, при необходимости, журнал запросов). Эта функция отключена по умолчанию и должна включаться только по желанию пользователя.
Пример конфигурации:
[monitoring_ui]
enabled = true
listen_address = "0.0.0.0:9012"
username = "root"
password = "enigma2"
tls_certificate = ""
tls_key = ""
enable_query_log = true
privacy_level = 1
Важные примечания:
- Если установлено значение username = "", аутентификация отключена (не рекомендуется).
- Необходимо изменить учетные данные для входа по умолчанию.
- listen_address = "0.0.0.0:9012" означает: доступ из локальной сети разрешен.
- privacy_level:
◦ 0 = Полная информация (включая IP-адреса клиентов)
◦ 1 = IP-адреса клиентов анонимизированы (по умолчанию)
◦ 2 = Только агрегированная статистика (максимальная конфиденциальность)
- Параметр enable_query_log отображает последние запросы в пользовательском интерфейсе — это полезно для отладки, но является конфиденциальной информацией (для защиты данных).
================================================== =============================
Практические советы по поддержке/устранению неполадок
================================================== =============================
Если "ничего больше не работает" (нет разрешения имен):- Проверьте, запущен ли демон dnscrypt-proxy (скрипт инициализации/статус службы).
- Проверьте журналы на наличие ошибок (например, "недоступен резолвер", "ошибка синтаксиса конфигурации").
- Если затронуты только отдельные веб-сайты: проверьте списки блокировки/фильтры и, при необходимости, создайте список разрешенных сайтов.
- Включайте IPv6 только в том случае, если он надежно доступен.
================================================== =============================
Ссылки на исходный код (для технических специалистов)
================================================== =============================
Проект:
https://github.com/DNSCrypt/dnscrypt-proxy
Документация:
https://dnscrypt.info/doc
Списки блокировки (DNSCrypt):
https://download.dnscrypt.info/blacklists/
Пользовательский интерфейс мониторинга:
https://github.com/DNSCrypt/dnscrypt.../monitoring-UI
Вики/Документация:
https://github.com/DNSCrypt/dnscrypt-proxy/wiki
Конфигурация (Вики):
https://github.com/DNSCrypt/dnscrypt-proxy/configure
Списки/источники резолверов:
https://github.com/DNSCrypt/dnscrypt-proxy/on-Sources
Публичные резолверы (веб-просмотр):
https://dnscrypt.info/public-servers
Списки резолверов (репозиторий):
https://github.com/DNSCrypt/dnscrypt-resolvers
Статус/Мониторинг (публичный):
https://status.dnscrypt.info