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 отвечает на него в таком порядке:
- Первыми отвечают
Предопределенные ответы(Predefined Answers) иУчитывать файл Hosts(Respect Hosts File). - Если включён параметр
Включить подделку IP(Enable FakeIP), запросы адресов получают поддельный адрес (см. FakeIP). - Если включён параметр
Включить DNS-маршрутизацию(Enable DNS Routing), а по умолчанию он включён, домены, которые ваш профиль маршрутизации направляет вdirect, отправляются в прямой DNS. Это касается правилdomain:,suffix:,keyword:иregex:и встроенных наборов правилgeosite-*. Это не касается наборов правилgeoip-*, IP-правил и ваших собственных файлов.srs. - Всё остальное отправляется на
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.