3
сентябрь
2026
Запуск в Linux DOH - разрешения имён в IP-адреса DNS через HTTPS
11:11

Запуск в Linux DOH - разрешения имён в IP-адреса DNS через HTTPS

3 сентябрь 2026 11:11

Данная статья является дополнением к настройке кеширующего DNS-сервера systemd-resolved.

Введение

Данная статья не описывает методы обхода блокировок, а посвящена способу разрешения имён DNS через HTTPS с кешированием, для повышения защищённости компьютеров под управлением ОС Linux.

Дело в том, что перед обращением к любому веб-сайту запросы к любому DNS-серверу, не важно [бесплатному, независимому или государственному] передаются в виде открытого текста. Что создаёт возможности:
1) перехвата таких обращений любым из компьютеров в сегменте локальной сети.
2) анализ запросов к DNS на уровне провайдера или вышестоящего провайдера (при рекурсивных DNS).
3) возможность вмешательства в процесс передачи таких сообщений (выдача фальшивых или пустых ответов злоумышленниками, подмена в DNS-ответах IP-адресов).
4) многие DNS-серверы не имеют фильтрации от мошеннических, вредоносных или сайтов с рекламой, тогда как многие специализированные DNS-серверы имеют такую возможность (называются "семейный DNS" или "безопасный DNS").

Сравнение технологий:

  • Использование DNSSEC решает только проблему невозможности подмены ответа DNS-сервера с помощью подписи сообщения. Исходящий от клиента DNSSEC запрос "прозрачен", чётко виден в открытом тексте как при обычном DNS.
  • Использование DNS поверх TLS (DOT): не работает по неизвестной причине (мне не удалось его запустить). Также, протокол DOT использует на удалённом сервере порт 853/TCP, который как и 53/UDP (DNS) легко определяется при изучении трафика.
  • Использование DNS поверх HTTPS (DOH): работает (цель данной статьи рассказать об опыте использования). Стандартный порт DOH и порт HTTPS один и тот же: 443.

Описание решения: запуск DOH в ОС Linux

Данное решение установит DOH на всю операционную систему Linux. Для решения потребуется работающий systemd-resolved. Что ограничивает список ОС, к которым применима данная инструкция, только теми ОС, которые используют систему инициализации служб systemd.

Проверка, что используется система инициализации systemd:

ps -p 1 -o comm=

Ответ должен быть следующий:
systemd

Для запуска DOH на клиенте потребуется:
1) выполнить инструкцию по установке и настройке systemd-resolved,
2) установить пакет dnscrypt-proxy
3) настроить пакет dnscrypt-proxy при помощи файла конфигурации с расширением .toml.
4) запустить службу dnscrypt-proxy
5) перенаправить запросы кеширующего DNS-сервера systemd-resolved на dnscrypt-proxy.
6) выполнить настройку веб-браузера (отключить в нём свой DNS-over-HTTPS для работы через локальный кеширующий локальный DNS-сервер).

Действия по шагам

1) Выполняем установку, настройку кеширующего DNS-сервера systemd-resolved.

2) Устанавливаем пакет dnscrypt-proxy

sudo apt update
sudo apt install dnscrypt-proxy

3) Создаем файл конфигурации /etc/dnscrypt-proxy/dnscrypt-proxy.toml

sudo nano /etc/dnscrypt-proxy/dnscrypt-proxy.toml

и добавляем в dnscrypt-proxy.toml текст:

# Empty listen_addresses to use systemd socket activation
listen_addresses = ['127.0.0.1:5053']
server_names = ['google'] # or 'yandex'. See https://dnscrypt.info/public-servers/ .

# Use reachable
ipv4_servers=true
ipv6_servers=false

# Enable DoH specifically:
doh_servers = true
dnscrypt_servers = false  # Only DoH, no DNScrypt
require_dnssec=false
require_nolog=true
require_nofilter=true
timeout=5000
keepalive=30 # Keep alive connection, seconds
cert_refresh_delay=240
ignore_system_dns=true
netprobe_timeout=60
netprobe_address='9.9.9.9:53'
block_ipv6=true
block_unqualified=true
reject_ttl=10
cache=true
cache_size=4096
cache_min_ttl=2400
cache_max_ttl=86400
cache_neg_min_ttl=60
cache_neg_max_ttl=600

[nx_log]
  file = '/var/log/dnscrypt-proxy/nx.log' # Log file is off by "require_nolog=true"

[sources]
  [sources.'public-resolvers']
  url = 'https://download.dnscrypt.info/resolvers-list/v3/public-resolvers.md'
  cache_file = '/var/cache/dnscrypt-proxy/public-resolvers.md'
  minisign_key = 'RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3'
  refresh_delay = 73
  prefix = ''
[sources.relays]
  url = 'https://download.dnscrypt.info/resolvers-list/v3/relays.md'
  cache_file = '/var/cache/dnscrypt-proxy/relays.md'
  minisign_key = 'RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3'
  refresh_delay = 73
  prefix = ''

Сохранение и выход: Ctrl+S, Ctrl+X

Перезапускаем службу dnscrypt-proxy:

sudo systemctl restart dnscrypt-proxy

Комментарий:

  • кеширующий DNS-сервер systemd-resolved работает на localhost на 53 порту и 127.0.0.53:53
  • новая служба dnscrypt-proxy будет слушать порт 5053.
  • разрешение имен здесь через [google], службу DNS over HTTPS (соответствует https://dns.google/dns-query – RFC 8484 (GET и POST))
  • IPv4 используется, IPv6 отключен
  • серверы DOH - используются
  • серверы DNSCRYPT отключены
  • опция DNSSEC отключена
  • журнал запросов отключен
  • опция фильтров доменов отключена
    ...
  • IP-адрес DNS-сервера для разрешения первого запроса netprobe_address='9.9.9.9:53'.
  • разделы "sources", "sources.'public-resolvers'" и "sources.relays" нужны для работы службы dnscrypt-proxy.

Разрешение имён через DOH действует на всю операционную систему Linux, на все программы и утилиты в ней (dig, ping, traceroute).

4) Запуск службы dnscrypt-proxy и разрешение автоматического запуска при загрузке ОС:

sudo systemctl enable dnscrypt-proxy
sudo systemctl start dnscrypt-proxy

5) Перенаправление запросов DNS.

Если Вами была создана символьная ссылка,

ls -l /etc/resolv.conf

Только если ссылка есть, удаляем её:

sudo rm /etc/resolv.conf

Открываем файл /etc/resolv.conf на редактирование

sudo nano /etc/resolv.conf

И добавляем в него текст:

nameserver 127.0.0.53

Сохранение и выход: Ctrl+S, Ctrl+X.

Что перенаправит согласно /etc/resolv.conf запросы приложений "ping", "dig" на systemd-resolved по локальному адресу 127.0.0.53.

Сервис systemd-resolved будет передавать запросы DNS на dnscrypt-proxy на 127.0.0.1:5053, для чего редактируем файл:

sudo nano /etc/systemd/resolved.conf

Содержимое файла привести к виду:

[Resolve]
DNS=127.0.0.1:5053
FallbackDNS=
Domains=~.

Здесь 127.0.0.1:5053 - IP-адрес и порт dnscrypt-proxy.

Сохранение и выход: Ctrl+S, Ctrl+X.

Перезапускаем службу:

sudo systemctl restart systemd-resolved

Перенаправление запросов от службы "SystemD-ResolveD" на dnscrypt-proxy (127.0.0.1:5053) сделано!

В свою очередь, dnscrypt-proxy перенаправит запросы через DNS over HTTPS в Интернет на DOH-сервер, который указан в конфигурации TOML в разделе server_names = [].

Проверка

Прежде всего, проверьте состояние dnscrypt-прокси и кеширующего DNS-сервера

sudo systemctl status dnscrypt-proxy
sudo systemctl status systemd-resolved

Ошибок быть не должно, а состояние "Active: active (running)" и "Now listening to 127.0.0.1:5053 [TCP]" у первого и такое же состояние "Active: active (running)" у второго.

Время выполнения запросов:

time resolvectl query lenta.com
lenta.com: 178.248.232.88

-- Information acquired via protocol DNS in 53.8ms.
-- Data is authenticated: no; Data was acquired via local or encrypted transport: no
-- Data from: network

real    0m0,065s
user    0m0,000s
sys 0m0,010s
time resolvectl query lenta.com
lenta.com: 178.248.232.88

-- Information acquired via protocol DNS in 2.4ms.
-- Data is authenticated: no; Data was acquired via local or encrypted transport: no
-- Data from: network

real    0m0,009s
user    0m0,003s
sys 0m0,004s

Также, выполните подряд две команды:

dig ya.ru
dig ya.ru

Разрешение имён и кеширование ответов на запросы работает.

Замечание: команда resolvectl statistics выдает неправильные значения "Cache Misses", можно игнорировать. Главное - это время ответа на запрос равно нулю.

Теперь остановим службу и посмотрим, сможет ли работать разрешение имён DNS при остановке dnscrypt-proxy?
Т.е. не происходит ли утечка DNS.

sudo pkill -STOP dnscrypt-proxy

Теперь следующая команда "висит":

resolvectl query lenta.com

Ctrl+C

Запускаем снова и проверяем работу:

sudo pkill -CONT dnscrypt-proxy
resolvectl query lenta.com

Разрешение имён снова работает! За основу методики тестирования взят документ.

6) Настройка веб-браузеров

В веб браузерах нужно отключить их DNS over HTTPS, если они включены. Так как все запросы теперь идут через локальный кеширующий DNS, которые перенаправляет их через системный dnscrypt-proxy.

Mozilla Firefox:

  • Edit - Settings - Приватность и защита - DNS over HTTPS - Выключен (Use your default DNS resolver).
    Google Chrome, Chromium-Gost:
  • Настройки - Конфиденциальность и безопасность - Использовать безопасный DNS сервер - Выключен.

Проверка: browserleaks.com DNS leak test - https://browserleaks.com/dns

7) Указание кеширующего DNS-сервера в настройках сети Network Manager.

Настройка Network Manager доступна в системном лотке (панели около часов).
В настройках подключения к локальной сети или Wi-Fi, как было указано в предыдущей статье, нужно указать DNS: 127.0.0.53, который соответствует службе systemd-resolved.

Возможные значения для опции "server_names = [...]"

sudo nano /etc/dnscrypt-proxy/dnscrypt-proxy.toml

_Некоторые варианты имён DOH-серверов для раздела servernames = [...] файла TOML

  • controld-unfiltered - Control D — бесплатный DNS-сервер без фильтрации. Не блокирует и не переписывает домены. Не ведет журнал запросов. Глобальная сеть Anycast. https://controld.com/free-dns Управляется компанией Control D. Страница сервиса: https://controld.com/free-dns
  • dnsforfamily-doh - DNS for Family — сервис безопасного поиска. Блокирует домены, относящиеся к контенту для взрослых, азартным играм, наркотикам, вредоносному ПО, мошенничеству/фишингу, прокси/анонимайзерам и рекламе; черный список обновляется ежедневно. Обеспечивает безопасный поиск в Google, YouTube, Brave, Ecosia, Bing, DuckDuckGo и Yandex. Социальные сети, такие как Facebook и Instagram, не блокируются. DNS-запросы не регистрируются. Бесплатный сервис. Предоставляется: https://dnsforfamily.com
  • google - Общедоступный DNS-сервер Google. Глобальная служба Anycast, управляемая Google. Сервис управляется Google Public DNS. Страница сервиса: https://developers.google.com/speed/public-dns
  • yandex - Yandex Public DNS Safe resolver. Сервис управляется компанией Yandex. Страница сервиса: https://dns.yandex.com/ Может регистрировать запросы.
  • yandex-safe - Yandex Public DNS Safe resolver. Anycast-сервис от Yandex с фильтрацией вредоносного ПО. Сервис управляется компанией Yandex. Страница сервиса: https://dns.yandex.com/ Может регистрировать запросы.
  • quad9-doh-ip4-port443-filter-pri - DNS-over-HTTPS сервер от компании Quad9. На рисунке выше.

После изменения сервера, перезапустите службу:

sudo systemctl restart dnscrypt-proxy

Для соответствия имён, см. домашнюю страницу - https://dnscrypt.info/public-servers/.

Результат

Мы настроили работу DNS через кеширующий сервер с передачей через dnscrypt-proxy.
Кроме повышенного уровня безопасности, скорость открытия веб-страниц значительно улучшилась за счёт двойного кеширования ответов DNS-серверов (в dnscrypt-proxy и systemd-resolved).

Удаление dnscrypt-proxy

Если потребуется, пакет dnscrypt-proxy можно удалить:

sudo apt remove dnscrypt-proxy

После удаления, не забудьте исправить файл

sudo nano /etc/systemd/resolved.conf

Содержимое файла привести к виду:

[Resolve]
DNS=192.168.1.1:53
FallbackDNS=77.88.8.1
Domains=~.

где вместо 192.168.1.1 указать IP-адрес маршрутизатора Вашей локальной сети.

Перезапускаем службу:

sudo systemctl restart systemd-resolved

Источник

Данная статья сильно отличается от официальной инструкции, где установка dnscrypt-proxy на порту 53 и не используется служба systemd-resolved.

Основным источником является пример файла конфигурации "example-dnscrypt-proxy.toml":



Похожие публикации