Skip to content

Custom DNS resolver and DNS-over-TLS#376

Draft
scaik wants to merge 8 commits into
hufrea:mainfrom
scaik:main
Draft

Custom DNS resolver and DNS-over-TLS#376
scaik wants to merge 8 commits into
hufrea:mainfrom
scaik:main

Conversation

@scaik

@scaik scaik commented Feb 24, 2026

Copy link
Copy Markdown

Закрывает #293

PR добавляет возможность указывать свой адрес DNS-сервера вместо использования системного
и использовать DNS-over-TLS вместо незашифрованных запросов.
Особенно полезно в текущих реалиях, когда ресурсы удаляют с DNS-серверов провайдеров.

При --dns-mode system (по умолчанию) используется системный резолвер
При --dns-mode plain используется адрес из --dns <ip[:port]>
При --dns-mode dot используется адрес из --dns <host[:port]>, требует наличие libssl в среде исполнения

Comment thread resolve.c
Comment thread resolve.c
@hufrea

hufrea commented Mar 9, 2026

Copy link
Copy Markdown
Owner

Спасибо, конечно, но очень вероятно, что принято не будет:

  • Нет асинхронности. Разрешение имени через DOT займет ~4*RTT, а это сотни миллисекунд - несколько одновременных запросов и прокси зависнет на секунды.
  • Отсутствует кеширование, предварительное подключение к серверу (чтоб не переподключаться на каждый запрос) и пр. оптимизации.

Добавление всего этого сильно усложнит код и, вероятно, потребует больше строк, чем вся реализация прокси. Пусть DNS занимаются программы, специально адаптированные для этого, у этого проекта другие цели. К тому же, сейчас DOT легко настраивается на уровне системы, в браузере или проксификаторе, поэтому в еще одной реализации, которая еще и будет сильно неполноценной, нет особой необходимости.

@scaik

scaik commented Mar 9, 2026

Copy link
Copy Markdown
Author

Спасибо за ответ!

Реализация, действительно, не самая заморочная, но я думал про async и кеширование, и не думаю, что это будет сложно сделать (хотя как подступиться к асинхронности я пока не знаю, избаловался tokio в расте)).
Кинул PR в таком виде, чтобы посмотреть - зайдет, не зайдет.

На счёт "очередной реализации" частично не соглашусь, так как:

  1. не все делается сразу, фичи должны пройти определённый эволюционный путь
  2. dot или doh из коробки - очень удобно

Если принимать фичу, могу сделать асинхронность(сделать все, что могу) и кеширование.
Если не принимать, то я думаю, что возможность хотя бы указать свой адрес dns сервера будет очень полезна, чтобы направлять запросы в случаях, где нет возможности выставить адрес dns в ОС, и стоит её оставить, или принять другой PR, который её тоже реализует.

@scaik scaik marked this pull request as draft May 3, 2026 11:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants