Шифруем DNS-запросы или dnscrypt-proxy в действии — НЕТ утечке DNS

Протокол DNS предполагает открытый обмен информацией между клиентами (в число которых входит и Ваш компьютер) и DNS-серверами. Таким образом, «подсмотреть» адреса посещаемых Вами сайтов (утечка DNS, «DNS Leak«) или даже подменить их (!) не составляет особенного труда, даже при использовании VPN.

Например, рассмотрим информацию, передаваемую при запросе IP-адреса сайта ya.ru у DNS-серверов Google 8.8.8.8 и 8.8.4.4 при выполнении команды ping:

Перехватываем сетевые пакеты — происходит обращение к порту 53 по IP-адресам 8.8.8.8 и 8.8.4.4:

Смотрим содержимое запроса:

Имя сайта (ya.ru) содержится в запросе открытым текстом:
0x02 (2 символа) 0x79 (y) 0x61 (a) 0x02 (2 символа) 0x72 (r) 0x75 (u) 0x00 (конец)

Как же скрыть эту информацию от посторонних глаз?
Протокол DNSCrypt (криптографическая защита DNS-трафика) нам поможет 🙂

Применим в деле чудесную утилиту dnscrypt-proxy (автор — парижский модный фотограф и по совместительству программист и математик Frank Denis), использующую для защиты наших секретов эллиптическую криптографию (Curve25519).

Сначала подключаемся к Интернету и скачиваем последнюю (2.0.*) версию утилиты dnscrypt-proxy по адресу https://github.com/jedisct1/dnscrypt-proxy/releases/latest:
dnscrypt-proxy-win32-*.zip (для 32-битных систем  Windows);
dnscrypt-proxy-win64-*.zip (для 64-битных систем Windows)

Распаковываем содержимое скачанного архива, например, в папку C:\dnscrypt.

Создаем файл конфигурации dnscrypt-proxy.toml (на основе файла example-dnscrypt-proxy.toml).

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

server_names = ['********']
listen_addresses = ['127.0.0.1:53', '[::1]:53']
max_clients = 250
ipv4_servers = true
ipv6_servers = false
dnscrypt_servers = true
doh_servers = true
require_dnssec = false
require_nolog = true
require_nofilter = true
force_tcp = false
timeout = 2500
keepalive = 30
log_level = 0
log_file = 'dnscrypt-proxy.log'
cert_refresh_delay = 240
fallback_resolver = '8.8.8.8:53'
ignore_system_dns = true
netprobe_timeout = 30
log_files_max_size = 1
log_files_max_age = 7
log_files_max_backups = 1
block_ipv6 = true
cache = true
cache_size = 512
cache_min_ttl = 600
cache_max_ttl = 86400
cache_neg_min_ttl = 60
cache_neg_max_ttl = 600
[blacklist]
blacklist_file = 'blacklist.txt'
[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']
minisign_key = 'RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3'
cache_file = 'public-resolvers.md'
refresh_delay = 72
prefix = ''

Вместо ******** задаем имя удаленного DNS-резольвера.
DNS-резольвер принимает запрос от клиента (Вашего компьютера) и отправляет его к DNS-серверу.
Эти резольверы описаны в файле public-resolvers.md.

Пример описания DNS-резольвера:

## aaflalo-me
DNS-over-HTTPS server running rust-doh with PiHole for Adblocking.
Non-logging, AD-filtering, supports DNSSEC.
Hosted in Netherlands on a RamNode VPS.
sdns://AgMAAAAAAAAADjE3Ni41Ni4yMzYuMTc1ID4aGg9sU_PpekktVwhLW5gHBZ7gV6sVBYdv2D_aPbg4DmRucy5hYWZsYWxvLm1lCi9kbnMtcXVlcnk

Красным цветом выделено имя резольвера, которое и подставляется в файл конфигурации вместо зведочек.

Самыми важными свойствами резольвера являются:

  • Non-logging — не ведет протокол запросов
  • supports DNSSEC — поддерживает цифровую подпись — DNSSEC
  • AD-filtering — фильтрует рекламные запросы

Также в файле конфигурации задан локальный адрес для прием DNS-запросов (выделен синим цветом):
127.0.0.1:53

Устанавливаем утилиту dnscrypt-proxy как службу Windows, запустив командный файл  service-install.bat. После инсталляции служба будет автоматически запускаться при каждой перезагрузке

Изменяем адреса DNS-серверов для Ваших сетевых адаптеров:
каждый адаптер имеет свои настройки DNS для протокола IPv4:

задаем как адрес DNS-сервера локальный адрес 127.0.0.1:

Проверяем работу резольвера посредством сайта ipleak.net  — должен определяться DNS-сервер, не относящийся к Вашему провайдеру:

посредством сайта Perfect Privacy :

Перехватив пакеты, можно убедиться, что теперь мой компьютер обращается к порту 443 сервера с IP-адресом 212.47.228.136:

Сам запрос зашифрован:

Voila
!

 



Шифруем DNS-запросы или dnscrypt-proxy в действии — НЕТ утечке DNS: 2 комментария

  1. Андрей

    А настройки самого браузера ? Ни черта не получается …Утечка идет по 53 порту по любому…

    1. foxylab Автор записи

      Браузер должен использовать DNS-настройки сетевого подключения (Лиса, по крайней мере). Но сейчас уже можно обойтись и без установки дополнительных программ, в Лисе, опять же, по крайней мере — DNS over HTTPS (вот здесь описано как настроить — https://www.comss.ru/page.php?id=4950). Проверено на Лисе, ай-пи отечественный, дэ-эн-эс — нет 😉

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *