DNS over HTTPS (DoH) — or «DNS encryption» as it is called in Windows — is a way to encrypt DNS queries and responses between a user’s device and the resolving DNS server. For more on this see New in Simple DNS Plus v. 9.0.
To enable this in Windows Server 2022, do the following.
Unless you are using one of the DoH DNS server pre-configured in Windows (Cloudflare, Google, Quad 9), you first need to add the DoH DNS server to the «list of known servers».
This is done in PowerShell with the command:
Add-DnsClientDohServerAddress -ServerAddress '<resolver-IP-address>' -DohTemplate '<resolver-DoH-template>' -AllowFallbackToUdp $False -AutoUpgrade $True
For example if your DNS server IP address is 1.2.3.4
and its host name is example.com
, and the DNS server is Simple DNS Plus, you would use:
Add-DnsClientDohServerAddress -ServerAddress 1.2.3.4 -DohTemplate https://example.com/doh/dns-query
To do this, click the Windows Start Button, right-click on «Windows PowerShell», click «More» and click «Run as administrator»:
Enter the command from above:
Next, click the Windows Start button, and click «Settings»:
In the «Settings» dialog, select «Network & Internet» :
Click on «Ethernet» and then click on your network connection:
Under DNS settings, click the «Edit» button:
In the «Edit DNS settings» dialog, select «Manual», turn it on for IPv4 and/or IPv6, under «Preferred DNS» enter the IP address of your DNS server, and under «Preferred DNS encryption» select one of the «Encrypted…» options:
Note that the last setting («Preferred DNS encryption) will only be available if you have completed the first steps above (adding the DNS server IP address to the «list of known servers» through PowerShell).
For more details about the «list of known servers», see Microsoft’s documentation Secure DNS Client over HTTPS (DoH).
Современные версии Windows поддерживают протокол DNS over HTTPS (DoH), который позволяет выполнять разрешение имен (DNS запросы) через шифрованное HTTPS соединение. В этой статье мы рассмотрим, для чего нужен протокол DNS over HTTPS, как его включить и использовать в Windows.
Содержание:
- Как включить DNS over HTTPS из графического интерфейса Windows?
- Настройка DNS over HTTPS в Windows 11 из командной строки
- Как убедиться, что для разрешения имен в Windows используется DNS over HTTPS?
По умолчанию DNS трафик не шифруется. Это означает, что все запросы с вашего компьютера на разрешение имен к DNS-серверу передаются по сети в открытом виде. Сторонние лица могут подслушать ваш DNS трафик, определить какие ресурсы вы посещали, или манипулировать DNS трафиком по типу main-in-the-middle. Протокол DoH позволяет инкапсулировать DNS запросы в шифрованное HTTPS соединение и отправить их DNS серверу (нужен специальный DNS сервер с поддержкой DoH).
Как включить DNS over HTTPS из графического интерфейса Windows?
Встроенная поддержка протокола DNS-over-HTTPS (DoH) в DNS клиенте доступна в Windows 11 и Windows Server 2022. Чтобы ваш клиент использовал DoH для шифрования DNS трафика, нужно в настройках сетевого подключения указать IP адрес сервера с поддержкой DoH.
Список IP адресов публичных DNS серверов с поддержкой DoH можно вывести PowerShell командой:
Get-DNSClientDohServerAddress
Провайдер | IPv4 адреса DNS серверов с поддержкой DNS over HTTPS |
Cloudflare | 1.1.1.1, 1.0.0.1 |
8.8.8.8, 8.8.4.4 | |
Quad9 | 9.9.9.9, 149.112.112.112 |
Нужно указать IPv4 и IPv6 адрес одного из этих DNS сервера (или адрес любого альтернативного DNS сервера с поддержкой DoH, предварительно добавив его, о чем ниже) в настройках сетевого интерфейса.
- Перейдите в Settings -> Network & Internet -> Ethernet (или Wi-Fi)
- В данном случае видно, что DNS трафик не зашифрован.
- Нажмите кнопку Edit
- Укажите IP адрес DNS сервера, и для параметра DNS over HTTPS выберите -> On (automatic template)
- Сохраните изменения. Теперь DNS запросы будут отправляться в шифрованном виде.
В DNS клиенте Windows Server 2022 также поддерживается DoH (но служба DNS Server в этой версии Windows Server пока не поддерживает DoH).
Укажите IP адрес DNS сервера в настройках сетевого интерфейса и включите режим обязательного использования шифрования: Encrypted only (DNS over HTTPS).
Ни один из релизов Windows 10 сейчас не поддерживает протокол DoH. В одной из инсайдерской версии (Insider Preview OS Build 19628) этот протокол можно было включить через реестр. Для включения поддержки DoH, нужно было создайть параметр реестра с помощью командлета New-ItemProperty:
$AutoDohPath = 'HKLM:\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters'
$AutoDohKey = 'EnableAutoDoh'
New-ItemProperty -Path $AutoDohPath -Name $AutoDohKey -Value 2 -PropertyType DWord -Force
Но в финальный релиз Windows 10 этот функционал не внедрен!
Настройка DNS over HTTPS в Windows 11 из командной строки
В Windows можно включить и настроить использование DNS over HTTPS из командной строки.
Сначала нужно добавить IP адрес сервера DoH в список известных серверов. Например, чтобы добавить альтернативные DNS сервера Cloudflare Family
1.1.1.3
и
1.0.0.3
(фильтруют вредоносный и взрослый контент), выполните PowerShell команду:
$DNSServer="1.1.1.3"
Add-DnsClientDohServerAddress -ServerAddress $DNSServer -DohTemplate "https://family.cloudflare-dns.com/dns-query" -AllowFallbackToUdp $False -AutoUpgrade $True
После того, как вы зарегистрировали шаблон для DNS сервера DoH нужно назначить этот IP в качестве предпочтительного DNS сервера в настройках сетевого интерфейса с помощью PowerShell команды:
Set-DnsClientServerAddress Ethernet0 -ServerAddresses ($DNSServer)
Затем включить обязательное использование DNS over HTTPS для сетевого интерфейса:
$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
С помощью отдельного параметра GPO можно включить обязательное использование DoH:
- Запустите редактор локальной GPO (
gpedit.msc
) - Перейдите в Computer Configuration -> Policies -> Administrative Templates -> Network -> DNS Client section
- Включите политику «Configure DNS over HTTPS (DoH) name resolution» и задайте значение Require DoH.
Как убедиться, что для разрешения имен в Windows используется DNS over HTTPS?
Чтобы проверить, что клиент DNS использует для разрешения имен протокол HTTPS по порту 443 вместо обычного 53 порта, используете встроенную утилита захвата сетевого трафика PktMon.exe (о которой мы говорили ранее).
Удалите все текущие фильтры Packet Monitor:
pktmon filter remove
Создайте новый фильтр для стандартного DNS порта 53:
pktmon filter add -p 53
Запустите мониторинг трафика в реальном времени (трафик выводится в консоль):
pktmon start --etw -m real-time
Если вы правильно настроили DNS over HTTPS, то трафик по порту 53 должен отсутствовать. Это ожначает, что все DNS запросы отправляются в шифрованной HTTPS сессии (на скриншоте ниже показан вывод в консоль при отключённом DoH и при включенном).
DNS over HTTPS реализован во всех популярных браузерах (Google Chrome, Mozilla Firefox, Microsoft Edge, Opera). В каждом из этих браузеров вы можете включить поддержку DoH. Таком образом все DNS запросы от браузера будут шифроваться (DNS трафик других приложений по-прежнему будет идти в открытом текстовом виде).
Больше все проблем технологии DNS over HTTPS и DNS over TLS создадут администраторам корпоративных сетей, которым станет сложнее блокировать доступ к внешним ресурсам из внутренних сетей. Также не понятно, что планирует делать Роскомнадзор, чья методика глубокой проверки и управления сетевым трафиком Deep Packet Inspection (DPI) перестанет работать при переходе протокола DNS на рельсы шифрованного https.
Secure Dns (Dns over Https, Dns Over Tls)
Secure Dns Settings for windows android and linux
- Windows Secure DNS
- Android Secure DNS
- Linux Secure DNS
Windows Secure DNS
Windows supports dns over https natively. You can enable windows secure dns by:
-
Ethernet
Settings -> Network & Internet -> Ethernet -> Edit Dns -> change DHCP to Manual -> add dns server addresses
-
Wifi
Settings -> Network & Internet -> Wi-fi -> Wifi Name -> Edit Dns -> change DHCP to Manual -> add dns server addresses
Available Dns server address
- Google
8.8.8.8
,8.8.4.4
,2001:4860:4860::8888
,2001:4860:4860::8844
- Cloudflare
1.1.1.1
,1.0.0.1
,2606:4700:4700::1111
,2606:4700:4700::1001
- Quad 9
9.9.9.9
,149.112.112.112
,2620:fe::fe
,2620:fe::fe:9
Add additional Dns Over Https (DOH) server to windows network manager
Add-DnsClientDohServerAddress -ServerAddress '<resolver-IP-address>' -DohTemplate '<resolver-DoH-template>' -AllowFallbackToUdp $False -AutoUpgrade $True
Example (add cisco OpenDNS)
Add-DnsClientDohServerAddress -ServerAddress '208.67.222.222' -DohTemplate 'https://doh.opendns.com/dns-query' -AllowFallbackToUdp $False -AutoUpgrade $True Add-DnsClientDohServerAddress -ServerAddress '208.67.220.220' -DohTemplate 'https://doh.opendns.com/dns-query' -AllowFallbackToUdp $False -AutoUpgrade $True Add-DnsClientDohServerAddress -ServerAddress '2620:119:35::35' -DohTemplate 'https://doh.opendns.com/dns-query' -AllowFallbackToUdp $False -AutoUpgrade $True Add-DnsClientDohServerAddress -ServerAddress '2620:119:53::53' -DohTemplate 'https://doh.opendns.com/dns-query' -AllowFallbackToUdp $False -AutoUpgrade $True
More DNS Providers
Known DNS Provider (By adguard-dns)
Android Secure DNS
Android support dns over tls natively from android 9. You can enable Android secure dns by:
-
MIUI
Settings -> Connection & Sharing -> Private DNS -> Private DNS provider hostname
-
Samsung
Settings -> Connection -> More connection settings -> Private DNS -> Private DNS provider hostname
-
Other
Settings -> (Search Private Dns) -> Private DNS provider hostname
Most used dns over tls addresses
- Google
dns.google
- Cloudflare
one.one.one.one
,1dot1dot1dot1.cloudflare-dns.com
cloudflare-malweare-blocksecurity.cloudflare-dns.com
cloudflare-malweare-and-adult-content-blockfamily.cloudflare-dns.com
More DNS Providers
Known DNS Provider (By adguard-dns)
Linux Secure DNS
Linux supports dns over tls natively through systemd-resolver. You can enable linux secure dns by:
- Check
systemd-resolved.service
status in your system
- If not enabled
- enable by running
sudo systemctl enable --now systemd-resolved.service
- change
/etc/resolv.conf
sudo rm /etc/resolv.conf sudo ln -s /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
- Set-up systemd-resolved to resolve dns over tls
- Modify the File
sudo nano /etc/systemd/resolved.conf
- The file should look like
[Resolve] DNS=2001:4860:4860::8888 8.8.8.8 FallbackDNS=2001:4860:4860::8844 8.8.4.4 Domains=~. #LLMNR=no #MulticastDNS=no DNSSEC=yes DNSOverTLS=yes #Cache=yes #DNSStubListener=yes #ReadEtcHosts=yes
- Restart systemd-resolved service
sudo systemctl restart systemd-resolved.service
A quick note about the options:
- DNS: A space-separated list of IPv6 and IPv4 addresses to use as system DNS servers
- FallbackDNS: A space-separated list of IPv4 and IPv6 addresses to use as the fallback DNS servers.
- Domains: These domains are used as search suffixes when resolving single-label host names,
~.
stand for use the system DNS server defined with DNS= preferably for all domains. - DNSOverTLS: If true all connections to the server will be encrypted. Note that this mode requires a DNS server that supports DNS-over-TLS and has a valid certificate for it’s IP.
- DNSSEC: allows a user, application, or recursive resolver to trust that the answer to their DNS query is what the domain owner intends it to be.
- Cache: If
yes
dns will be cached, ifno
than dns will not be cached and the dns request time will take longer. So the recomended value isyes
Fore More Details about options:
- Check manual
man resolved.conf
- Online Manual
Ubuntu reslved.conf Manual
More DNS Providers
Known DNS Provider (By adguard-dns)
The latest versions of Windows support the DNS over HTTPS (DoH) protocol, which allows domain name resolution (DNS queries) to be performed over an encrypted HTTPS connection. In this article, we’ll look at what the DNS over HTTPS protocol is used for, and how to use it in Windows.
Contents:
- How to Enable DNS over HTTPS from the Windows GUI
- DNS over HTTPS Configuration on Windows 11 via Command Prompt
- How to verify that DNS over HTTPS works on Windows
By default, DNS traffic is not encrypted. All queries from your computer to a DNS server to resolve names are sent over the network in plain text. Third parties can intercept your DNS traffic, determine what resources you have visited, or manipulate DNS responses in main-in-the-middle attacks. The DoH protocol can encapsulate DNS queries in an encrypted HTTPS connection and send them to a DNS server (a DNS server with DoH support is required).
How to Enable DNS over HTTPS from the Windows GUI
Windows 11 and Windows Server 2022 have built-in DNS-over-HTTPS (DoH) support in the DNS client. The client will use DoH to encrypt DNS traffic if you have specified the IP address of the DNS server that supports DoH in the settings of the network adapter.
Use PowerShell to list the IP addresses of public DNS servers that support DoH:
Get-DNSClientDohServerAddress
Provider | IP addresses of public DNS servers supporting DNS-over-HTTPS |
Cloudflare | 1.1.1.1, 1.0.0.1 |
8.8.8.8, 8.8.4.4 | |
Quad9 | 9.9.9.9, 149.112.112.112 |
Specify the IPv4 or IPv6 address of one of these DNS servers in the network interface settings (or the address of an alternative DNS server with DoH support, after you have added it as described below.)
- Navigate to Settings -> Network & Internet -> Ethernet (or Wi-Fi)
- DNS traffic is not encrypted in this case.
- Click the Edit
- Enter the IP address of the DNS server and select -> On (automatic template) for the DNS over HTTPS parameter.
- Save the changes. Now the DNS queries from the computer will be encrypted.
Windows Server 2022 DNS client also supports DoH (however, the DNS Server service itself does not support DoH in this release.).
Specify the DNS server IP address in the network interface settings and enable the Encrypted only (DNS over HTTPS) mode.
None of the Windows 10 releases currently support the DoH protocol. In one of the Insider Windows 10 releases (Insider Preview OS Build 19628), this protocol could be enabled via the registry. To enable DoH support, you had to create a registry parameter by using the New-ItemProperty cmdlet:
$AutoDohPath = 'HKLM:\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters'
$AutoDohKey = 'EnableAutoDoh'
New-ItemProperty -Path $AutoDohPath -Name $AutoDohKey -Value 2 -PropertyType DWord -Force
However, this feature has not been implemented in the final release of Windows 10!
DNS over HTTPS Configuration on Windows 11 via Command Prompt
On Windows, you can use the command line interface to enable and configure DNS over HTTPS.
First, add the IP address of the DoH server to the list of known DNS servers. For example, to add Cloudflare Family alternative DNS servers 1.1.1.3
and 1.0.0.3
(used to filter malware and adult content), run:
$DNSServer="1.1.1.3"
Add-DnsClientDohServerAddress -ServerAddress $DNSServer -DohTemplate "https://family.cloudflare-dns.com/dns-query" -AllowFallbackToUdp $False -AutoUpgrade $True
After you register the template for the DoH DNS server, assign that IP as the preferred DNS server in the network interface settings using the following PowerShell command:
Set-DnsClientServerAddress Ethernet0 -ServerAddresses ($DNSServer)
Then enable mandatory use of DNS over HTTPS for the network interface:
$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
Or use a separate GPO setting to enforce using DoH:
- Open the local GPO editor (
gpedit.msc
) - Navigate to Computer Configuration -> Policies -> Administrative Templates -> Network -> DNS Client section
- Enable the policy Configure DNS over HTTPS (DoH) name resolution and set the value to Require DoH.
How to verify that DNS over HTTPS works on Windows
To verify that the DNS client is using the encrypted HTTPS (443) protocol for name resolution instead of the default UDP/TCP port 53, use the built-in network traffic capture tool named PktMon.exe
.
Remove all current Packet Monitor filters:
pktmon filter remove
Create a new filter for the default DNS port (53):
pktmon filter add -p 53
Start real-time traffic monitoring (traffic will be output to the console):
pktmon start --etw -m real-time
There should be no traffic on port 53 if you have properly configured DNS over HTTPS. This means that all DNS queries are sent in an encrypted HTTPS session (the screenshot below shows the console output with DoH disabled and enabled).
DNS over HTTPS support is implemented in all popular browsers (Google Chrome, Mozilla Firefox, Microsoft Edge, Opera). You can enable DoH support in any of them. This encrypts your browser’s DNS queries (DNS traffic from other apps will still sent as plain text).
DNS over HTTPS and DNS over TLS will cause problems for corporate network administrators by making it more difficult to restrict access to external resources from internal networks.
DNS over HTTPS — это безопасный DNS. Потому что в этом случае весь трафик DNS шифруется и скрывается в обширном потоке HTTPS трафика. С DNS over HTTPS повышается безопасность и конфиденциальность пользователя в сети интернет. Давайте настроим себе безопасный DNS в Linux (Debian) и Windows.
Введение
DNS
DNS (Domain Name System) преобразовывает доменные имена ресурсов сети интернет в соответствующие IP адреса. Запросы и ответы DNS отправляются открытым текстом. Вот, например, как легко с помощью обычного сетевого анализатора прочитать доменное имя (adminkin.pro) в запросе DNS и в ответе DNS:
Утечка DNS
Утечка DNS (DNS leak) — это ситуация, когда отправляются запросы DNS через незащищенные каналы, раскрывая информацию о посещаемых пользователем веб-сайтах и доменных именах. В этой ситуации третьи лица, такие как интернет-провайдеры или злоумышленники, могут получить доступ к онлайн-активности пользователя. Это нарушает приватность и безопасность пользователя в интернете.
DNS over HTTPS (DoH)
DNS over HTTPS (DoH) — это протокол для шифрования трафика DNS, чтобы третьи лица не могли интерпретировать пересылаемые данные. DoH использует порт 443, который используется и для всего остального трафика HTTPS (web трафика).
Dnscrypt-proxy
Dnscrypt-proxy — это кроссплатформенный DNS-прокси. Повышает безопасность и конфиденциальность, обмениваясь данными с вышестоящими удаленными DNS-серверами по защищенными каналам. Поддерживает, среди прочих, протокол шифрования DNS over HTTPS с использованием TLS 1.3. Ускоряет работу за счет кэширования ответов DNS. Подробнее смотрите в документации разработчиков dnscrypt-proxy на GitHub https://github.com/DNSCrypt/dnscrypt-proxy/wiki.
Установка dnscrypt-proxy
Скачиваем dnscrypt-proxy c GitHub разработчиков: https://github.com/DNSCrypt/dnscrypt-proxy/releases. Ищем файл вида dnscrypt-proxy-win64-*.zip, скачиваем его и распаковываем.
Запускаем Командную строку Windows от имени администратора:
Переходим в директорию, в которую распаковали dnscrypt-proxy. В моем случае это будет команда:
cd c:\dnscrypt-proxy\win64\
Создаем конфигурационный файл dnscrypt-proxy.toml:
copy example-dnscrypt-proxy.toml dnscrypt-proxy.toml
Запускаем dnscrypt-proxy:
.\dnscrypt-proxy.exe
Dnscrypt-proxy запускается на IP адресе 127.0.0.1, на порту 53 и готовится получать запросы как по протоколу TCP, так и UDP. Сортируются по задержке ответа DNS-резолверы (см. рисунок выше).
Все! Dnscrypt-proxy готов к работе:
Проверим, как выполнится запрос на разрешение доменного имени adminkin.pro на IP адрес. Для этого запускаем еще одну командную строку Windows (запуск от имени администратора не требуется), переходим в директорию dnscrypt-proxy и вводим команду:
.\dnscrypt-proxy.exe -resolve adminkin.pro
Доменное имя adminkin.pro разрешилось с помощью сервиса на 127.0.0.1:53, т.е. с помощью dnscrypt-proxy. IP адрес запрашиваемого домена успешно получен (77.222.56.16). Разрешение DNS работает!
Настройка DNS over HTTPS
Чтобы пустить весь трафик DNS: от браузеров, web приложений, от самой ОС Windows через dnscrypt-proxy, изменим DNS настройку сетевого подключения, через которое выходим в интернет. Укажем в качестве IP адреса DNS-сервера — 127.0.0.1 (IP адрес dnscrypt-proxy).
В моем случае сетевое подключение, через которое выход в интернет, — это Беспроводная сеть. Выбираю Свойства:
В окне Свойства кликаю мышью по IP версии 4 (TCP/IPv4), нажимаю кнопку Свойства, далее выбираю Использовать следующие адреса DNS-серверов и ввожу 127.0.0.1:
Проверяем, как работает просмотр веб-страниц, загрузка файлов, веб-приложения, мессенджеры — все, что может использовать DNS.
Зарегистрируем dnscrypt-proxy как системную службу Windows. Системна служба Windows запускается при загрузке операционной системы и работает в фоновом режиме.
В окне командной строки, запущенной от имени администратора, нажимаем комбинацию клавиш Ctrl + C, чтобы остановить dnscrypt-proxy.
Чтобы зарегистрировать dnscrypt-proxy как системную службу Windows, в окне командной строки, запущенной от имени администратора, набираем команду:
.\dnscrypt-proxy.exe -service install
Чтобы стартовать dnscrypt-proxy, набираем команду:
.\dnscrypt-proxy.exe -service start
Остановить dnscrypt-proxy:
.\dnscrypt-proxy.exe -service stop
Перезапустить dnscrypt-proxy, например, после изменения конфигурационного файла:
.\dnscrypt-proxy.exe -service restart
Отменить регистрацию dnscrypt-proxy в качестве системной службы Windows:
.\dnscrypt-proxy.exe -service uninstall
Чтобы проверить, работает ли разрешение DNS:
.\dnscrypt-proxy.exe -resolve example.com
Внесем минимальные правки в конфигурационный файл dnscrypt-proxy.toml. Для этого откроем этот конфигурационный файл как текстовый файл в любом текстовом редакторе Windows.
Чтобы использовать только DNS резолверы, реализующие протокол DNS over HTTPS, отключаем использование DNS резолверов, реализующих протокол DNSCrypt:
dnscrypt_servers = false
Проверить, если ли у вас подключение к IPv6, можно на сайте https://test-ipv6.com/. Даже если у вас нет подключения к IPv6, обязательно будут приложения, отправляющие DNS запросы для разрешения IPv6 адресов. Dnscrypt-proxy можно настроить на немедленный ответ: «нет IPv6 адресов», вместо отправки запроса на вышестоящий DNS резолвер и ожидания бесполезного ответа. Настройка немедленного ответа:
block_ipv6 = true
Сохраняем конфигурационный файл, перезапускаем dnscrypt-proxy.
Проверка работоспособности DNS over HTTPS
Сначала очистим кэш DNS. Запускаем командную строку от имени администратора и вводим команду:
ipconfig /flushdns
Кэш DNS очищен.
Чтобы проверить, что весь DNS трафик проходит через dnscrypt-proxy, остановим dnscrypt-proxy. И убедимся, что приложения, включая веб-браузеры, больше не могут разрешать DNS имена. Это и может означать, что весь DNS трафик проходил через dnscrypt-proxy.
Чтобы проверить работоспособность DNS over HTTPS, запустим захват трафика с помощью сетевого анализатора, например, с помощью Wireshark. И применим фильтр, чтобы нам отображались только захваченные DNS пакеты. Выждем время и убедимся в отсутствии DNS пакетов, т.е. в отсутствии исходящего незашифрованного трафика.
Вот захвачено 243 400 пакетов, а из них незашифрованных DNS пакетов — 0.
DNS over HTTPS в Linux (Debian)
Установка dnscrypt-proxy
Скачиваем dnscrypt-proxy самой свежей версии c GitHub разработчиков: https://github.com/DNSCrypt/dnscrypt-proxy/releases. Ищем файл вида dnscrypt-proxy-linux_x86_64-*.tar.gz, скачиваем его и распаковываем, например, в директорию /opt/dnscrypt-proxy/ (на момент написания статьи самая свежая версия dnscrypt-proxy была 2.1.4):
wget https://github.com/DNSCrypt/dnscrypt-proxy/releases/download/2.1.4/dnscrypt-proxy-linux_x86_64-2.1.4.tar.gz
mkdir -p /opt/dnscrypt-proxy/ && tar -C /opt/dnscrypt-proxy -xvzf dnscrypt-proxy-linux_x86_64-2.1.4.tar.gz
Переходим в директорию, в которую распаковали dnscrypt-proxy. В моем случае это будет команда:
cd /opt/dnscrypt-proxy/linux-x86_64/
Создаем конфигурационный файл dnscrypt-proxy.toml:
cp example-dnscrypt-proxy.toml dnscrypt-proxy.toml
Проверяем, не слушает ли какой сервис нужный нам порт 53:
ss -lp 'sport = :domain'
ss
— это утилита для вывода информации о сетевых сокетах.
-lp
— флаг вывода подробной информации.
'sport = :domain'
— это фильтр, который указывает на поиск сокетов с определенным исходящим портом. В нашем случае — это порт domain (порт 53), который обычно используется для DNS (Domain Name System).
Если порт 53 незанят, то вывод команды будет следующий:
Если порт 53 занят, то сервис, занявший его, нужно останавливать и убирать из автозагрузки. В случае, если порт 53 занял systemd-resolved, то команды будет следующие:
systemctl stop systemd-resolved
systemctl disable systemd-resolved
Запускаем dnscrypt-proxy:
./dnscrypt-proxy
Dnscrypt-proxy запускается на IP адресе 127.0.0.1, на порту 53 и готовится получать запросы как по протоколу TCP, так и UDP (см. рисунок выше). Загружается список DNS резолверов с поддержкой шифрования, тестируется их доступность и скорость отклика.
Dnscrypt-proxy готов к работе:
Настройка DNS over HTTPS
Открываем новое окно терминала. Изменим системные настройки DNS. Сначала делаем резервную копию файла /etc/resolv.conf:
cp /etc/resolv.conf /etc/resolv.conf.backup
/etc/resolv.conf может быть как файлом, так и символической ссылкой. Поэтому, сначала его удалим командой:
rm -f /etc/resolv.conf
Затем создадим новый файл /etc/resolv.conf со следующим содержимым:
nameserver 127.0.0.1
options edns0
Выставим атрибут «только для чтения» (immutable) у файла /etc/resolv.conf. Этот атрибут не позволяет изменить файл даже привилегированным пользователям, защищает файл от случайного или нежелательного изменения.
chattr +i /etc/resolv.conf
Чтобы убрать атрибут «только для чтения», введите команду:
chattr -i /etc/resolv.conf
Проверим, как выполнится запрос на разрешение доменного имени adminkin.pro на IP адрес. Вводим команду:
/opt/dnscrypt-proxy/linux-x86_64/dnscrypt-proxy -resolve adminkin.pro
Доменное имя adminkin.pro разрешилось с помощью сервиса на 127.0.0.1:53, т.е. с помощью dnscrypt-proxy. IP адрес запрашиваемого домена успешно получен (77.222.56.16). Разрешение DNS работает!
Проверяем, как работает просмотр веб-страниц, загрузка файлов и другое использование системы, где требуется разрешение имен DNS.
Например, получим содержимое главной страницы сайта https://adminkin.pro с помощью утилиты curl из командной строки:
apt install curl
curl https://adminkin.pro
Получили? Супер!
Теперь зарегистрируем dnscrypt-proxy как системную службу Linux. Системная служба запускается при загрузке системы и работает в фоновом режиме.
Остановим dnscrypt-proxy, нажав комбинацию клавиш Ctrl + C в окне терминала, где мы запустили dnscrypt-proxy.
Чтобы зарегистрировать dnscrypt-proxy как системную службу, вводим команду:
./dnscrypt-proxy -service install
Стартуем dnscrypt-proxy:
./dnscrypt-proxy -service start
Чтобы остановить dnscrypt-proxy:
./dnscrypt-proxy -service stop
Перезапустить dnscrypt-proxy, например, после изменения конфигурационного файла:
./dnscrypt-proxy -service restart
Отменить регистрацию dnscrypt-proxy в качестве системной службы:
./dnscrypt-proxy -service uninstall
Отредактируем конфигурационный файл dnscrypt-proxy.toml также, как мы это делали в Windows (Настройка конфигурационного файла dnscrypt-proxy.toml в Windows). И не забываем после изменения конфигурационного файла перезапустить dnscrypt-proxy.
Проверка работоспособности DNS over HTTPS
Проверим работоспособность DNS over HTTPS. Запустим захват трафика с помощью сетевого анализатора tcpdump:
apt install tcpdump
tcpdump -n dst port 53
Такая команда позволит захватывать и отображать только пакеты, проходящие через порт 53. Так мы отловим незашифрованные DNS пакеты, если они остались.
-n
указывает tcpdump не выполнять обратное разрешение DNS для IP-адресов и портов, а оставить их в числовом формате.
В новом окне терминала запустим команду на получение главной страницы сайта https://adminkin.pro с помощью утилиты curl:
curl https://adminkin.pro
Ура! Незашифрованных DNS пакетов нет:
Если остановить dnscrypt-proxy и восстановить из бекапа файл /etc/resolv.conf, то картина будет другая:
Выводы
Когда вы в адресной строке браузера набираете доменное имя сайта, ваша система отправляет запрос, что вы ищете IP адрес такого-то домена. И в этот момент, например, ваш интернет-провайдер может зарегистрировать у себя, к какому домену вы подключаетесь. DNS over HTTPS делает этот надзор невозможным, а анонимность и конфиденциальность пользователя в интернете — возможными. А благодаря данной статье настройка DNS over HTTPS тоже делается возможной.
Очень жду ваши вопросы в комментариях под статьей!