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