DNS

Какие DNS-серверы использует Throne, что делают настройки DNS и как читать результаты теста на утечку DNS.

Throne отвечает на DNS-запросы собственным резолвером. Настройки по умолчанию подходят большинству пользователей.

Как DNS работает в Throne

Throne использует три DNS-сервера:

Сервер Для чего используется
Удалённый DNS (Remote DNS) Запросы ваших приложений, через прокси.
DNS для прямых запросов (Direct DNS) Домены, которые ваша маршрутизация направляет в direct, и адрес вашего прокси-сервера. Запросы идут без прокси.
Переопределение локального DNS (Local Override) Разрешает имена двух серверов выше, например dns.google. Пустое значение означает системный резолвер.

Throne отвечает на запрос в таком порядке:

  1. Предопределенные ответы (Predefined Answers) и Учитывать файл hosts (Respect Hosts File).
  2. Если включён Включить FakeIP (Enable FakeIP), — поддельный адрес (см. FakeIP).
  3. Если включён Включить DNS-маршрутизацию (Enable DNS Routing) (по умолчанию включён), домены, которые ваш профиль маршрутизации направляет в direct, отправляются в DNS для прямых запросов. Это касается доменных правил и наборов правил geosite-*, но не IP-правил, наборов правил geoip-* и ваших собственных файлов .srs.
  4. Всё остальное отправляется на DNS-сервер по умолчанию (Default DNS server), по умолчанию remote. Если выбрать для него direct, домены, которые такие правила направляют в proxy, всё равно используют Удалённый DNS.

Что доходит до Throne, зависит от режима:

  • Режим TUN: DNS-запросы всех приложений. Структурированные профили маршрутизации обрабатывают их автоматически; raw-профилю нужно правило hijack-dns. Про macOS см. Режим TUN.
  • Режим системного прокси: только имена сайтов, которые приложения отправляют в прокси; имена проксируемых сайтов разрешает прокси-сервер. Приложения также могут разрешать имена сами, в обход Throne.

Настройки

Откройте Настройки (Settings) → Настройки маршрутизации (Routing Settings) → DNS. Изменения применяются после нажатия OK и перезапуска подключения. Активный профиль маршрутизации может заменить часть этих настроек; см. DNS для профиля маршрутизации. В простом режиме Удалённый DNS (Remote DNS), DNS для прямых запросов (Direct DNS) и DNS-сервер по умолчанию (Default DNS server) находятся в разделе Основные настройки DNS (Simple DNS Settings) на вкладке Основные (Common), а остальное скрыто (см. Простой и расширенный режим).

Настройка По умолчанию Что делает
Удалённый DNS (Remote DNS) https://8.8.8.8/dns-query Сервер, который используется через прокси.
DNS для прямых запросов (Direct DNS) localhost Сервер, который используется без прокси. localhost означает системный резолвер. Если он не работает, выберите сервер, который работает в вашей сети без прокси, например публичный резолвер из списка.
Отключить IPv6 (Disable IPv6) рядом с каждым сервером выкл. Отвечает на запросы IPv6 (AAAA), отправленные этому серверу, пустым результатом.
Переопределение локального DNS (Local Override) пусто Укажите здесь IP-адрес, если через системный резолвер нельзя разрешить имена ваших DNS-серверов.
Учитывать файл hosts (Respect Hosts File) выкл. Сначала отвечает из системного файла hosts.
Предопределенные ответы (Predefined Answers) вкл. Фиксированные ответы в синтаксисе файла hosts, например 10.0.0.5 nas.lan. Имя, у которого указан только адрес IPv4, не получает ответа IPv6, и наоборот.

Адрес сервера может быть обычным DNS (8.8.8.8 или 8.8.8.8:53), tcp://8.8.8.8:53, tls://1.1.1.1, https://1.1.1.1/dns-query, h3://dns.example.com/dns-query, quic://dns.example.com или dhcp://auto — сервер, который выдаёт ваша сеть.

Если запущенный профиль использует Xray, обычный DNS или DNS поверх QUIC в поле Удалённый DNS (Remote DNS) заменяется на DNS поверх HTTPS: 1.1.1.1 превращается в https://1.1.1.1/dns-query, а сервер, который Throne не знает, — в https://8.8.8.8/dns-query.

FakeIP

Если включён Включить FakeIP (Enable FakeIP), Throne сразу отвечает на запросы адресов поддельным адресом из 198.18.0.0/15 (IPv6: 2001:db8::/32). Когда приложение подключается к нему, Throne маршрутизирует соединение по имени домена, а настоящее разрешение имени происходит позже: на прокси-сервере или через DNS для прямых запросов для прямых соединений. Соединения начинаются быстрее, и ни один DNS-запрос не покидает устройство до того, как для соединения выбран маршрут.

FakeIP влияет только на запросы, которые доходят до Throne, поэтому он помогает в режиме TUN, а не в режиме системного прокси.

  • Приложения хранят поддельные адреса в собственных кэшах. Если после остановки Throne приложение остаётся без сети, перезапустите его.
  • FakeIP: отключить IPv6 (FakeIP Disable IPv6) не выдаёт поддельные IPv6-адреса; запросы AAAA получают пустой ответ.
  • Доп. настройки (Advanced Settings) → Сохранять кэш в файл (Save Cache To File) сохраняет поддельные адреса при перезапуске Throne.

Дополнительные настройки

Доп. настройки (Advanced Settings) на вкладке DNS управляют кэшем DNS. Неочевидные параметры:

  • Оптимистичный кэш (Optimistic Cache) продолжает выдавать ответ с истёкшим сроком, пока он обновляется в фоне, но не дольше Оптимистичный таймаут (Optimistic Timeout) (по умолчанию 3d). Его нельзя сочетать с Отключить кэш (Disable Cache) или Отключить Expire (Disable Expire).
  • Сохранять кэш в файл (Save Cache To File) сохраняет ответы из кэша и адреса FakeIP после перезапуска; каждая новая запись означает запись на диск.
  • Обратное сопоставление (Reverse Mapping) (Reverse Mapping) запоминает, для какого домена был выдан IP-адрес, чтобы доменные правила срабатывали для соединений с этим адресом.

Использовать свой объект DNS (Use Custom DNS Object) заменяет всё на этой вкладке полным объектом dns sing-box, который вы пишете через Редактировать объект DNS (Edit DNS Object) (см. документацию sing-box по DNS). DNS-маршрутизация, FakeIP и предопределённые ответы тогда работают, только если ваш объект их настраивает.

DNS для профиля маршрутизации

У профиля маршрутизации могут быть собственные DNS-серверы, которые заменяют глобальные, пока он — активный профиль маршрутизации. Например, прямой DNS, который работает в стране этого профиля.

  1. Откройте профиль: Настройки (Settings) → Настройки маршрутизации (Routing Settings) → Маршрутизация (Route) → Редактировать (Edit), или щёлкните его правой кнопкой мыши внизу меню Маршрутизация (Routing).
  2. На его вкладке DNS выберите Use custom DNS settings, измените настройки и нажмите OK.

На вкладке, с английскими подписями, есть оба сервера и их флажки Disable IPv6, Default DNS server, Enable DNS Routing и настройки FakeIP. Остальное берётся с глобальной вкладки DNS, а Использовать свой объект DNS (Use Custom DNS Object) игнорируется, пока такой профиль активен.

  • Собственный профиль маршрутизации группы применяет свои настройки DNS, пока работает профиль этой группы.
  • Удалённые профили и профили маршрутизации из подписки сохраняют свои настройки DNS при обновлении. Throne никогда не берёт настройки DNS из URL или подписки.
  • Ссылка throne://route/ переносит настройки DNS, а Импорт (Import) в Настройки маршрутизации (Routing Settings) перед импортом называет серверы. Проверьте их: эти серверы видят все имена, которые вы запрашиваете, пока профиль активен.
  • В простом режиме вкладка DNS профиля появляется, только если профиль уже использует собственные настройки DNS.

DNS-сервер для других устройств

Пока работает профиль, Throne также запускает DNS-сервер, который отвечает согласно настройкам на этой странице. Он слушает 127.0.0.1, порт TCP и UDP 5533, который задаётся в Настройки (Settings) → Основные настройки (Basic Settings) → Прочее (Miscellaneous) → Sing-box → Порт DNS-сервера (DNS Server Port) (только в расширенном режиме, см. Простой и расширенный режим).

Чтобы им могли пользоваться другие устройства в вашей сети, например роутер:

  1. Отметьте Разрешить подключаться другим устройствам (Allow other devices to connect) под Порт DNS-сервера, нажмите OK и перезапустите запущенный профиль.
  2. Разрешите в брандмауэре входящие TCP- и UDP-подключения к этому порту, как для общего доступа к прокси. В Linux с ufw: sudo ufw allow 5533.
  3. На другом устройстве укажите в качестве DNS-сервера адрес вашего компьютера в локальной сети и порт, например 192.168.1.20 и 5533.
  • Телефоны и компьютеры обычно принимают для DNS только порт 53; во многих роутерах порт можно указать.
  • Любой, кто может достучаться до порта, может разрешать имена через ваш прокси. Используйте это только в сети, которой вы доверяете.
  • При включённом FakeIP другие устройства тоже получают поддельные адреса, которые работают только для соединений через Throne.
  • Программа (Program) → Разрешить подключаться другим устройствам (Allow other devices to connect) — другой параметр: он открывает доступ к прокси-порту.
  • В thronectl и в headless Throne эти параметры называются dns_in_lan и dns_in_port.

Тесты на утечку DNS

Тест на утечку DNS показывает, какие DNS-серверы разрешали его тестовые имена. Такие результаты ожидаемы:

  • Провайдер вашего удалённого DNS (Google по умолчанию) или серверы активного профиля маршрутизации, если у него есть собственные.
  • Ваш интернет-провайдер — для сайтов, которые идут напрямую. Их имена разрешаются через DNS для прямых запросов, по умолчанию это системный резолвер. В режиме системного прокси или с FakeIP это касается и сайтов, которые идут напрямую только из-за outbound по умолчанию, как в профилях «Proxy … Blocked». Прямой трафик провайдер видит в любом случае.
  • Ваш интернет-провайдер — в режиме системного прокси. Приложения могут разрешать имена сами, в обход Throne. Если это для вас важно, используйте режим TUN.
  • Собственный DNS-провайдер браузера, если браузер использует безопасный DNS (DNS поверх HTTPS).
  • Ваш интернет-провайдер для большинства имён, если DNS-сервер по умолчанию (Default DNS server) — direct.

Настоящая утечка выглядит так: в режиме TUN с профилем маршрутизации, который направляет тестовый сайт через прокси (например, Default), тест всё равно показывает вашего интернет-провайдера. В Windows проверьте, что Настройки (Settings) → Настройки режима TUN (Tun Settings) → Строгая маршрутизация (Strict Route) включена (по умолчанию в Windows 10 и новее), и см. Защита от утечек DNS в Windows.

Тесты WebRTC проверяют ваш IP-адрес, а не DNS. Если публичный IP-адрес не показан, всё в порядке (#1267). Если для сайта, который вы проксируете, показан ваш настоящий IP-адрес, значит, UDP прошёл в обход прокси. Это часто бывает в режиме системного прокси; используйте режим TUN.

Перехват и системный DNS (удалены)

Throne 1.4.0 удалил вкладку Перехват (Hijack) в Настройки маршрутизации (Routing Settings) и параметр Windows Системный DNS (System DNS). Для приложений, которые игнорируют системный прокси, используйте вместо них режим TUN.

На Android

В Throne для Android те же настройки находятся в Настройки (Settings) → DNS, где FakeIP называется Включить FakeDNS (Enable FakeDNS). В режиме VPN Throne всегда сам обрабатывает DNS-запросы внутри VPN. Отличия:

  • localhost как прямой DNS напрямую обращается к DNS-серверам текущей сети Wi-Fi или мобильной сети. Если они не отвечают, подключение не удаётся: «Не удалось подключиться: DNS сети (…) не ответил. Настройте рабочий прямой DNS.» (Could not connect: the network's DNS (…) did not answer. Set a working Direct DNS.)
  • DNS для профиля маршрутизации — это карточка DNS в редакторе профиля маршрутизации. Пока активный профиль маршрутизации использует собственные серверы, экран Настройки (Settings) → DNS сообщает об этом вверху, и его настройки действуют только для других профилей маршрутизации.
  • Локальный DNS-сервер для других приложений работает на 127.0.0.1. Его порт — Настройки (Settings) → Входящие (Inbound) → Порт DNS-сервера (DNS server port) (по умолчанию 5533).