Jump to content
ankar84

Защищаем DNS запросы с помощью dnscrypt-proxy2. Бонусом блокировка рекламы.

Recommended Posts

Данная тема создана по следам инструкций по использованию предыдущих версий первой ветки замечательного приложения dnscrypt-proxy, которое автор вернул к плотной разработке, правда, сменив язык на Go.

Для начала рекомендую ознакомиться со статьями о первой версии приложения:

Скрытый текст

 

Установка

Скрытый текст

Сразу уточню, вторая версия dnscrypt-proxy2 подойдет скорее тем пользователям, у кого роутер с достаточным количеством оперативной памяти, так как приложения на go довольно требовательны к ресурсам. Например, на моих Zyxel Keenetic Ultra и Keenetic Giga KN-1010 проблем с памятью нет, поэтому я и перешел на вторую ветку dnscrypt-proxy2 не особо раздумывая. Пользователи в комментариях данной темы сообщают, что dnscrypt-proxy2 без проблем работает на Keenetic II и Keenetic DSL.

Ознакомиться со всеми преимуществами dnscrypt-proxy2 перед первой версией можно на странице проекта на GitHub. Хочу заметить, что при использовании dnscrypt-proxy2 уже нет критичной необходимости в связке с dnsmasq или чем-то еще, так как dnscrypt-proxy2 сам умеет и кэшировать запросы и работать с несколькими серверами сразу, выбирая наиболее быстрый и ещё много чего.

На момент написания данной статьи актуальной версией является dnscrypt-proxy 2.0.21

Итак, начиная с версии 2.0.8 (кажется) dnscrypt-proxy2 собрана уважаемым @zyxmon в тестовой ветке репозитория Entware.

Пользователям Entware-3x и Entware-NG нужно перейти на репозиторий Entware с помощью следующих команд, введенных 2 раза подряд (за подробностями и решением проблем нужно пройти в соответствующую тему) иначе будете получать ошибку, что пакет dnscrypt-proxy2 не найден.


opkg update
opkg upgrade

 

Начиная с 2.0.11 пакет dnscrypt-proxy2 доступен для обычной установки из репозитория Entware следующей командой:


opkg install dnscrypt-proxy2 ca-certificates

Далее установим вспомогательные пакеты: 

iptables для того, чтобы "приземлить" все DNS запросы наших клиентов на наш dnscrypt-proxy2

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


opkg install cron iptables

Стандартный конфигурационный файл достаточно полно документирован комментариями по той или иной настройке, да и в целом по-умолчанию всё должно запуститься успешно командой:


/opt/etc/init.d/S09dnscrypt-proxy2 start

 

Замена основного DNS резолвера прошивки резолвером dnscrypt-proxy2

Скрытый текст

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

Так как будем использовать dnscrypt-proxy2 как единственный DNS сервер на роутере, необходимо отключить (а точнее перевести в специальный режим работы при котором компоненты прошивки все равно смогут обращаться к DNS резолверу прошивки через RPC оставив порт 53 свободным) основной DNS сервер NDMS.

Сделаем это следующими командами в Cli (не в Entware):


opkg dns-override
system configuration save

Кстати, если не хочется лишний раз запускать telnet или putty, то до cli (а точнее web cli) можно добраться и через WEBUI Кинетика по адресам:

http://my,keenetic.net/a или http://192.168.1.1/a

Там выбрать режим Parse, ввести нужную команду и нажать кнопку Send Request

Кстати, из приятного, там недавно даже подсказки по TAB работают!

Настройка клиентов на использование dnscrypt-proxy2 в качестве DNS сервера

Скрытый текст

Сейчас я рекомендую наиболее простой и универсальный способ настройки dnscrypt-proxy2 в качестве основного DNS сервера для всех устройств домашней сети и роутера в том числе.

Для этого необходимо пройти на страницу WEBUI Сетевые правила => Интернет-фильтр и в разделе Серверы DNS, нажимаем кнопку Добавить DNS сервер и вводим IP адрес нашего роутера (стандартно это 192.168.1.1, но в моем примере это будет 192.168.10.1)

image.png.009649a561e0437f049441af0a06086c.png

Прошу обратить внимание на предупреждение Этот IP-адрес присвоен интерфейсу Домашняя сеть. Не стоит его пугаться, все будет работать как нужно. Я думаю, это предупреждение сделано, чтобы не опытные пользователи не допустили ошибку в настройке. Но так как мы знаем, что делаем, предлагаю просто игнорировать данное предупреждение.

Вот и вся настройка "по новому". Теперь все устройства сети (включая сам роутер) будут использоваться наш dnscrypt-proxy2 сервер для разрешения имен.

Но для альтернативы оставлю "старый" способ настройки клиентов (как я раньше их настраивал)

Скрытый текст

Настроим клиентов домашней сети

Откроем раздел WEBUI Мои сети и Wi-Fi => Домашняя сеть и перейдем к подразделу Параметры IP и раскроем там ссылку Показать настройки DHCP

Затем в поле Сервер DNS 1 вводим IP адрес нашего роутера в домашней сети (обычно 192.168.1.1, но у меня настроена на адрес 192.168.10.1)

image.png.e9f719c349f7cbd73c1f1358e3c4a7a7.png

И нажимаем кнопку Сохранить.

Теперь все клиенты будут в качестве DNS сервера получать адрес, на котором слушает dnscrypt-proxy2

Теперь установим DNS сервер для нашего основного интернет провайдера. Тут у всех настройки могут быть разные, так как зависят от провайдера и способа подключения к сети Интернет. У меня самый типичный IPoE провайдер, поэтому для меня настройка будет следующая.

Открываем раздел WEBUI Интернет => Проводной и переходим к подразделу Параметры IP и DNS и нажимаем ссылку Показать дополнительные настройки IPoE

В поле DNS 1 вводим IP адрес роутера в домашней сети (обычно 192.168.1.1, но у меня настроена на адрес 192.168.10.1)

image.png.9d1e2c820d75c8e6f037c8dd982f723a.png

И нажимаем кнопку Сохранить

Теперь и сам роутер будет использовать dnscrypt-proxy2 для разрешения имен.

Но, все же рекомендую "новый" способ настройки клиентов через страницу Интернет-фильтр.

 

Хранение файлов DNSCrypt и некоторые советы по конфигурации

Скрытый текст

По-умолчанию, файл конфигурации создается в папке /opt/etc/dnscrypt-proxy.toml

Хотя лично мне гораздо удобнее когда все файлы, которые необходимы приложению расположены в отдельной папке, например, /opt/etc/dnscrypt/

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

Во-первых, когда все файлы, с которыми DNSCrypt работает располагаются рядом, под рукой, это удобно.

Во-вторых, не создается лишнего беспорядка в корне папки конфигурации - /opt/etc/

В-третьих, нет никаких проблем при обновлениях приложения, ничего не нужно править.

Итак, создаем отдельную папку для всех файлов (кроме файла конфигурации) и не забываем указывать путь до всех необходимых файлов с учетом этой папки


mkdir -p /opt/etc/dnscrypt

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

Скрытый текст


# cat /opt/etc/dnscrypt-proxy.toml

##############################################
#                                            #
#        dnscrypt-proxy configuration        #
#                                            #
##############################################

## This is an example configuration file.
## You should adjust it to your needs, and save it as "dnscrypt-proxy.toml"
##
## Online documentation is available here: https://dnscrypt.info/doc


##################################
#         Global settings        #
##################################

## List of servers to use
##
## Servers from the "public-resolvers" source (see down below) can
## be viewed here: https://dnscrypt.info/public-servers
##
## If this line is commented, all registered servers matching the require_* filters
## will be used.
##
## The proxy will automatically pick the fastest, working servers from the list.
## Remove the leading # first to enable this; lines starting with # are ignored.

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

## List of local addresses and ports to listen to. Can be IPv4 and/or IPv6.
## Note: When using systemd socket activation, choose an empty set (i.e. [] ).

listen_addresses = ['0.0.0.0:53']

## Maximum number of simultaneous client connections to accept

max_clients = 250

## Switch to a non-privileged system user after listening sockets have been created.
## Two processes will be running.
## The first one will keep root privileges, but is only a supervisor, that does nothing
## except create the sockets, manage the service, and restart it if it crashes.
## The second process is the service itself, and that one will always run as a different
## user.
## Note (1): this feature is currently unsupported on Windows.
## Note (2): this feature is not compatible with systemd socket activation.

user_name = 'nobody'

## Require servers (from static + remote sources) to satisfy specific properties

# Use servers reachable over IPv4
ipv4_servers = true

# Use servers reachable over IPv6 -- Do not enable if you don't have IPv6 connectivity
ipv6_servers = false

# Use servers implementing the DNSCrypt protocol
dnscrypt_servers = true

# Use servers implementing the DNS-over-HTTPS protocol
doh_servers = true

## Require servers defined by remote sources to satisfy specific properties

# Server must support DNS security extensions (DNSSEC)
require_dnssec = false

# Server must not log user queries (declarative)
require_nolog = false

# Server must not enforce its own blacklist (for parental control, ads blocking...)
require_nofilter = false


## Always use TCP to connect to upstream servers.
## This can be can be useful if you need to route everything through Tor.
## Otherwise, leave this to `false`, as it doesn't improve security
## (dnscrypt-proxy will always encrypt everything even using UDP), and can
## only increase latency.

force_tcp = false


## HTTP / SOCKS proxy
## Uncomment the following line to route all TCP connections to a local Tor node
## Tor doesn't support UDP, so set `force_tcp` to `true` as well.

# proxy = "socks5://127.0.0.1:9050"

## How long a DNS query will wait for a response, in milliseconds

timeout = 2500

## Keepalive for HTTP (HTTPS, HTTP/2) queries, in seconds

keepalive = 30


## Load-balancing strategy: 'p2' (default), 'ph', 'fastest' or 'random'

lb_strategy = 'p2'


## Log level (0-6, default: 2 - 0 is very verbose, 6 only contains fatal errors)

# log_level = 2


## log file for the application

#log_file = 'dnscrypt-proxy.log'


## Use the system logger (syslog on Unix, Event Log on Windows)

use_syslog = true


## Delay, in minutes, after which certificates are reloaded

cert_refresh_delay = 240


## DNSCrypt: Create a new, unique key for every single DNS query
## This may improve privacy but can also have a significant impact on CPU usage
## Only enable if you don't have a lot of network load

# dnscrypt_ephemeral_keys = false


## DoH: Disable TLS session tickets - increases privacy but also latency

# tls_disable_session_tickets = false


## DoH: Use a specific cipher suite instead of the server preference
## 49199 = TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
## 49195 = TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
## 52392 = TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305
## 52393 = TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305
##
## On non-Intel CPUs such as MIPS routers and ARM systems (Android, Raspberry Pi...),
## the following suite improves performance.
## This may also help on Intel CPUs running 32-bit operating systems.
##
## Keep tls_cipher_suite empty if you have issues fetching sources or
## connecting to some DoH servers. Google and Cloudflare are fine with it.

#tls_cipher_suite = [52392, 49199]


## Fallback resolver
## This is a normal, non-encrypted DNS resolver, that will be only used
## for one-shot queries when retrieving the initial resolvers list, and
## only if the system DNS configuration doesn't work.
## No user application queries will ever be leaked through this resolver,
## and it will not be used after IP addresses of resolvers URLs have been found.
## It will never be used if lists have already been cached, and if stamps
## don't include host names without IP addresses.
## It will not be used if the configured system DNS works.
## A resolver supporting DNSSEC is recommended. This may become mandatory.
##
## People in China may need to use 114.114.114.114:53 here.
## Other popular options include 8.8.8.8 and 1.1.1.1.

fallback_resolver = '9.9.9.9:53'


## Never let dnscrypt-proxy try to use the system DNS settings;
## unconditionally use the fallback resolver.

ignore_system_dns = true

## Maximum time (in seconds) to wait for network connectivity before
## initializing the proxy.
## Useful if the proxy is automatically started at boot, and network
## connectivity is not guaranteed to be immediately available.
## Use 0 to disable.

netprobe_timeout = 30


## Offline mode - Do not use any remote encrypted servers.
## The proxy will remain fully functional to respond to queries that
## plugins can handle directly (forwarding, cloaking, ...)

# offline_mode = false


## Automatic log files rotation

# Maximum log files size in MB
log_files_max_size = 10

# How long to keep backup files, in days
log_files_max_age = 7

# Maximum log files backups to keep (or 0 to keep all backups)
log_files_max_backups = 1



#########################
#        Filters        #
#########################

## Immediately respond to IPv6-related queries with an empty response
## This makes things faster when there is no IPv6 connectivity, but can
## also cause reliability issues with some stub resolvers.
## Do not enable if you added a validating resolver such as dnsmasq in front
## of the proxy.

block_ipv6 = false



##################################################################################
#        Route queries for specific domains to a dedicated set of servers        #
##################################################################################

## Example map entries (one entry per line):
## example.com 9.9.9.9
## example.net 9.9.9.9,8.8.8.8,1.1.1.1

forwarding_rules = '/opt/etc/dnscrypt/forwarding-rules.txt'

###############################
#        Cloaking rules       #
###############################

## Cloaking returns a predefined address for a specific name.
## In addition to acting as a HOSTS file, it can also return the IP address
## of a different name. It will also do CNAME flattening.
##
## Example map entries (one entry per line)
## example.com     10.1.1.1
## www.google.com  forcesafesearch.google.com

cloaking_rules = '/opt/etc/dnscrypt/cloaking-rules.txt'

###########################
#        DNS cache        #
###########################

## Enable a DNS cache to reduce latency and outgoing traffic

cache = true

## Cache size

#cache_size = 512
cache_size = 2048

## Minimum TTL for cached entries

cache_min_ttl = 600


## Maximum TTL for cached entries

cache_max_ttl = 86400


## Minimum TTL for negatively cached entries

cache_neg_min_ttl = 60


## Maximum TTL for negatively cached entries

cache_neg_max_ttl = 600


###############################
#        Query logging        #
###############################

## Log client queries to a file

[query_log]

  ## Path to the query log file (absolute, or relative to the same directory as the executable file)

 # file = '/opt/tmp/query.log'


  ## Query log format (currently supported: tsv and ltsv)

  format = 'tsv'


  ## Do not log these query types, to reduce verbosity. Keep empty to log everything.

  # ignored_qtypes = ['DNSKEY', 'NS']



############################################
#        Suspicious queries logging        #
############################################

## Log queries for nonexistent zones
## These queries can reveal the presence of malware, broken/obsolete applications,
## and devices signaling their presence to 3rd parties.

[nx_log]

  ## Path to the query log file (absolute, or relative to the same directory as the executable file)

  #file = '/opt/tmp/nx.log'


  ## Query log format (currently supported: tsv and ltsv)

  format = 'tsv'



######################################################
#        Pattern-based blocking (blacklists)        #
######################################################

## Blacklists are made of one pattern per line. Example of valid patterns:
##
##   example.com
##   =example.com
##   *sex*
##   ads.*
##   ads*.example.*
##   ads*.example[0-9]*.com
##
## Example blacklist files can be found at https://download.dnscrypt.info/blacklists/
## A script to build blacklists from public feeds can be found in the
## `utils/generate-domains-blacklists` directory of the dnscrypt-proxy source code.

[blacklist]

  ## Path to the file of blocking rules (absolute, or relative to the same directory as the executable file)

  # blacklist_file = 'blacklist.txt'
   blacklist_file = '/opt/etc/dnscrypt/blacklist-domains.txt'

  ## Optional path to a file logging blocked queries

#log_file = '/opt/tmp/blocked.log'
#log_file = '/opt/etc/dnscrypt/blocked.log'

  ## Optional log format: tsv or ltsv (default: tsv)

log_format = 'tsv'


###########################################################
#        Pattern-based IP blocking (IP blacklists)        #
###########################################################

## IP blacklists are made of one pattern per line. Example of valid patterns:
##
##   127.*
##   fe80:abcd:*
##   192.168.1.4

[ip_blacklist]

  ## Path to the file of blocking rules (absolute, or relative to the same directory as the executable file)

  # blacklist_file = 'ip-blacklist.txt'


  ## Optional path to a file logging blocked queries

  # log_file = 'ip-blocked.log'


  ## Optional log format: tsv or ltsv (default: tsv)

  # log_format = 'tsv'



######################################################
#   Pattern-based whitelisting (blacklists bypass)   #
######################################################

## Whitelists support the same patterns as blacklists
## If a name matches a whitelist entry, the corresponding session
## will bypass names and IP filters.
##
## Time-based rules are also supported to make some websites only accessible at specific times of the day.

[whitelist]

  ## Path to the file of whitelisting rules (absolute, or relative to the same directory as the executable file)

  # whitelist_file = 'whitelist.txt'
    whitelist_file = '/opt/etc/dnscrypt/domains-whitelist.txt'

  ## Optional path to a file logging whitelisted queries

  # log_file = 'whitelisted.log'


  ## Optional log format: tsv or ltsv (default: tsv)

  # log_format = 'tsv'



##########################################
#        Time access restrictions        #
##########################################

## One or more weekly schedules can be defined here.
## Patterns in the name-based blocklist can optionally be followed with @schedule_name
## to apply the pattern 'schedule_name' only when it matches a time range of that schedule.
##
## For example, the following rule in a blacklist file:
## *.youtube.* @time-to-sleep
## would block access to YouTube only during the days, and period of the days
## define by the 'time-to-sleep' schedule.
##
## {after='21:00', before= '7:00'} matches 0:00-7:00 and 21:00-0:00
## {after= '9:00', before='18:00'} matches 9:00-18:00

[schedules]

  # [schedules.'time-to-sleep']
  # mon = [{after='21:00', before='7:00'}]
  # tue = [{after='21:00', before='7:00'}]
  # wed = [{after='21:00', before='7:00'}]
  # thu = [{after='21:00', before='7:00'}]
  # fri = [{after='23:00', before='7:00'}]
  # sat = [{after='23:00', before='7:00'}]
  # sun = [{after='21:00', before='7:00'}]

  # [schedules.'work']
  # mon = [{after='9:00', before='18:00'}]
  # tue = [{after='9:00', before='18:00'}]
  # wed = [{after='9:00', before='18:00'}]
  # thu = [{after='9:00', before='18:00'}]
  # fri = [{after='9:00', before='17:00'}]



#########################
#        Servers        #
#########################

## Remote lists of available servers
## Multiple sources can be used simultaneously, but every source
## requires a dedicated cache file.
##
## Refer to the documentation for URLs of public sources.
##
## A prefix can be prepended to server names in order to
## avoid collisions if different sources share the same for
## different servers. In that case, names listed in `server_names`
## must include the prefixes.
##
## If the `urls` property is missing, cache files and valid signatures
## must be already present; This doesn't prevent these cache files from
## expiring after `refresh_delay` hours.

[sources]

  ## An example of a remote source from https://github.com/DNSCrypt/dnscrypt-resolvers

  [sources.'public-resolvers']
  urls = ['https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v2/public-resolvers.md', 'https://download.dnscrypt.info/resolvers-list/v2/public-resolvers.md']
  cache_file = '/opt/etc/dnscrypt/public-resolvers.md'
  minisign_key = 'RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3'
  refresh_delay = 72
  prefix = ''

  ## Another example source, with resolvers censoring some websites not appropriate for children
  ## This is a subset of the `public-resolvers` list, so enabling both is useless

  #  [sources.'parental-control']
  #  urls = ['https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v2/parental-control.md', 'https://download.dnscrypt.info/resolvers-list/v2/parental-control.md']
  #  cache_file = 'parental-control.md'
  #  minisign_key = 'RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3'

## Optional, local, static list of additional servers
## Mostly useful for testing your own servers.

[static]

  # [static.'google']
  # stamp = 'sdns://AgUAAAAAAAAAAAAOZG5zLmdvb2dsZS5jb20NL2V4cGVyaW1lbnRhbA'

#

 

 

Приведу некоторые отличия моего конфигурационного файла от стандартного.


listen_addresses = ['0.0.0.0:53']

В отличии от дефолтной строчки, где сервер будет слушать на 127.0.0.1 мне было необходимо, чтобы сервер "слушал" на стандартном адресе роутера в домашней сети 192.168.1.1, чтобы я мог прописать данный сервер в настройках DHCP как сервер DNS для всех устройств моей домашней сети. Но этого можно добиться указав специальный адрес 0.0.0.0 Тогда, насколько я понял, dnscrypt-proxy2 будет слушать на всех своих интерфейсах (включая IPv6 - если он есть). Думаю, что данная настройка подойдет большинству пользователей.

Рекомендую включить опцию use_syslog и смотреть события DNSCrypt в веб интерфейсе Кинетика на странице Диагностика - Системный журнал


use_syslog = true

Но если все же привычно работать с логами в виде файлов, то вот ваш вариант


#use_syslog = true
log_file = '/opt/var/log/dnscrypt-proxy-v2.log'

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


log_level = 0

Когда все работает хорошо и стабильно, уровень логгирования нужно вернуть на исходный - 2 (можно и выше)


log_level = 2

Далее идет fallback_resolver. Вообще его можно не менять, но мне захотелось поставить популярный ныне CloudFlare DNS с его красивым адресом.


fallback_resolver = '1.1.1.1:53'


Размер кэша я ставлю в 4 раза больше, чем по-умолчанию. Можно не менять.

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


cache_size = 2048

Полезная с точки зрения безопасности фукнция user_name, которая служит для указания пользователя, под которым будет работать основная служба dnscrypt-proxy2.  Если у вас возникают проблемы с запуском при включении данной опции, просто закомментируйте ее. У меня работает. 


user_name = 'nobody'

В качестве значения параметра blacklist_file указываем полный путь до вашего файла с блокируемыми доменными именами. 


blacklist_file = '/opt/etc/dnscrypt/blacklist-domains.txt'

Для диагностики корректности блокировки того или иного ресурса или для отлова false positive блокировок рекомендую включить журнал того, что блокируется: 


log_file = '/opt/var/log/blocked.log'
log_format = 'tsv'

Далее у меня прописан белый список доменных имен, которые не нужно блокировать никогда. На самом деле, данная опция появилась в последних версиях (кажется в 2.0.11) и ранее белый список обрабатывался скриптом генерации черного списка блокируемых адресов. То есть вхождения белого списка удалялись из черного при генерации. Теперь вот отдельная опция:


whitelist_file = '/opt/etc/dnscrypt/domains-whitelist.txt'

 

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

Скрытый текст

Для нормальной работы скрипта генерации файла blacklist-domains.txt необходимо установить еще минимально 2 пакета:


opkg install python-base python-urllib3

Для скачивания всего необходимого и генерации списка рекламных доменов рекомендую воспользоваться скриптом от @TheBB вот из этого поста


~ # cat get-dnscrypt-files.sh 
#!/opt/bin/sh

DIR="/opt/etc/dnscrypt"
FILE="generate-domains-blacklist.py"
URL="https://raw.githubusercontent.com/jedisct1/dnscrypt-proxy/master/utils/generate-domains-blacklists"

# check curl
if [ ! -f "/opt/bin/curl" ]; then
	opkg install curl --force-reinstall
fi

# check dir
if [ ! -d "$DIR" ]; then
	mkdir -p $DIR
fi

cd $DIR

# download files
curl -O $URL/domains-blacklist-all.conf \
	-O $URL/domains-blacklist-local-additions.txt \
	-O $URL/domains-blacklist.conf \
	-O $URL/domains-time-restricted.txt \
	-O $URL/domains-whitelist.txt \
	-O $URL/$FILE

# fix shebang & make executable
sed -i -e 's,#!.*,#!/opt/bin/python,' $FILE && chmod +x $FILE

# create blacklist
./$FILE -i > domains-blacklist.txt

 

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

Скрытый текст

Я этот список еженедельно обновляю с помощью cron:

Создаем файл скрипта /opt/etc/cron.weekly/generate-blacklist для еженедельного обновления со следующим содержимым:



#!/opt/bin/sh
cd /opt/etc/dnscrypt/
python generate-domains-blacklist.py -i > /opt/etc/dnscrypt/blacklist-domains.txt
/opt/etc/init.d/S09dnscrypt-proxy2 restart

И не забываем сделать его исполняемым:



chmod +x /opt/etc/cron.weekly/generate-blacklist

И вот вариант @TheBB вот из этого поста

Скрытый текст


/opt/etc # cat ./generate.sh 
#!/opt/bin/sh

DIR="/opt/etc/dnscrypt"
SCRIPT="/opt/etc/init.d/S09dnscrypt-proxy2"
num=5

#cd /opt/etc/dnscrypt
cd $DIR

while [ $num -gt 0 ]; do
    ./generate-domains-blacklist.py > blacklist.txt;
    if [ $? -eq 0 ]; then
        mv blacklist.txt domains-blacklist.txt
	logger -t dnscrypt-proxy "blacklist  updated successfully"
#	echo "OK!"
	$SCRIPT restart
        exit 0;
    fi
    logger -t dnscrypt-proxy "try again"
#    echo "Failed! Try again..."
    sleep 10
    let num=$num-1
done
exit 1;

до 5 попыток (меняем на нужное самостоятельно) генерации списка, с интервалом перезапуска в 10 сек (взято "с потолка", можно выставить своё значение); после первой удачной попытки генерации, промежуточный файл переносится взамен старого и dnscrypt-proxy перезапускается; если все попытки окажутся неудачными, скрипт завершается до следующего запуска (вручную или по заданию cron`a), файл списка остаётся нетронутым.

 

Добавляем возможность разрешать домены в зоне *.lib

Скрытый текст

Переходим к настройке dnscrypt серверов.

И вот тут я очень рекомендую использовать серверы проекта OpenNIC.

На данный момент я нашел универсальный способ использования наиболее быстрых dnscrypt серверов и не терять возможности разрешать нужные имена доменов в зоне *.lib с помощью значительно более медленных серверов проекта OpenNIC

Для этого нужно воспользоваться опцией forwarding_rules конфигурационного файла


forwarding_rules = '/opt/etc/dnscrypt/forwarding-rules.txt'

Вот что на данный момент у меня в этом файле


cat /opt/etc/dnscrypt/forwarding-rules.txt
rutor.lib 91.217.137.37,185.117.154.144,95.181.211.6
flibusta.lib 91.217.137.37,185.117.154.144,95.181.211.6
rutracker.lib 91.217.137.37,185.117.154.144,95.181.211.6

Серверы в этом файле время от времени придется обновлять. Брать серверы вот тут. Для России сверху нужно выбрать RU

Но можно использовать исключительно серверы проекта OpenNIC. Тогда настройка в конфигурационном файле будет вот такая (закомментирован основной список публичных серверов и добавлен список только серверов проекта OpenNIC


#[sources.'public-resolvers']
#urls = ['https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v2/public-resolvers.md', 'https://download.dnscrypt.info/resolvers-list/v2/public-resolvers.md']
#cache_file = '/opt/etc/dnscrypt/public-resolvers.md'
#minisign_key = 'RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3'
#refresh_delay = 72
#prefix = ''

[sources.'opennic']
urls = ['https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v2/opennic.md', 'https://download.dnscrypt.info/resolvers-list/v2/opennic.md']
minisign_key = 'RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3'
cache_file = '/opt/etc/dnscrypt/opennic.md'
refresh_delay = 72
prefix = ''

Почему именно OpenNIC

Используя именно эти серверы можно получить один замечательный бонус - разрешение EmerCoin доменных имен типа *.lib и других.

Благодаря этому можно пользоваться одним популярным торрент трекером по его доменному имени в зоне *.lib не занимаясь постоянным поиском живых зеркал.

Опять же, эти серверы вроде бы не вносят своих блокировок и не логгируют запросы. Хотя как знать. Остается им просто доверять (или не доверять).

Так же я НЕ рекомендую использовать серверы проекта компании Cisco - OpenDNS. Недавно @Александр Рыжов в канале Keenetic в одном известном мессенджере сообщил, что Cisco заворачивала на себя трафик mail.ru подставляя при этом фейковый сертификат, так что будьте бдительны.

Так же прошу обратить внимание, большинство серверов проекта OpenNIC с поддержкой dnscrypt находятся в Европе и Америке, так что быстрых ответов ждать не приходится.

У меня самый быстрый сервер дает около 100 мс, и на том спасибо.

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

Перехват всех DNS запросов на роутере. "Приземление" DNS трафика

Скрытый текст

Теперь переходим к очень важной теме, изучая которую я потратил много времени. А именно, речь пойдет об использовании только локального DNS сервера dnscryprt-proxy2 вместо провайдерских DNS серверов на всех устройствах сети.

Суть здесь вот в чем. Начиная, кажется. с 6 версии ОС Андроид, видимо, для повышения стабильности (и, имхо, для утоления своей тотальной любознательности) параллельно посылает запросы и на тот сервер, что указан в сетевых настройках, которые получены устройством от DHCP сервера и на сервер 8.8.8.8

Я очень долго не мог понять, почему на всех устройствах я не вижу рекламу, так как она блокируется на роутере, но всегда вижу рекламу на своем Андроид смартфоне. 

Тогда я с помощью захвата пакетов все и обнаружил. Кстати, более простым способом было посмотреть трафик в Entware с помощью tcpdump.


tcpdump -i br0

или посмотрим только трафик на сетевой порт 53


tcpdump port 53 -n -nn -v

 

Итак, для начала избавимся от провайдерских DNS серверов.

Для этого в очередной раз рекомендую ознакомиться со статьей базы знаний Использование публичных DNS-серверов в интернет-центре.

В cli вводим вот эти 2 замечательные команды:


interface ISP no ip dhcp client name-servers
system configuration save

От слежки провайдера избавились, осталось приземлить все DNS запросы в корпорацию добра на наш сервер dnscrypt-proxy2. Здесь мне так же помог @Александр Рыжов на канале Keenetic.

У данного метода есть и плюсы - например, при подмене локального DNS сервера вирусом на компьютере с Windows запросы пойдут все равно на роутер, а не DNS сервер злоумышленников. Есть и минусы, например, не весь трафик, который идет по UDP\53 это не обязательно DNS запросы, это вполне может быть портом для подключения к, положим, OpenVPN серверу. Но так или иначе, для большинства домашних сетей данный способ приносит больше плюсов, имхо.

В вашем любимом текстовом редакторе создаем файл скрипта /opt/etc/ndm/netfilter.d/10-ClientDNS-Redirect.sh


#!/bin/sh
[ "$type" == "ip6tables" ] && exit 0
[ "$table" != "nat" ] && exit 0
[ -z "$(iptables -nvL -t nat | grep "to:192.168.1.1:53")" ] && iptables -t nat -I PREROUTING -p udp --dport 53 -j DNAT --to-destination 192.168.1.1:53
exit 0

Либо, если любимого редактора еще нет, можно воспользоваться вот такой длинной командой:


echo -e '#!/bin/sh\n[ "$type" == "ip6tables" ] && exit 0\n[ "$table" != "nat" ] && exit 0\n[ -z "$(iptables -nvL -t nat | grep "to:192.168.1.1:53")" ] && iptables -t nat -I PREROUTING -p udp --dport 53 -j DNAT --to-destination 192.168.1.1:53\nexit 0' >> /opt/etc/ndm/netfilter.d/10-ClientDNS-Redirect.sh

Ранее использовалась конструкция "$(iptables-save | grep " --dport 53 -j DNAT --to-destination 192.168.1.1")" но из-за некоторых проблем она была заменена конструкцией "$(iptables -nvL -t nat | grep "to:192.168.1.1:53")" которая должна отрабатывать быстрее и стабильнее.

Далее делаем созданный скрипт исполняемым:


chmod +x /opt/etc/ndm/netfilter.d/10-ClientDNS-Redirect.sh

Вероятно, скрипт можно написать значительно изящнее и ловить не только UDP, но и TCP трафик, но у меня получилось только вот так. В ответах, гуру баша могут подсказать как сделать правильнее, подправлю для общего блага. Мне "приземление" только UDP трафика на 53 порт роутера помогло полностью избавиться от рекламы на всех устройствах домашней сети. Так что TCP можно и не трогать. Осталось еще научиться "приземлять" IPv6 запросы, так как этот самый IPv6 понемногу и постепенно проникает в нашу жизнь.

Диагностика проблем с запуском\работой.

Скрытый текст

Рекомендую для диагностики запустить DNSCrypt из консоли строкой запуска из скрипта, то есть командой:


dnscrypt-proxy -config /opt/etc/dnscrypt-proxy.toml

Путь до файла конфигурации при необходимости можно поправить на ваш, по-умолчанию путь такой -config /opt/etc/dnscrypt-proxy.toml

Для начала посмотрим журнал dnscrypt-proxy2 в том месте, где вы его настроили. Я смотрю вот такой командой:


# tail -f -n 30 /opt/var/log/dnscrypt-proxy-v2.log

Либо если включили syslog, то события смотрим веб интерфейсе Кинетика на странице Диагностика - Системный журнал

Если dnscrypt-proxy2 "падает" сразу после запуска попробуйте закомментировать опцию user_name = 'nobody'

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


~ # ps | grep dnscrypt
19766 root      655m S    dnscrypt-proxy -config /opt/etc/dnscrypt/dnscrypt-proxy.toml
19792 nobody    655m S    /opt/sbin/dnscrypt-proxy -config /opt/etc/dnscrypt/dnscrypt-proxy.toml -child
20271 root      4780 S    grep dnscrypt
~ #

Проверить, слушается ли порт 53. Обратите внимание, слушать должен именно процесс dnscrypt-proxy, а не ndmproxy


# netstat -tulnp | grep dnscrypt
tcp        0      0 :::53                   :::*                    LISTEN      24571/dnscrypt-prox
udp        0      0 :::53                   :::*                                24571/dnscrypt-prox

 

Опять же все ограничения, которые касались использования первой версии dnscrypt-proxy справедливы и для второй, ссылки на инструкции я приложил выше.

Это моя первая инструкция в этом разделе, так что сильно не пинать, а конструктивная критика крайне приветствуется. Если есть, что нужно подправить\доработать - пишите, вместе сделаем использование данного пакета проще и эффективнее.

Изменения шапки.

Скрытый текст

Обновление информации, исправления. Добавил ссылку на пост по генерации файла блокировки

31.03.2019 Шапка значительно переработана в плане оформления, в части блокировки и некоторых настроек

В итоге:

  • Защитили весь свой DNS трафик от перехвата со стороны провайдера и Гугла
  • Заблокировали рекламу на всех устройствах домашней сети (это наиболее актуально для всяких Смарт ТВ и других девайсов не нет возможности блокировать рекламу на самом устройстве)
  • Получили разрешение имен *.lib и других, чем немного упростили себе жизнь в все более блокируемом интернете
Edited by ankar84
31.03.2019 Шапка значительно переработана в плане оформления, в части блокировки и некоторых настроек
  • Thanks 8
  • Upvote 7

Share this post


Link to post
Share on other sites

exeigor

[2.dnscrypt-cert.quad9.net.] the key validity period for this server is excessively long (367 days), significantly reducing reliability and forward security.

"....ключевой срок действия для этого сервера чрезмерно длинен (367 дней), значительно уменьшив надежность и передовую безопасность"

https://github.com/jedisct1/dnscrypt-proxy/issues/206

Если не принципиально то предложу такой вариант исправления то что у вас

Скрытый текст

#server_names = ['cloudflare']
...
dnscrypt_ephemeral_keys = true				########### 
tls_disable_session_tickets = false			###########
tls_cipher_suite = [52392, 49199]			###########
...
netprobe_timeout = 30
...
[sources]
#  [sources.'public-resolvers']
#  urls = ['https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v2/public-resolvers.md', 'https://download.dnscrypt.info/resolvers-list/v2/public-resolvers.md']
#  cache_file = '/opt/etc/dnscrypt/public-resolvers.md'
#  minisign_key = 'RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3'
#  refresh_delay = 72
#  prefix = ''
[sources.'Quad9']
urls = ['https://www.quad9.net/quad9-resolvers.md']
minisign_key = 'RWQBphd2+f6eiAqBsvDZEBXBGHQBJfeG6G+wJPPKxCZMoEQYpmoysKUN'
cache_file = '/opt/etc/dnscrypt/quad9-resolvers.md'
refresh_delay = 72
prefix = 'quad9-'

[static]
#Cloudflare DNS (anycast) - aka 1.1.1.1 / 1.0.0.1  
[static.'CloudFlare']
stamp = 'sdns://AgcAAAAAAAAABzEuMC4wLjGgENk8mGSlIfMGXMOlIlCcKvq7AVgcrZxtjon911-ep0cg63Ul-I8NlFj4GplQGb_TTLiczclX57DvMV8Q-JdjgRgSZG5zLmNsb3VkZmxhcmUuY29tCi9kbnMtcXVlcnk'

 

пробы

вариант A для проверки добавил "quad9-dnscrypt-ip4-filter-pri"

Скрытый текст

server_names = ['cloudflare', 'cpunks-ru', 'quad9-dnscrypt-ip4-filter-pri', 'yandex']
...
# dnscrypt_ephemeral_keys = false
# tls_disable_session_tickets = false
# tls_cipher_suite = [52392, 49199]
...
# netprobe_timeout = 30			
...
[sources]
[sources.'public-resolvers']
  urls = ['https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v2/public-resolvers.md', 'https://download.dnscrypt.info/resolvers-list/v2/public-resolvers.md']
  cache_file = 'public-resolvers.md'
  minisign_key = 'RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3'
  refresh_delay = 72
  prefix = ''

## Quad9 over DNSCrypt - https://quad9.net/
[sources.quad9-resolvers]
  urls = ["https://www.quad9.net/quad9-resolvers.md"]
  minisign_key = "RWQBphd2+f6eiAqBsvDZEBXBGHQBJfeG6G+wJPPKxCZMoEQYpmoysKUN"
  cache_file = "quad9-resolvers.md"
  refresh_delay = 72
  prefix = "quad9-"

[static]				
[static.'google']
#stamp = 'sdns://AgEAAAAAAAAAACDyXGrcc5eNecJ8nomJCJ-q6eCLTEn6bHic0hWGUwYQaA5kbnMuZ29vZ2xlLmNvbQ0vZXhwZXJpbWVudGFs'
stamp = 'sdns://AgUAAAAAAAAAACAe9iTP_15r07rd8_3b_epWVGfjdymdx-5mdRZvMAzBuQ5kbnMuZ29vZ2xlLmNvbQ0vZXhwZXJpbWVudGFs'

[static.'doh-ip4-filter-pri']
## Quad9 (anycast) dnssec/no-log/filter 9.9.9.9
stamp = 'sdns://AgMAAAAAAAAABzkuOS45LjmAABJkbnM5LnF1YWQ5Lm5ldDo0NDMKL2Rucy1xdWVyeQ'

[static.'cloudflare']
#Cloudflare DNS (anycast) - aka 1.1.1.1 / 1.0.0.1
stamp = 'sdns://AgcAAAAAAAAABzEuMC4wLjGgENk8mGSlIfMGXMOlIlCcKvq7AVgcrZxtjon911-ep0cg63Ul-I8NlFj4GplQGb_TTLiczclX57DvMV8Q-JdjgRgSZG5zLmNsb3VkZmxhcmUuY29tCi9kbnMtcXVlcnk'

[static.'cloudflare-ipv6']
## Cloudflare DNS over IPv6 (anycast)
stamp = 'sdns://AgcAAAAAAAAAGVsyNjA2OjQ3MDA6NDcwMDo6MTExMV06NTOgENk8mGSlIfMGXMOlIlCcKvq7AVgcrZxtjon911-ep0cg63Ul-I8NlFj4GplQGb_TTLiczclX57DvMV8Q-JdjgRgSZG5zLmNsb3VkZmxhcmUuY29tCi9kbnMtcXVlcnk'

и в логе


[2019-04-09 08:11:00] [NOTICE] Source [quad9-resolvers.md] loaded
[2019-04-09 08:11:00] [NOTICE] Source [public-resolvers.md] loaded
[2019-04-09 08:11:00] [NOTICE] dnscrypt-proxy 2.0.21
[2019-04-09 08:11:00] [NOTICE] Now listening to ...... [UDP]
[2019-04-09 08:11:00] [NOTICE] Now listening to ...... [TCP]
[2019-04-09 08:11:01] [NOTICE] [quad9-dnscrypt-ip4-filter-pri] OK (crypto v1) - rtt: 62ms
[2019-04-09 08:11:02] [NOTICE] [cloudflare] OK (DoH) - rtt: 40ms
[2019-04-09 08:11:02] [NOTICE] [cpunks-ru] OK (crypto v1) - rtt: 22ms
[2019-04-09 08:11:02] [NOTICE] [yandex] OK (crypto v1) - rtt: 18ms
[2019-04-09 08:11:02] [NOTICE] Server with the lowest initial latency: yandex (rtt: 18ms)
[2019-04-09 08:11:02] [NOTICE] dnscrypt-proxy is ready - live servers: 4

 

вариант B 

Скрытый текст

У брал в конфиге строчку "server_names"

и лог


[2019-04-09 08:38:09] [NOTICE] Source [public-resolvers.md] loaded
[2019-04-09 08:38:09] [NOTICE] Source [quad9-resolvers.md] loaded
[2019-04-09 08:38:09] [NOTICE] dnscrypt-proxy 2.0.21
[2019-04-09 08:38:09] [NOTICE] Now listening to ..... [UDP]
[2019-04-09 08:38:09] [NOTICE] Now listening to ..... [TCP]
[2019-04-09 08:38:10] [NOTICE] [arvind-io] OK (crypto v2) - rtt: 342ms
[2019-04-09 08:38:10] [NOTICE] [bottlepost-dns-nl] OK (crypto v2) - rtt: 68ms
[2019-04-09 08:38:11] [NOTICE] [charis] OK (crypto v2) - rtt: 68ms
[2019-04-09 08:38:12] [NOTICE] [cloudflare] OK (DoH) - rtt: 45ms
[2019-04-09 08:38:12] [NOTICE] [cloudflare-ipv6] OK (DoH) - rtt: 51ms
[2019-04-09 08:38:12] [NOTICE] [cpunks-ru] OK (crypto v1) - rtt: 22ms
[2019-04-09 08:38:12] [NOTICE] [cs-ch] OK (crypto v2) - rtt: 68ms
[2019-04-09 08:38:12] [NOTICE] [cs-swe] OK (crypto v2) - rtt: 39ms
[2019-04-09 08:38:13] [NOTICE] [cs-nl] OK (crypto v2) - rtt: 67ms
[2019-04-09 08:38:13] [NOTICE] [cs-nl2] OK (crypto v2) - rtt: 62ms
[2019-04-09 08:38:13] [NOTICE] [cs-fi] OK (crypto v2) - rtt: 73ms
[2019-04-09 08:38:13] [NOTICE] [cs-pl] OK (crypto v2) - rtt: 84ms
[2019-04-09 08:38:13] [NOTICE] [cs-dk] OK (crypto v2) - rtt: 66ms
[2019-04-09 08:38:13] [NOTICE] [cs-it] OK (crypto v2) - rtt: 64ms
[2019-04-09 08:38:13] [NOTICE] [cs-fr] OK (crypto v2) - rtt: 73ms
[2019-04-09 08:38:13] [NOTICE] [cs-fr2] OK (crypto v2) - rtt: 68ms
[2019-04-09 08:38:13] [NOTICE] [cs-pt] OK (crypto v2) - rtt: 96ms
[2019-04-09 08:38:14] [NOTICE] [cs-hk] OK (crypto v2) - rtt: 225ms
[2019-04-09 08:38:14] [NOTICE] [cs-ro] OK (crypto v2) - rtt: 98ms
[2019-04-09 08:38:14] [NOTICE] [cs-mo] OK (crypto v2) - rtt: 109ms
[2019-04-09 08:38:14] [NOTICE] [cs-lv] OK (crypto v2) - rtt: 57ms
[2019-04-09 08:38:14] [NOTICE] [cs-uk] OK (crypto v2) - rtt: 78ms
[2019-04-09 08:38:14] [NOTICE] [cs-de] OK (crypto v2) - rtt: 60ms
[2019-04-09 08:38:14] [NOTICE] [cs-de2] OK (crypto v2) - rtt: 61ms
[2019-04-09 08:38:14] [NOTICE] [cs-ca] OK (crypto v2) - rtt: 213ms
[2019-04-09 08:38:15] [NOTICE] [cs-ca2] OK (crypto v2) - rtt: 142ms
[2019-04-09 08:38:15] [NOTICE] [cs-usny] OK (crypto v2) - rtt: 141ms
[2019-04-09 08:38:15] [NOTICE] [cs-usil] OK (crypto v2) - rtt: 169ms
[2019-04-09 08:38:15] [NOTICE] [cs-usnv] OK (crypto v2) - rtt: 208ms
[2019-04-09 08:38:15] [NOTICE] [cs-uswa] OK (crypto v2) - rtt: 197ms
[2019-04-09 08:38:16] [NOTICE] [cs-usdc] OK (crypto v2) - rtt: 156ms
[2019-04-09 08:38:16] [NOTICE] [cs-ustx] OK (crypto v2) - rtt: 176ms
[2019-04-09 08:38:16] [NOTICE] [cs-usga] OK (crypto v2) - rtt: 172ms
[2019-04-09 08:38:18] [NOTICE] [cs-usnc] TIMEOUT
[2019-04-09 08:38:18] [NOTICE] [cs-usca] OK (crypto v2) - rtt: 213ms
[2019-04-09 08:38:18] [NOTICE] [cs-usor] OK (crypto v2) - rtt: 210ms
[2019-04-09 08:38:19] [NOTICE] [d0wn-is-ns2] OK (crypto v1) - rtt: 98ms
[2019-04-09 08:38:19] [NOTICE] [d0wn-tz-ns1] OK (crypto v1) - rtt: 198ms
[2019-04-09 08:38:19] [NOTICE] [d0wn-tz-ns1-ipv6] TIMEOUT
[2019-04-09 08:38:19] [NOTICE] [de.dnsmaschine.net] OK (crypto v2) - rtt: 59ms
[2019-04-09 08:38:19] [NOTICE] [dnscrypt.ca-1] OK (crypto v2) - rtt: 141ms
[2019-04-09 08:38:19] [NOTICE] [dnscrypt.ca-1-ipv6] TIMEOUT
[2019-04-09 08:38:19] [NOTICE] [dnscrypt.ca-2] OK (crypto v2) - rtt: 150ms
[2019-04-09 08:38:19] [NOTICE] [dnscrypt.ca-2-ipv6] TIMEOUT
[2019-04-09 08:38:19] [NOTICE] [dnscrypt.eu-dk] OK (crypto v2) - rtt: 53ms
[2019-04-09 08:38:19] [NOTICE] [dnscrypt.eu-dk-ipv6] TIMEOUT
[2019-04-09 08:38:19] [NOTICE] [dnscrypt.eu-nl] OK (crypto v2) - rtt: 60ms
[2019-04-09 08:38:19] [NOTICE] [dnscrypt.me] OK (crypto v2) - rtt: 55ms
[2019-04-09 08:38:19] [NOTICE] [dnscrypt.me-ipv6] TIMEOUT
[2019-04-09 08:38:20] [NOTICE] [dnscrypt.nl-ns0] OK (crypto v2) - rtt: 59ms
[2019-04-09 08:38:20] [NOTICE] [dnscrypt.nl-ns0-ipv6] TIMEOUT
[2019-04-09 08:38:21] [NOTICE] [dnscrypt.uk-ipv4] OK (crypto v2) - rtt: 79ms
[2019-04-09 08:38:21] [NOTICE] [dnscrypt.uk-ipv6] TIMEOUT
[2019-04-09 08:38:23] [NOTICE] [doh-crypto-sx] OK (DoH) - rtt: 103ms
[2019-04-09 08:38:28] [NOTICE] [ev-va] OK (crypto v2) - rtt: 211ms
[2019-04-09 08:38:28] [NOTICE] [ev-to] OK (crypto v2) - rtt: 157ms
[2019-04-09 08:38:29] [NOTICE] [freetsa.org] OK (crypto v1) - rtt: 202ms
[2019-04-09 08:38:30] [NOTICE] [gridns-jp] OK (DoH) - rtt: 311ms
[2019-04-09 08:38:31] [NOTICE] [gridns-jp-ipv6] OK (DoH) - rtt: 308ms
[2019-04-09 08:38:33] [NOTICE] [gridns-sg] OK (DoH) - rtt: 294ms
[2019-04-09 08:38:33] [NOTICE] [gridns-sg-ipv6] OK (DoH) - rtt: 301ms
[2019-04-09 08:38:35] [NOTICE] [ibksturm] TIMEOUT
[2019-04-09 08:38:35] [NOTICE] [ipredator] OK (crypto v1) - rtt: 72ms
[2019-04-09 08:38:35] [NOTICE] [opennic-ethservices] OK (crypto v1) - rtt: 59ms
[2019-04-09 08:38:36] [NOTICE] [opennic-ethservices2] OK (crypto v1) - rtt: 64ms
[2019-04-09 08:38:36] [NOTICE] [opennic-luggs] OK (crypto v1) - rtt: 154ms
[2019-04-09 08:38:36] [NOTICE] [opennic-luggs-ipv6] TIMEOUT
[2019-04-09 08:38:36] [NOTICE] [opennic-luggs2] OK (crypto v1) - rtt: 151ms
[2019-04-09 08:38:36] [NOTICE] [opennic-luggs2-ipv6] TIMEOUT
[2019-04-09 08:38:37] [NOTICE] [powerdns-doh] OK (DoH) - rtt: 73ms
[2019-04-09 08:38:37] [NOTICE] [publicarray-au] OK (crypto v2) - rtt: 370ms
[2019-04-09 08:38:44] [NOTICE] [qag.me] TIMEOUT
[2019-04-09 08:38:44] [NOTICE] [quad9-dnscrypt-ip4-nofilter-pri] OK (crypto v1) - rtt: 67ms
[2019-04-09 08:38:44] [NOTICE] [quad9-dnscrypt-ip4-nofilter-alt] OK (crypto v1) - rtt: 72ms
[2019-04-09 08:38:44] [NOTICE] [quad9-dnscrypt-ip6-nofilter-pri] TIMEOUT
[2019-04-09 08:38:44] [NOTICE] [quad9-dnscrypt-ip6-nofilter-alt] TIMEOUT
[2019-04-09 08:39:06] [NOTICE] [qualityology.com] TIMEOUT
[2019-04-09 08:39:08] [NOTICE] [scaleway-fr] TIMEOUT
[2019-04-09 08:39:08] [NOTICE] [securedns] OK (crypto v1) - rtt: 73ms
[2019-04-09 08:39:08] [NOTICE] [securedns-ipv6] TIMEOUT
[2019-04-09 08:39:09] [NOTICE] [securedns-doh] OK (DoH) - rtt: 276ms
[2019-04-09 08:39:09] [NOTICE] [soltysiak] OK (crypto v1) - rtt: 83ms
[2019-04-09 08:39:09] [NOTICE] [suami] OK (crypto v2) - rtt: 64ms
[2019-04-09 08:39:11] [NOTICE] [trashvpn.de] TIMEOUT
[2019-04-09 08:39:11] [NOTICE] [ventricle.us] OK (crypto v2) - rtt: 151ms
[2019-04-09 08:39:11] [NOTICE] [zeroaim-ipv6] TIMEOUT
[2019-04-09 08:39:13] [NOTICE] [opennic-bongobow] TIMEOUT
[2019-04-09 08:39:13] [NOTICE] [opennic-bongobow-ipv6] TIMEOUT
[2019-04-09 08:39:14] [NOTICE] [opennic-R4SAS] OK (crypto v2) - rtt: 82ms
[2019-04-09 08:39:14] [NOTICE] [opennic-R4SAS-ipv6] TIMEOUT
[2019-04-09 08:39:16] [NOTICE] [google] OK (DoH) - rtt: 356ms
[2019-04-09 08:39:21] [NOTICE] Server with the lowest initial latency: cpunks-ru (rtt: 22ms)
[2019-04-09 08:39:21] [NOTICE] dnscrypt-proxy is ready - live servers: 69
[2019-04-09 08:41:40] [NOTICE] Stopped.

 

вариант С

Скрытый текст

так же убрал server_names и секцию "[sources.'public-resolvers']" оставив только "[sources.quad9-resolvers]"

и лог


[2019-04-09 08:41:40] [NOTICE] Source [quad9-resolvers.md] loaded
[2019-04-09 08:41:40] [NOTICE] dnscrypt-proxy 2.0.21
[2019-04-09 08:41:40] [NOTICE] Now listening to ..... [UDP]
[2019-04-09 08:41:40] [NOTICE] Now listening to ..... [TCP]
[2019-04-09 08:41:40] [NOTICE] [quad9-dnscrypt-ip4-nofilter-pri] OK (crypto v1) - rtt: 68ms
[2019-04-09 08:41:40] [NOTICE] [quad9-dnscrypt-ip4-nofilter-alt] OK (crypto v1) - rtt: 67ms
[2019-04-09 08:41:40] [NOTICE] [quad9-dnscrypt-ip6-nofilter-pri] TIMEOUT
[2019-04-09 08:41:40] [NOTICE] [quad9-dnscrypt-ip6-nofilter-alt] TIMEOUT
[2019-04-09 08:42:02] [NOTICE] [google] OK (DoH) - rtt: 354ms
[2019-04-09 08:42:02] [NOTICE] [doh-ip4-filter-pri] OK (DoH) - rtt: 59ms
[2019-04-09 08:42:03] [NOTICE] [cloudflare] OK (DoH) - rtt: 44ms
[2019-04-09 08:42:03] [NOTICE] [cloudflare-ipv6] OK (DoH) - rtt: 37ms
[2019-04-09 08:42:03] [NOTICE] Server with the lowest initial latency: cloudflare-ipv6 (rtt: 37ms)
[2019-04-09 08:42:03] [NOTICE] dnscrypt-proxy is ready - live servers: 6

или


[2019-04-09 08:50:36] [NOTICE] Source [quad9-resolvers.md] loaded
[2019-04-09 08:50:36] [NOTICE] dnscrypt-proxy 2.0.21
[2019-04-09 08:50:36] [NOTICE] Now listening to ..... [UDP]
[2019-04-09 08:50:36] [NOTICE] Now listening to ..... [TCP]
[2019-04-09 08:50:36] [NOTICE] [quad9-dnscrypt-ip4-nofilter-pri] OK (crypto v1) - rtt: 62ms
[2019-04-09 08:50:36] [NOTICE] [quad9-dnscrypt-ip4-nofilter-alt] OK (crypto v1) - rtt: 62ms
[2019-04-09 08:50:36] [NOTICE] [quad9-dnscrypt-ip6-nofilter-pri] TIMEOUT
[2019-04-09 08:50:36] [NOTICE] [quad9-dnscrypt-ip6-nofilter-alt] TIMEOUT
[2019-04-09 08:50:56] [NOTICE] Server with the lowest initial latency: quad9-dnscrypt-ip4-nofilter-pri (rtt: 62ms)
[2019-04-09 08:50:56] [NOTICE] dnscrypt-proxy is ready - live servers: 2

 

Для вас принципиально от куда брать сервера из [sources.'public-resolvers'] или [sources.quad9-resolvers] и ожидания выбора из данных списков.

Выберите себе 4 быстрых сервера (по меньшему ms на основании лога) поставьте их в "server_names" и можно перетащить в секцию "stamp" из *.md пару-тройку (но тут в какое время данный сервер может сменить сертификат и перестать работать, но всегда можно подправить "stamp")

 

При пробовании каждого варианта выше такого сообщения

Скрытый текст

.....the key validity period for this server is excessively long (367 days), significantly reducing reliability and forward security.

не было

  • Thanks 2

Share this post


Link to post
Share on other sites

Блокировка рекламы в шапке ориентирована на англоязычную аудиторию, русскоязычная реклама просачивается - например мой любимый adblockotsosal.ru :). В качестве альтернативы/дополнения предлагаю использовать блоклист на базе  RuAdList + EasyList (я так понимаю делает один из членов их команды) http://cdn.raletag.gq/rueasyhosts.txt Проблема возникла при скачивании - curlом скачать можно, а питоновским скриптом нельзя. Хотел на форуме спросить почему так, но меня так и не пустили туда :) пришлось подделывать юзерагента:

--- ./generate-domains-blacklist_old.py
+++ ./generate-domains-blacklist.py
@@ -81,7 +81,7 @@ 
 def load_from_url(url):
     sys.stderr.write("Loading data from [{}]\n".format(url))
-    req = urllib2.Request(url)
+    req = urllib2.Request(url,'',{'User-Agent':'curl/7.64.0'})
     trusted = False
     if req.get_type() == "file":
         trusted = True

Блоклист обновляется каждые 6 часов, поэтому с актуальностью проблем нет.

  • Thanks 2

Share this post


Link to post
Share on other sites
В 19.04.2019 в 15:51, Михаил Лукьянов сказал:

В качестве альтернативы/дополнения предлагаю использовать блоклист на базе  RuAdList + EasyList (я так понимаю делает один из членов их команды) http://cdn.raletag.gq/rueasyhosts.txt

Я в изначальном файле domains-blacklist.conf из шапки раскомментировал RU AdList и добавил ещё один источник:

Скрытый текст

# RU AdList
https://easylist-downloads.adblockplus.org/advblock.txt

# Adblock
# Adblock EasyList Lite
https://cdn.adblockcdn.com/filters/easylist_lite.txt

 

Блокирует неплохо, но частенько пропускает огромный верхний баннер на lenta.ru (использую его как один из проверочных для блокировщиков рекламы) и ещё несколько внутри страницы.

Надо будет попробовать добавить ваш источник, спасибо.

  • Thanks 1

Share this post


Link to post
Share on other sites
В 19.04.2019 в 18:51, Михаил Лукьянов сказал:

Блокировка рекламы в шапке ориентирована на англоязычную аудиторию, русскоязычная реклама просачивается - например мой любимый adblockotsosal.ru :). В качестве альтернативы/дополнения предлагаю использовать блоклист на базе  RuAdList + EasyList (я так понимаю делает один из членов их команды)

Вообще, как и @Albram я разблокировал RuAdList + EasyList сразу и добавил просто множество еще разных списков доменов с рекламой. И её в моем домашнем окружении практически нет. За исключением видео рекламы на YouTube. Если у кого-то есть способы полностью от нее избавится, прошу ими поделиться.

В 19.04.2019 в 18:51, Михаил Лукьянов сказал:

Хотел на форуме спросить почему так, но меня так и не пустили туда :) пришлось подделывать юзерагента:

Так как (я написал выше) я добавил множество дополнительных списков, я тоже столкнулся с проблемой загрузки некоторых из них. На проблемных списках стояли ограничения по юзер агенту. И даже у автора dnscrypt-proxy2 есть issue (и даже два), где его просят добавить возможность указания юзер агента в его скрипт на python. На этот запрос он отвечает, что если владельцы списка решили не давать его различным средствам автоматизации (скриптам на python как пример), то это их право и он не хочет его нарушать.

Но для себя в борьбе с рекламой на YouTube я решил прикинуться Хромом на Windows 10

Скрытый текст

def load_from_url(url):
    sys.stderr.write("Loading data from [{}]\n".format(url))
    #req = urllib2.Request(url)
    headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36'}
    req = urllib2.Request(url, None, headers)
    trusted = False    
    if req.get_type() == "file":
        trusted = True
    response = None
    try:
        response = urllib2.urlopen(req, timeout=int(args.timeout))
    except urllib2.URLError as err:
        raise Exception("[{}] could not be loaded: {}\n".format(url, err))
    if trusted is False and response.getcode() != 200:
        raise Exception("[{}] returned HTTP code {}\n".format(url, response.getcode()))
    content = response.read()

    return (content, trusted) 

А вот мой текущий список всех листов блокировки ( @Михаил Лукьянов спасибо за #raletag list )

Скрытый текст


##################################################################################
#                                                                                #
#   Generate a black list of domains using public data sources, and the local    #
#   domains-blacklist-local-additions.txt file.                                  #
#                                                                                #
#   The default configuration is just indicative, and corresponds to the one     #
#   used to produce the public "mybase" set.                                     #
#                                                                                #
#   Comment out the URLs of the sources you wish to disable, leave the ones      #
#   you would like enabled uncommented.  Then run the script to build the        #
#   dnscrypt-blacklist-domains.txt file:                                         #
#                                                                                #
#   $  generate-domains-blacklist.py > dnscrypt-blacklist-domains.txt            #
#                                                                                #
#   Domains that should never be blocked can be put into a file named            #
#   domains-whitelist.txt.                                                       #
#                                                                                #
#   That blacklist file can then be used in the dnscrypt-proxy.toml file:        #
#                                                                                #
#   [blacklist]                                                                  #
#                                                                                #
#   blacklist_file = 'dnscrypt-blacklist-domains.txt'                            #
#                                                                                #
##################################################################################

# Local additions
file:domains-blacklist-local-additions.txt
#file:hosts.alive.txt

#raletag list
http://cdn.raletag.gq/rueasyhosts.txt

#From uBlock
#https://tgc.cloud/downloads/hosts.txt
https://tgc.cloud/downloads/hosts.alive.txt

#YouTube Video Ads Blocklist Hosts
https://raw.githubusercontent.com/anudeepND/youtubeadsblacklist/master/hosts.txt

#Anudeep Youtube (Domains)
https://raw.githubusercontent.com/deathbybandaid/piholeparser/master/Subscribable-Lists/ParsedBlacklists/Anudeep-Youtube.txt
https://raw.githubusercontent.com/deathbybandaid/piholeparser/master/Subscribable-Lists/ParsedBlacklists/Henning-VanRaumle-Youtube.txt

#YouTube Video Ads Blocklist Domains
https://raw.githubusercontent.com/anudeepND/youtubeadsblacklist/master/domainlist.txt

#YouTube Video Ads Blocklist Hosts
https://raw.githubusercontent.com/anudeepND/youtubeadsblacklist/master/hosts.txt

#StevenBlack
https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts

# Bambenek malware C2s
https://osint.bambenekconsulting.com/feeds/c2-dommasterlist.txt

# hpHosts’ Ad and tracking servers
https://hosts-file.net/.\ad_servers.txt

# Malware domains
https://mirror1.malwaredomains.com/files/justdomains

# Abuse.ch Ransomware Tracker
https://ransomwaretracker.abuse.ch/downloads/RW_DOMBL.txt

# Malware Domain List
http://www.malwaredomainlist.com/mdlcsv.php?inactive=off

# Adblock Warning Removal List
https://easylist-downloads.adblockplus.org/antiadblockfilters.txt

# EasyList
https://easylist-downloads.adblockplus.org/easylist_noelemhide.txt

# EasyList China
#https://easylist-downloads.adblockplus.org/easylistchina.txt

# RU AdList
https://easylist-downloads.adblockplus.org/advblock.txt

# Fanboy’s Social Blocking List
https://easylist-downloads.adblockplus.org/fanboy-social.txt

# Peter Lowe’s Ad and tracking server list
https://pgl.yoyo.org/adservers/serverlist.php

# Spam404
https://raw.githubusercontent.com/Dawsey21/Lists/master/adblock-list.txt

# CJX Annoyance List
https://raw.githubusercontent.com/cjx82630/cjxlist/master/cjxlist.txt

# EU: Prebake - Filter Obtrusive Cookie Notices
https://raw.githubusercontent.com/liamja/Prebake/master/obtrusive.txt

# Malvertising filter list by Disconnect
https://s3.amazonaws.com/lists.disconnect.me/simple_malvertising.txt

# Malware filter list by Disconnect
https://s3.amazonaws.com/lists.disconnect.me/simple_malware.txt

# Basic tracking list by Disconnect
https://s3.amazonaws.com/lists.disconnect.me/simple_tracking.txt

# Sysctl list (ads)
http://sysctl.org/cameleon/hosts

# KAD host file (fraud/adware) - https://github.com/azet12/KADhosts
https://raw.githubusercontent.com/azet12/KADhosts/master/KADhosts.txt

# BarbBlock list (spurious and invalid DMCA takedowns)
https://ssl.bblck.me/blacklists/domain-list.txt

# Dan Pollock's hosts list
http://someonewhocares.org/hosts/hosts

# NoTracking's list - blocking ads, trackers and other online garbage
https://raw.githubusercontent.com/notracking/hosts-blocklists/master/domains.txt

# CoinBlockerLists: blocks websites serving cryptocurrency miners - https://zerodot1.github.io/CoinBlockerLists/ - Contains false positives
# https://raw.githubusercontent.com/ZeroDot1/CoinBlockerLists/master/list_browser.txt

# Websites potentially publishing fake news
# https://raw.githubusercontent.com/marktron/fakenews/master/fakenews

# Quidsup NoTrack - Contains too many false positives to be enabled by default
# https://raw.githubusercontent.com/quidsup/notrack/master/trackers.txt

# Dynamic DNS services, sadly often used by malware
# https://mirror1.malwaredomains.com/files/dynamic_dns.txt

# Block pornography
# https://raw.githubusercontent.com/Clefspeare13/pornhosts/master/0.0.0.0/hosts
# https://raw.githubusercontent.com/Sinfonietta/hostfiles/master/pornography-hosts
# http://securemecca.com/Downloads/hosts.txt

# Block gambling sites
# https://raw.githubusercontent.com/Sinfonietta/hostfiles/master/gambling-hosts

# Block social media sites
# https://raw.githubusercontent.com/Sinfonietta/hostfiles/master/social-hosts

#10ZiN Host Database (Full)
#https://tgc.cloud/downloads/hosts.txt

#AdAway
#https://adaway.org/hosts.txt

#1Hosts
#https://1hos.cf/

#Adguard DNS (hosts)
https://raw.githubusercontent.com/r-a-y/mobile-hosts/master/AdguardDNS.txt

#Adguard Mobile Ads (hosts)
https://raw.githubusercontent.com/r-a-y/mobile-hosts/master/AdguardMobileAds.txt

#Adguard Specific Apps (hosts)
https://raw.githubusercontent.com/r-a-y/mobile-hosts/master/AdguardApps.txt

#Energized Blu Go Protection
#https://raw.githubusercontent.com/EnergizedProtection/block/master/bluGo/formats/hosts

#Energized Spark Protection
#https://raw.githubusercontent.com/EnergizedProtection/block/master/spark/formats/hosts

#Energized Ultimate Protection
#https://raw.githubusercontent.com/EnergizedProtection/block/master/ultimate/formats/hosts

#Energized Blu Protection
#https://raw.githubusercontent.com/EnergizedProtection/block/master/blu/formats/hosts

#MoaAB: Mother of All AD-BLOCKING
#https://adblock.mahakala.is/

#The Hosts File Project Hosts
#https://hostsfile.mine.nu/hosts0.txt

#CHEF-KOCH's uMatrix Filter List
#https://raw.githubusercontent.com/CHEF-KOCH/CKs-FilterList/master/uMatrix/CK's-uMatrix-FilterList.txt

Большинство списков взято с ресурса https://filterlists.com/ который я уже рекомендовал в этой теме.

  • Thanks 3

Share this post


Link to post
Share on other sites

На днях случайно заметил на роутере коннекты извне (в основном из Китая) на 53 порт. IP у меня внешний, потому решил проверить, и действительно 53 порт оказался открыт всем желающим. Создал в Web-интерфейсе (версия 2.15.C.3.0-2) правило на PPPoE интерфейсе "запретить UDP с любого IP и порта на "мой IP" порт 53" и поместил его в начало цепочки. Правило создалось в таблице filter в цепочке @PPPoE0. Но оно не работает. Т.е. и с этим правилом коннекты на 53-ий порт извне проходят. Видимо срабатывает какое-то правило раньше этого.

Выглядит это так:

на компе, подключенном через другого провайдера, делаю nslookup ya.ru <мой IP> и на роутере в разделе Диагностика появляется коннект:

Скрытый текст

Источник		Адрес назначения				Служба
83.xxx.xxx.xxx
:46168	Keenetic_Ultra (Broadband connection (PPPoE))	xxx.xxx.xxx.xxx	UDP/53
:24072	Keenetic_Ultra (Broadband connection (PPPoE))	xxx.xxx.xxx.xxx	UDP/53
:58071	Keenetic_Ultra (Broadband connection (PPPoE))	xxx.xxx.xxx.xxx	UDP/53

 

В Entware во время коннекта:

Скрытый текст

~ # netstat -unp
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
udp        0      0 127.0.0.1:57982         127.0.0.1:54321         ESTABLISHED 161/ndm

~ # netstat -ulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
udp        0      0 127.0.0.1:1026          0.0.0.0:*                           447/nqnd
udp        0      0 127.0.0.1:1027          0.0.0.0:*                           447/nqnd
udp        0      0 127.0.0.1:41231         0.0.0.0:*                           161/ndm
udp        0      0 127.0.0.1:41232         0.0.0.0:*                           161/ndm
udp        0      0 127.0.0.1:41234         0.0.0.0:*                           161/ndm
udp        0      0 0.0.0.0:54321           0.0.0.0:*                           524/ndnproxy
....

 

В конфигурации отключено использование dns и dns6 серверов провайдера на всех публичных интерфейсах (PPPoE, IPoE) и прошивочный dns сервер переведен в режим opkg dns-override, но, судя по выводу из Entware, срабатывает именно он. DNS-crypt настраивался по методике из этой темы.

Вопрос: куда поместить правило, чтобы оно корректно работало?

 

 

Share this post


Link to post
Share on other sites
9 часов назад, Albram сказал:

судя по выводу из Entware, срабатывает именно он

Вывод не информативен, нужно посмотреть так:

netstat -apn | grep ":53 "

Стоковый DNS сервер никогда наружу не смотрит, поэтому 99% вероятности что это неправильно настроен dnscrypt-proxy. Покажите

grep listen_address /opt/etc/dnscrypt-proxy.toml

Как должно быть (пример):

listen_addresses = ['127.0.0.1:53','192.168.1.1:53','[fe80::127b:efff:fe5d:ffcc%br0]:53']

Как не должно быть:

listen_addresses = ['0.0.0.0:53']

 

Share this post


Link to post
Share on other sites
52 минуты назад, Михаил Лукьянов сказал:

Вывод не информативен, нужно посмотреть так:


netstat -apn | grep ":53 "

Стоковый DNS сервер никогда наружу не смотрит, поэтому 99% вероятности что это неправильно настроен dnscrypt-proxy.

 

Dnscrypt слушает на двух локальных адресах:

~ # grep listen_address /opt/etc/dnscrypt/dnscrypt-proxy.toml
listen_addresses = ['192.168.1.1:53', '[fe80::xxxx:xxxx:xxxx:49d8%br0]:53']
~ #

Вывод netstat -apn | grep “:53” во время коннекта позже пришлю, сейчас нет возможности.

Share this post


Link to post
Share on other sites
10 часов назад, Albram сказал:

listen_addresses = ['192.168.1.1:53', '[fe80::xxxx:xxxx:xxxx:49d8%br0]:53']

Насколько я помню ndm в качестве ресолвера использует lo интерфейс независимо от того что указано в веб интерфейсе. Не получив ответа с 127.0.0.1:53 система аварийно запускает родной DNS сервер причем без текущего конфига с прослушиванием по всем интерфейсам. О - отказоустойчивость🙂

Нужно вернуть '127.0.0.1:53' в /opt/etc/dnscrypt-proxy.toml где росло. Какой смысл его было убирать?

Share this post


Link to post
Share on other sites

ndm в качестве резолвера продолжает использовать собственную службу ndnproxy дальше, общаясь с ней по RPC.

При `opkg dns-override` встроенная служба ndnproxy лишь перестаёт слушать порты TCP53/UDP53.

ЕМНИП.

Share this post


Link to post
Share on other sites
1 час назад, Михаил Лукьянов сказал:

Насколько я помню ndm в качестве ресолвера использует lo интерфейс независимо от того что указано в веб интерфейсе. Не получив ответа с 127.0.0.1:53 система аварийно запускает родной DNS сервер причем без текущего конфига с прослушиванием по всем интерфейсам. О - отказоустойчивость🙂

Нужно вернуть '127.0.0.1:53' в /opt/etc/dnscrypt-proxy.toml где росло. Какой смысл его было убирать?

Вернул, не помогло.

Скрытый текст

~ # grep listen_address /opt/etc/dnscrypt/dnscrypt-proxy.toml
listen_addresses = ['127.0.0.1:53', '192.168.1.1:53', '[fe80::xxxx:xxxx:xxxx:49d8%br0]:53']
~ #

~ # netstat -apn | grep ':53 '
tcp        0      0 192.168.1.1:53          0.0.0.0:*               LISTEN      24486/dnscrypt-prox
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      24486/dnscrypt-prox
tcp        0      0 fe80::xxxx:xxxx:xxxx:49d8:53 :::*                    LISTEN      24486/dnscrypt-prox
udp        0      0 192.168.1.1:53          0.0.0.0:*                           24486/dnscrypt-prox
udp        0      0 127.0.0.1:53            0.0.0.0:*                           24486/dnscrypt-prox
udp        0      0 fe80::xxxx:xxxx:xxxx:49d8:53 :::*                                24486/dnscrypt-prox

 

Убрал этот адрес ещё в самом начале настроек, что-то было связано с тем, что когда он был в конфиге один, не резолвились хосты с роутера, потом добавил к нему 192.168..... всё стало нормально, попробовал его убрал, ничего не изменилось, так и оставил из-за тяги к минимализму)

 

1 час назад, Александр Рыжов сказал:

ndm в качестве резолвера продолжает использовать собственную службу ndnproxy дальше, общаясь с ней по RPC.

При `opkg dns-override` встроенная служба ndnproxy лишь перестаёт слушать порты TCP53/UDP53. 

Т.е. чтобы запретить ndnproxy слушать на внешнем интерфейсе нужно изменить здесь?

udp        0      0 0.0.0.0:54321           0.0.0.0:*                           524/ndnproxy
udp        0      0 :::50272                :::*                                524/ndnproxy

 

Edited by Albram

Share this post


Link to post
Share on other sites

Это нечто другое. У вас файервол отключен? Если нет, то по поводу того, что службы слушают 0.0.0.0 я бы не переживал.

Share this post


Link to post
Share on other sites
3 минуты назад, Александр Рыжов сказал:

Это нечто другое. У вас файервол отключен? Если нет, то по поводу того, что службы слушают 0.0.0.0 я бы не переживал.

Файерволл включен и на ipv4 и на ipv6.

Edited by Albram

Share this post


Link to post
Share on other sites
8 минут назад, Александр Рыжов сказал:

Это нечто другое. У вас файервол отключен? Если нет, то по поводу того, что службы слушают 0.0.0.0 я бы не переживал.

Так там снаружи можно к DNS подключиться. С включенным фаерволом.

Share this post


Link to post
Share on other sites

Вероятно, @Albram что-то навертел самостоятельно. Здоровый кинетик с своему DNS-проксику доступа при включенном файерволе не предоставит.

Проверил на PPPoE и без и с опцией `opkg dns-override`.

 

@Михаил Лукьянов, актуальная инструкция в первом посте?

Share this post


Link to post
Share on other sites
2 минуты назад, Александр Рыжов сказал:

актуальная инструкция в первом посте?

Да. У меня так настроено. Наружу ничего не светит. nmapом на всякий случай проверил - всё чисто.

Share this post


Link to post
Share on other sites
9 минут назад, Александр Рыжов сказал:

Вероятно, @Albram что-то навертел самостоятельно. Здоровый кинетик с своему DNS-проксику доступа при включенном файерволе не предоставит.

Проверил на PPPoE и без и с опцией `opkg dns-override`.

Видимо да. Сейчас остановил dnscrypt-proxy и отключил opkg dns-override, Доступ извне к DNS серверу пропал.

Скрытый текст

~ # netstat -apn | grep ':53 '
tcp        0      0 0.0.0.0:53              0.0.0.0:*               LISTEN      7027/ndnproxy
tcp        0      0 :::53                   :::*                    LISTEN      7027/ndnproxy
udp        0      0 0.0.0.0:53              0.0.0.0:*                           7027/ndnproxy
udp        0      0 :::53                   :::*                                7027/ndnproxy

 

 

Share this post


Link to post
Share on other sites

Настроил dnscrypt-proxy2 по инструкции, все работает все прекрасно, вот только клиенты по Ipsec туннелю не могут резолвить днс адреса.

При этом в настройках туннеля на кинетике указан адрес 192.168.10.1 (адрес кинетика в локальной сети)

Пробовал в настройках клиента тот же адрес указать - не помогло.

При этом у клиентов нат есть, они могут пинговать тот же 8.8.8.8, а вот получить адрес google.com - нет. Так же могу зайти на вэб морду роутера по адресу 192.168.10.1, да и вообще по адреса в локальной сети хожу нормально.

UPDATE:

Потестировал еще разные варианты. Суть в том, что просто VPN-сервер IPsec не может резолвить имена. А уже VPN-сервер L2TP/IPsec может. Собственно свою проблему решил переходом на Л2ТП

Edited by Dennon

Share this post


Link to post
Share on other sites

Вчера столкнулся с неочевидной проблемой, предостерегаю всех. Если у вас сделан полный dns-override, в котором выключенный dnsmasq отключает весь dns в роутере в принципе, то апдейт+апгрейд opkg может сделать харакири сам себе.

В моём случае opkg остался в совершенно нерабочем состоянии и я никак не смог восстановить его, пришлось полностью переустанавливать.

Edited by dippnsk
  • Thanks 1

Share this post


Link to post
Share on other sites
В 03.06.2019 в 08:43, dippnsk сказал:

Вчера столкнулся с неочевидной проблемой, предостерегаю всех. Если у вас сделан полный dns-override, в котором выключенный dnsmasq отключает весь dns в роутере в принципе, то апдейт+апгрейд opkg может сделать харакири сам себе.

В моём случае opkg остался в совершенно нерабочем состоянии и я никак не смог восстановить его, пришлось полностью переустанавливать.

Не ошибкой wget закончилось?

Вот здесь есть предостережение: https://forum.keenetic.net/topic/5639-wget-gnu-wget-downloading-files-on-the-protocols-http-https-ftp-and-ftps/?do=findComment&comment=64939

  • Upvote 1

Share this post


Link to post
Share on other sites

Сложно сказать, возможно и wget развалился, т.к. действительно ставил его отдельно для работы с https. Откатил назад, теперь буду в курсе этого нюанса. Спасибо за инфу!

Share this post


Link to post
Share on other sites
В 03.06.2019 в 07:43, dippnsk сказал:

Вчера столкнулся с неочевидной проблемой, предостерегаю всех. Если у вас сделан полный dns-override, в котором выключенный dnsmasq отключает весь dns в роутере в принципе, то апдейт+апгрейд opkg может сделать харакири сам себе.

В моём случае opkg остался в совершенно нерабочем состоянии и я никак не смог восстановить его, пришлось полностью переустанавливать. 

Обновление на релизе 300B1

Скрытый текст

BusyBox v1.30.1 () built-in shell (ash)

/ # opkg update
Downloading http://bin.entware.net/mipselsf-k3.4/Packages.gz
Updated list of available packages in /opt/var/opkg-lists/entware
Downloading http://bin.entware.net/mipselsf-k3.4/keenetic/Packages.gz
Updated list of available packages in /opt/var/opkg-lists/keendev
/ # opkg upgrade
Upgrading terminfo on root from 6.1-3 to 6.1-4...
Downloading http://bin.entware.net/mipselsf-k3.4/terminfo_6.1-4_mipsel-3.4.ipk
Upgrading openssh-sftp-server on root from 7.9p1-4 to 8.0p1-1...
Downloading http://bin.entware.net/mipselsf-k3.4/openssh-sftp-server_8.0p1-1_mipsel-3.4.ipk
Upgrading php7-mod-curl on root from 7.2.15-1 to 7.2.17-2...
Downloading http://bin.entware.net/mipselsf-k3.4/php7-mod-curl_7.2.17-2_mipsel-3.4.ipk
Upgrading sysstat on root from 12.0.2-1 to 12.0.2-2...
Downloading http://bin.entware.net/mipselsf-k3.4/sysstat_12.0.2-2_mipsel-3.4.ipk
....
Downloading http://bin.entware.net/mipselsf-k3.4/busybox_1.30.1-2_mipsel-3.4.ipk
Upgrading lighttpd-mod-cgi on root from 1.4.49-5 to 1.4.53-2...
....
Downloading http://bin.entware.net/mipselsf-k3.4/php7-mod-gd_7.2.17-2_mipsel-3.4.ipk
Upgrading libndm on root from 1.1.9-1 to 1.1.10-1...
Downloading http://bin.entware.net/mipselsf-k3.4/keenetic/libndm_1.1.10-1_mipsel-3.4_kn.ipk
Configuring terminfo.
Bad interpreter "/opt/bin/sh"
Configuring openssh-sftp-server.
Configuring php7-mod-curl.
Configuring sysstat.
Configuring php7-mod-openssl.
Configuring netdata.
Configuring libjpeg.
Configuring python-codecs.
Configuring zoneinfo-europe.
Configuring busybox.
Warning: '/opt/bin/grep' is already exists, skipping.
Warning: '/opt/bin/iostat' is already exists, skipping.
Warning: '/opt/bin/gunzip' is already exists, skipping.
Warning: '/opt/bin/dmesg' is already exists, skipping.
Warning: '/opt/bin/find' is already exists, skipping.
Warning: '/opt/bin/id' is already exists, skipping.
Warning: '/opt/bin/crontab' is already exists, skipping.
Warning: '/opt/bin/stat' is already exists, skipping.
Warning: '/opt/bin/gzip' is already exists, skipping.
Warning: '/opt/bin/run-parts' is already exists, skipping.
Warning: '/opt/bin/unzip' is already exists, skipping.
Warning: '/opt/bin/lsusb' is already exists, skipping.
Warning: '/opt/bin/xargs' is already exists, skipping.
Warning: '/opt/bin/zcat' is already exists, skipping.
Warning: '/opt/sbin/ip' is already exists, skipping.
Warning: '/opt/sbin/rmmod' is already exists, skipping.
Warning: '/opt/sbin/lsmod' is already exists, skipping.
Warning: '/opt/sbin/insmod' is already exists, skipping.
Collected errors:
 * resolve_conffiles: Existing conffile /opt/etc/netdata/netdata.conf is different from the conffile in the new package. The new conffile will be placed at /opt/etc/netdata/netdata.conf-opkg.
 * opkg_download: Failed to download http://bin.entware.net/mipselsf-k3.4/lighttpd-mod-cgi_1.4.53-2_mipsel-3.4.ipk, wget returned 255.
 * opkg_install_pkg: Failed to download lighttpd-mod-cgi. Perhaps you need to run 'opkg update'?
 * opkg_download: Failed to download http://bin.entware.net/mipselsf-k3.4/php7-mod-xmlreader_7.2.17-2_mipsel-3.4.ipk, wget returned 255.
 * opkg_install_pkg: Failed to download php7-mod-xmlreader. Perhaps you need to run 'opkg update'?
....
* opkg_install_pkg: Failed to download php7-mod-gd. Perhaps you need to run 'opkg update'?
 * opkg_download: Failed to download http://bin.entware.net/mipselsf-k3.4/keenetic/libndm_1.1.10-1_mipsel-3.4_kn.ipk, wget returned 255.
 * opkg_install_pkg: Failed to download libndm. Perhaps you need to run 'opkg update'?

/ # opkg update
Downloading http://bin.entware.net/mipselsf-k3.4/Packages.gz
Updated list of available packages in /opt/var/opkg-lists/entware
Downloading http://bin.entware.net/mipselsf-k3.4/keenetic/Packages.gz
Updated list of available packages in /opt/var/opkg-lists/keendev
/ # opkg upgrade
Upgrading lighttpd-mod-cgi on root from 1.4.49-5 to 1.4.53-2...
Downloading http://bin.entware.net/mipselsf-k3.4/lighttpd-mod-cgi_1.4.53-2_mipsel-3.4.ipk
Upgrading php7-mod-xmlreader on root from 7.2.15-1 to 7.2.17-2...
Downloading http://bin.entware.net/mipselsf-k3.4/php7-mod-xmlreader_7.2.17-2_mipsel-3.4.ipk
Upgrading nano on root from 3.2-1 to 4.2-1...
Downloading http://bin.entware.net/mipselsf-k3.4/nano_4.2-1_mipsel-3.4.ipk
Upgrading libcurl on root from 7.64.0-1 to 7.64.1-1...
Downloading http://bin.entware.net/mipselsf-k3.4/libcurl_7.64.1-1_mipsel-3.4.ipk
....
Downloading http://bin.entware.net/mipselsf-k3.4/php7-mod-simplexml_7.2.17-2_mipsel-3.4.ipk
Upgrading dnscrypt-proxy2 on root from 2.0.21-1 to 2.0.23-1...
Downloading http://bin.entware.net/mipselsf-k3.4/dnscrypt-proxy2_2.0.23-1_mipsel-3.4.ipk
Upgrading python-compiler on root from 2.7.15-5 to 2.7.16-4...
....
Upgrading icu on root from 63.1-1 to 64.2-2...
Downloading http://bin.entware.net/mipselsf-k3.4/icu_64.2-2_mipsel-3.4.ipk
Removing obsolete file /opt/lib/libicui18n.so.63.
Removing obsolete file /opt/lib/libicutu.so.63.1.
Removing obsolete file /opt/lib/libicuuc.so.63.
Removing obsolete file /opt/lib/libicudata.so.63.1.
Removing obsolete file /opt/lib/libicui18n.so.63.1.
Removing obsolete file /opt/lib/libicutest.so.63.
Removing obsolete file /opt/lib/libicutu.so.63.
Removing obsolete file /opt/lib/libicudata.so.63.
Removing obsolete file /opt/lib/libicutest.so.63.1.
Removing obsolete file /opt/lib/libicuio.so.63.1.
Removing obsolete file /opt/lib/libicuio.so.63.
Removing obsolete file /opt/lib/libicuuc.so.63.1.
...
Downloading http://bin.entware.net/mipselsf-k3.4/php7-mod-gd_7.2.17-2_mipsel-3.4.ipk
Upgrading libndm on root from 1.1.9-1 to 1.1.10-1...
Downloading http://bin.entware.net/mipselsf-k3.4/keenetic/libndm_1.1.10-1_mipsel-3.4_kn.ipk
Configuring zlib.
Configuring libopenssl.
Configuring libpcre.
Configuring php7.
Configuring ca-bundle.
....
Configuring ipset.
Configuring lighttpd-mod-access.
Configuring bind-libs.
Configuring php7-mod-simplexml.
Configuring dnscrypt-proxy2.
Configuring php7-mod-iconv.
Configuring php7-mod-pdo.
Configuring php7-mod-pdo-sqlite.
Configuring php7-mod-xml.
Configuring php7-mod-zip.
Configuring lighttpd-mod-accesslog.
Configuring bind-dig.
Configuring php7-mod-sqlite3.
Configuring libfreetype.
Configuring php7-mod-gd.
Collected errors:
 * resolve_conffiles: Existing conffile /opt/etc/lighttpd/lighttpd.conf is different from the conffile in the new package. The new conffile will be placed at /opt/etc/lighttpd/lighttpd.conf-opkg.
 * resolve_conffiles: Existing conffile /opt/etc/dropbear/dropbear_ecdsa_host_key is different from the conffile in the new package. The new conffile will be placed at /opt/etc/dropbear/dropbear_ecdsa_host_key-opkg.
 * resolve_conffiles: Existing conffile /opt/etc/dropbear/dropbear_rsa_host_key is different from the conffile in the new package. The new conffile will be placed at /opt/etc/dropbear/dropbear_rsa_host_key-opkg.
 * resolve_conffiles: Existing conffile /opt/etc/dnscrypt-proxy.toml is different from the conffile in the new package. The new conffile will be placed at /opt/etc/dnscrypt-proxy.toml-opkg.
 * resolve_conffiles: Existing conffile /opt/etc/php.ini is different from the conffile in the new package. The new conffile will be placed at /opt/etc/php.ini-opkg.

 

DNSMasq так же установлен как и DNSCrypt-proxy и оба работают при " dns-override"

  • Thanks 1

Share this post


Link to post
Share on other sites

 

В 16.05.2019 в 01:25, Михаил Лукьянов сказал:

Стоковый DNS сервер никогда наружу не смотрит, поэтому 99% вероятности что это неправильно настроен dnscrypt-proxy. Покажите


grep listen_address /opt/etc/dnscrypt-proxy.toml

Как должно быть (пример):


listen_addresses = ['127.0.0.1:53','192.168.1.1:53','[fe80::127b:efff:fe5d:ffcc%br0]:53']

Как не должно быть:


listen_addresses = ['0.0.0.0:53']

 

В моем случае всё с точностью до наоборот. При listen_address = ['0.0.0.0:53'] и попытке nslookup <host> <IP_keenetik> извне получаем таймаут ответов dns сервера кинетика. Такое же наблюдается и при указании в качестве слушающего ipv6 адреса кинетика. В остальных других любых комбинациях listen_address получаем ответ dns сервера на внешний адрес кинетика.
 

В 16.05.2019 в 16:17, Александр Рыжов сказал:

Вероятно, @Albram что-то навертел самостоятельно. Здоровый кинетик с своему DNS-проксику доступа при включенном файерволе не предоставит.

Проверил на PPPoE и без и с опцией `opkg dns-override`.

Настроено у меня по инструкции из первого поста этой темы с единственным отличием в том, что использую ещё и ipv6. До этого писал, что остановил dnscrypt-proxy и отключил opkg dns-override и доступ извне к DNS серверу пропал, но оказалось что при этом перестает работать резолв и из локальной сети.

Было подозрение на правило в интернет-фильтре 192.168.1.1  для всех dns запросов, которое, начиная с версий 2.15, стало ругаться в лог на петлю: 

Скрытый текст

Май 18 22:51:05 ndnproxy 
Proxy loop detected: 192.168.1.1 <-> 192.168.1.1, request dropped.
Май 18 22:51:05 ndnproxy 
DNS server 192.168.1.1 inactivated.
  ...
Май 18 22:51:06 ndnproxy 
Proxy loop detected: fe80::xxxx:xxxx:xxxx:xxxx <-> fe80::xxxx:xxxx:xxxx:xxxx, request dropped.
Май 18 22:51:06 ndnproxy 
DNS server fe80::xxxx:xxxx:xxxx:xxxx inactivated.

 

Но его удаление (без перезагрузки роутера) не давало результатов.

При сканировании извне портов кинетика nmap-ом по tcp показывает только один открытый порт 21, на который на самом деле есть правило в firewall, но оно отключено. По udp пишет что все 1000 портов open | filtered, результаты не меняются при любых значениях listen_address.

Оставил listen_address = ['0.0.0.0:53'] и коннекты извне пропали.

По мере возможности буду продолжать искать источник проблемы.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...