DNS

Как Throne разрешает доменные имена, что делает каждая настройка DNS, когда помогает FakeIP и как читать результаты теста на утечку DNS.

Прежде чем приложение сможет открыть сайт, DNS-запрос превращает имя сайта в IP-адрес. На этой странице объясняется, какой DNS-сервер Throne использует для каких запросов, что делают настройки на вкладке DNS и как читать результаты теста на утечку DNS. Настройки по умолчанию подходят большинству пользователей.

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

В ядре Throne есть собственный DNS-резолвер. Он использует три DNS-сервера:

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

Когда запрос приложения доходит до Throne, Throne отвечает на него в таком порядке:

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

Откуда приходят запросы, зависит от режима:

  • Режим TUN. DNS-запросы ваших приложений попадают в туннель и доходят до Throne. Throne добавляет шаг DNS в каждый структурированный профиль маршрутизации (правило Route DNS или dns-hijack в списке делает то же самое), поэтому отвечает на эти запросы так, как описано выше. Raw-профиль маршрутизации получает этот шаг, только если вы пропишете его сами; см. Raw-профили.
  • Режим системного прокси. Приложения, которые используют прокси, отправляют имя сайта в Throne. Для проксируемых соединений имя разрешает прокси-сервер. Для прямых соединений Throne разрешает его через прямой DNS. Приложения также могут разрешать имена сами через системный резолвер. Такие запросы через Throne не проходят.

Настройки

Откройте Настройки (Settings) → Настройки маршрутизации (Routing Settings) → DNS. Изменения применяются после нажатия OK и перезапуска подключения.

Настройка По умолчанию Что делает
Удалённый DNS (Remote DNS) https://8.8.8.8/dns-query Сервер, который используется через прокси. В списке также есть tls://8.8.8.8, tls://1.1.1.1, 8.8.8.8 и 1.1.1.1.
DNS для прямых запросов (Direct DNS) localhost Сервер, который используется без прокси. localhost означает системный резолвер. Оставьте это значение, если оно работает; если нет, выберите сервер, который работает в вашей сети без прокси. В списке есть публичные резолверы Китая (223.5.5.5, 119.29.29.29), Ирана (178.22.122.100) и России (77.88.8.8).
Отключить IPv6 (Disable IPv6) рядом с каждым сервером выкл. Отвечает на запросы IPv6 (AAAA), отправленные этому серверу, пустым результатом.
Назначить локал. DNS (Local Override) пусто DNS-сервер, через который разрешаются имена ваших DNS-серверов. Укажите здесь IP-адрес, если системный резолвер использовать нельзя.
DNS-сервер по умолчанию (Default DNS server) remote Сервер для запросов, которые не обрабатывает никакое другое правило: remote или direct.
Включить DNS-маршрутизацию (Enable DNS Routing) вкл. Отправляет запросы для доменов, которые идут в direct, в прямой DNS.
Учитывать файл Hosts (Respect Hosts File) выкл. Сначала отвечает на запросы A и AAAA из системного файла hosts. Затрагиваются только домены, перечисленные в этом файле.
Предопределенные ответы (Predefined Answers) вкл. Фиксированные ответы в синтаксисе файла hosts. Запись по умолчанию — 127.0.0.1 localhost.
Включить подделку IP (Enable FakeIP) выкл. См. FakeIP.
Отключить подделку IP для IPv6 (FakeIP Disable IPv6) выкл. Не выдаёт поддельные IPv6-адреса; запросы AAAA получают пустой ответ.

Удалённый DNS (Remote DNS), DNS для прямых запросов (Direct DNS) и Назначить локал. DNS (Local Override) принимают такие форматы:

Формат Пример
Обычный DNS 8.8.8.8 или 8.8.8.8:53
DNS поверх TCP tcp://8.8.8.8:53
DNS поверх TLS tls://1.1.1.1
DNS поверх HTTPS https://1.1.1.1/dns-query
DNS поверх HTTP/3 h3://dns.example.com/dns-query
DNS поверх QUIC quic://dns.example.com
Сервер, который выдаёт ваша сеть dhcp://auto
Системный резолвер (для поля DNS для прямых запросов) localhost

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

Кнопка Предопределенные ответы (Predefined Answers) открывает редактор с одной записью в строке:

127.0.0.1 localhost
10.0.0.5 nas.lan files.lan

Домен, у которого в этом списке есть только адрес IPv4, на запросы IPv6 получает ответ «нет такого домена», и наоборот. Так приложения не смогут обойти вашу запись.

FakeIP

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

Это даёт два преимущества:

  • Соединения начинаются быстрее, потому что приложения не ждут настоящего ответа DNS.
  • Ни один DNS-запрос не покидает ваше устройство до того, как для соединения выбран маршрут.

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

Что нужно знать:

  • Ответы из списка Предопределенные ответы (Predefined Answers) и из файла hosts остаются настоящими.
  • Приложения хранят поддельные адреса в собственных кэшах. После остановки Throne приложение, у которого ещё остался поддельный адрес, не сможет подключиться, пока снова не разрешит имя. Если приложение остаётся без сети, перезапустите его.
  • Доп. настройки (Advanced Settings) → Save Cache To File сохраняет поддельные адреса при перезапуске Throne.

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

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

Настройка По умолчанию Что делает
Емкость кэша (Cache Capacity) 65536 Сколько ответов хранит кэш.
Таймаут запроса (Query Timeout) 10s Сколько ждать ответа DNS-сервера.
Оптимистичный кэш (Optimistic Cache) выкл. Продолжает выдавать ответ с истёкшим сроком, пока он обновляется в фоне. Нельзя сочетать с Отключить кэш (Disable Cache) или Отключить Expire (Disable Expire).
Оптимистичный таймаут (Optimistic Timeout) 3d Как долго ещё можно выдавать ответ с истёкшим сроком.
Отключить кэш (Disable Cache) выкл. Отключает кэш DNS.
Отключить Expire (Disable Expire) выкл. Сохраняет ответы в кэше после истечения их срока.
Save Cache To File выкл. Записывает ответы из кэша и адреса FakeIP в файл кэша ядра, чтобы они сохранялись после перезапуска. Каждая новая запись в кэше означает запись на диск.
Reverse Mapping выкл. Запоминает, какому домену принадлежит IP-адрес из ответа, чтобы доменные правила могли срабатывать для соединений с этим адресом.

Длительность задаётся числом, за которым следует ns, us, ms, s, m, h или d, например 5s или 3d.

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

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

Тест на утечку DNS — это сайт, который показывает, какие DNS-серверы разрешали его тестовые имена. Результат зависит от вашего режима и профиля маршрутизации.

Такие результаты ожидаемы:

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

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

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

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

Вкладка Перехват (Hijack) в окне Настройки маршрутизации (Routing Settings) и параметр Windows Системный DNS (System DNS) устарели в версии 1.3.1 и будут удалены в следующем релизе. Перехват запускал локальный DNS-сервер, который отвечал на выбранные домены фиксированными адресами, а Системный DNS (System DNS) направлял Windows на этот сервер. Оба служили для приложений, которые игнорируют системный прокси. Режим TUN (Tun Mode) решает ту же задачу, поэтому выключите их и используйте вместо них Режим TUN (Tun Mode).

Пока перехват включён, Throne при запуске показывает предупреждение. Флажок Системный DNS (System DNS) скрыт, пока не включён параметр Основные настройки (Basic Settings) → Интерфейс (Style) → Отображать режим «Системный DNS» (Show System DNS option).

На Android

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