По умолчанию весь DNS-трафик операционная система передаёт серверу через сеть в открытом виде. То есть, фактически любой, у кого есть возможность как-то Ваш трафик перехватить, сможет увидеть какие сайты вы посещаете. Чтобы решить эту проблему в ОС Windows, компания Microsoft внедрила поддержку протокола DNS over HTTPS (сокращённо DoH) в Windows 11 и Windows Server 2022. И сейчас я хочу показать как этим пользоваться.
В этой инструкции я покажу как настроить DNS-over-HTTPS через интерфейс операционной системы и с помощью командной оболочки PowerShell. Использовать мы будем сервер Яндекс.DNS 77.88.8.8.
Содержание
Настройка DNS over HTTPS в Windows 11
Самый простой способ включить шифрование DNS-запросов, с которым справится каждый, предоставляет нам интерфейс операционной системы.
Вам надо открыть параметры системы и открыть настройки сетевого интерфейса.
Ethernet-подключение:
Параметры => Сеть и Интернет => Ethernet => Назначение DNS-сервера => Изменить => Вручную
Беспроводная сеть Wi-Fi:
Параметры => Сеть и Интернет => Wi-Fi => Свойства => Назначение DNS-сервера => Изменить => Вручную
В моём примере я буду включать DoH на Wi-Fi подключении.
После нажатия на кнопку «Изменить» появится окно «Изменение параметров DNS для сети». Здесь обычно стоит значение «Автоматически (DHCP)», а мы меняем его на «Вручную» и включаем протокол IPv4. Если Вы активно используете уже IPv6, то включайте и настаивайте его.
Далее находим параметр «DNS по протоколу HTTPS», и включаем его. Тут есть два варианта. Первый — «Включено (автоматический шаблон)». Он используется для официально поддерживаемых DNS-серверов: Google, Cloudflare и Quad9. Как посмотреть весь этот список я покажу ниже. Мы же с Вами будем использовать второй вариант — «Включено (ручной шаблон)» и пропишем DNS-сервер от Яндекса: 77.88.8.8. Его шаблон протоколу HTTPS такой: https://common.dot.dns.yandex.net/dns-query. Нажимаем кнопку «Сохранить» для применения настроек.
Как включить шифрование DNS запросов через PowelShell
Шаг 1. Выбор DNS-сервера
В Windows уже есть встроенный список публичных DNS-серверов с поддержкой DoH, например:
Quad9 - 9.9.9.9 Google — 8.8.8.8 Cloudflare — 1.1.1.1 и т.д.
Вывести этот список в командной оболочке PowerShell Вам поможет команда Get-DNSClientDohServerAddress.
Вы можете использовать любой DNS из предложенного системой списка или добавить в него DNS-сервер от Яндекса — 77.88.8.8. Кроме его IP адреса, нам нужно указать и его URL-адрес — «https://common.dot.dns.yandex.net/dns-query«. Добавляем сервер в список
$DNSServer="77.88.8.8" Add-DnsClientDohServerAddress -ServerAddress $DNSServer -DohTemplate "https://dns.yandex.ru/dns-query" -AllowFallbackToUdp $False -AutoUpgrade $True
Шаг 2. Включение DNS over HTTPS на сетевом интерфейсе
Задаём IP Яндекс.DNS как предпочтительный для адаптера Ethernet0:
Set-DnsClientServerAddress Ethernet0 -ServerAddresses ($DNSServer)
Если у Вас имя адаптера отличается от указанного в примере, то в командах надо будет внести соответствующие исправления.
Включаем DoH для интерфейса Ethernet0:
$i = Get-NetAdapter -Physical -Name Ethernet0 $s1 = "HKLM:System\CurrentControlSet\Services\Dnscache\InterfaceSpecificParameters\" + $i.InterfaceGuid + "\DohInterfaceSettings\Doh\$DNSServer" New-Item -Path $s1 -Force | New-ItemProperty -Name "DohFlags" -Value 1 -PropertyType QWORD Clear-DnsClientCache
Теперь можно проверять шифруются ли наши DNS-запросы или нет.
Как проверить работает DNS-over-HTTPS или нет
Проверить работу DNS-over-HTTPS можно несколькими способами. Первый — это разнообразные сервисы в Интернете. Например, DNS leak best. Заходим на сайт, нажимаем кнопку «Extended test» и ждём пока пройдёт тестирование.
В результатах Вы должны будете увидеть указанные DNS в столбце ISP. В моём примере всё верно. Если бы DoH не работала, то вместо Яндекса там «светились» бы серверы провайдера.
Второй способ проверить работу DoH — это использование встроенного в Windows анализатора сетевого трафика Packetmon. Нам нужны всего три команды:
1. Сброс всех фильтров пакетов сетевого трафика:
pktmon filter remove
2. Добавление своего фильтра:
pktmon filter add -p 53
Packetmon будет ловить все пакеты на 53-ем TCP порту
3. Запуск анализа трафика:
pktmon start --etw -m real-time
Теперь надо в браузере открыть несколько разных сайтов, а потом посмотреть в вывод Packetmon’а:
А здесь, как мы видим, ничего нет. Запросы через обычный DNS не бегают. Чего мы и добивались! Теперь все DNS-запросы ходят только через зашифрованное HTTPS-соединение и отследить их практически невозможно!