DNS-туннели

Как подключиться к серверу через DNS-запросы в сетях, где проходит только DNS: профили DNSTT, VayDNS, MasterDNS и Xray XDNS, их резолверы и поиск работающих резолверов.

Начиная с 1.4.0, Throne может передавать ваш трафик внутри DNS-запросов. DNS-туннель работает в сетях, где заблокировано всё, кроме DNS. Он намного медленнее обычного профиля, а первое подключение занимает время. Используйте его, только когда другие профили не подключаются.

Как работает DNS-туннель

Throne не подключается к серверу туннеля. Он отправляет DNS-запросы имён внутри домена туннеля, например t.example.com, резолверам: DNS-серверам вашей сети или публичным, например 8.8.8.8. Домен делегирован серверу туннеля, поэтому резолверы передают запросы ему. Сервер возвращает свои данные в DNS-ответах.

Это означает:

  • У профиля DNS-туннеля нет адреса и порта сервера. Ему нужны домен туннеля, ключ сервера и резолверы, которые передают запросы дальше.
  • Скорость зависит в основном от резолверов. Многие резолверы ограничивают размер или число запросов либо отбрасывают необычные запросы. Раздел Поиск работающих резолверов помогает выбрать хорошие.
  • Серверу нужен домен, поддомен которого делегирован ему, и серверная программа, подходящая к типу профиля.

Throne поддерживает три вида DNS-туннелей:

Вид Тип (Type) в Новый профиль (New profile) Сервер Ядро
DNSTT и VayDNS DNSTT / VayDNS dnstt-server или vaydns-server sing-box
MasterDNS MasterDNS MasterDnsVPN или StormDNS sing-box
XDNS VLESS (Xray) с сетью kcp и маской xdns Xray с mKCP и xdns Xray

Чтобы создать профиль вручную, откройте Программа (Program) → Новый профиль (New profile) (Ctrl+N) и выберите тип. Также можно импортировать ссылки и конфигурации, см. Импорт и обмен. DNS-туннели доступны только на компьютере, см. Android.

DNSTT и VayDNS

Профили DNSTT / VayDNS работают с серверами dnstt и VayDNS. Режим (Mode) выбирает протокол:

Режим Сервер
DNSTT (по умолчанию) dnstt-server или vaydns-server -dnstt-compat
VayDNS vaydns-server
VayDNS (совместимый с dnstt) (VayDNS (dnstt-compatible)) Те же серверы, что и для DNSTT. Клиент работает как vaydns-client -dnstt-compat и предлагает Макс. длина QNAME (Max QNAME Length).

Настройки туннеля:

Поле По умолчанию Что делает
Домен (Domain) обязательно Домен туннеля, делегированный серверу, например t.example.com.
Public Key обязательно Открытый ключ сервера: 64 шестнадцатеричные цифры, как его выводит сервер.
Тип записи (Record Type) По умолчанию (Default) (TXT) Только VayDNS. Тип DNS-записи, в которой сервер передаёт данные: TXT, NULL, CNAME, A, AAAA, MX, NS, SRV или CAA. Укажите тип, который использует сервер. Остальные режимы всегда используют TXT.
Размер ID клиента (Client ID Size) 2 Только VayDNS. Размер ID клиента в байтах. Должен совпадать с -clientid-size сервера.
Макс. длина QNAME (Max QNAME Length) 101 (VayDNS), 253 (VayDNS (совместимый с dnstt)) Оба режима VayDNS. Наибольшая длина имени в запросе, не больше 253. Длинные имена несут больше данных, но некоторые резолверы их отбрасывают.
Полезная нагрузка на запрос (Payload per Query) Показывает, сколько байт данных туннеля несёт каждый запрос. Чем длиннее домен, тем меньше места остаётся. Туннелю нужно не меньше 25 байт; если меньше, редактор показывает ошибку. Используйте более короткий домен или большее значение Макс. длина QNAME.

В группе Резолверы (Resolvers) находятся резолверы, см. Резолверы, и Стратегия (Strategy), см. Как выбираются резолверы. Повторять усеченные ответы через TCP (Retry truncated replies over TCP) повторяет запрос к каждому UDP-резолверу через TCP, если ответ пришёл обрезанным.

Группа Дополнительно (Advanced) (только в расширенном режиме, см. Простой и расширенный режим):

Поле По умолчанию Что делает
Idle Timeout 2m, 10s с VayDNS Сессия закрывается, если за это время ничего не пришло. Согласуйте значение с сервером.
Keepalive Interval 10s, 2s с VayDNS Как часто клиент отправляет keepalive. Должно быть меньше Idle Timeout.
Запросов в секунду (Queries per Second) пусто, без ограничения Наибольшее число запросов туннеля в секунду.

Бэкенд

Группа Бэкенд (Backend) указывает, что работает за туннелем на сервере. Выберите Тип (Type), который использует сервер:

Тип Что делает
Нет (только для цепочки) (None (chain only)) (по умолчанию) Сервер передаёт туннель дальше, другому прокси-серверу. Редактор предупреждает, что туннель может использовать только профиль, построенный в цепочке поверх этого. Создайте цепочку: профиль DNS-туннеля сверху, а под ним профиль прокси-сервера за туннелем.
SOCKS5 SOCKS5-прокси за туннелем. Заполните Имя пользователя (Username) и Пароль (Password), если они нужны. Отметьте UDP over TCP, чтобы передавать UDP.
Shadowsocks Сервер Shadowsocks за туннелем: Шифрование (Encryption) и Пароль (Password). Отметьте UDP over TCP, чтобы передавать UDP.
SSH SSH-сервер за туннелем: Пользователь (User), а также Пароль (Password) или Private Key (либо Путь к Private Key (Private Key Path) с кнопкой Выбрать файл (Choose File)), Пароль к Private Key (Private Key Password). Host Keys, Host Key Algorithms и Версия клиента (Client Version) работают так же, как в профиле SSH.

MasterDNS

Профили MasterDNS работают с серверами MasterDnsVPN и StormDNS. Они передают только TCP. Настройки должны совпадать с конфигурацией сервера:

Поле По умолчанию Что делает
Домены (Domains) обязательно Домены туннеля сервера (его параметр DOMAIN), по одному в строке. Все они должны вести к одному серверу. Throne распределяет запросы по всем парам домена и резолвера.
Режим (Mode) SOCKS5 Должен совпадать с PROTOCOL_TYPE сервера. SOCKS5: сервер сам подключается к сайту. TCP / пользовательская цепочка (TCP / custom chain): сервер отправляет каждое подключение на свою цель пересылки, поэтому поставьте профиль этой цели в цепочке под этим профилем, как с Нет (только для цепочки) выше.
Шифрование (Encryption) xor Должно совпадать с DATA_ENCRYPTION_METHOD сервера: none (0), xor (1), chacha20 (2), aes-128-gcm (3), aes-192-gcm (4) или aes-256-gcm (5).
Ключ (Key) обязательно, кроме none Ключ сервера, текст из его ENCRYPTION_KEY_FILE.

Группа Передача (Transfer):

Поле По умолчанию Что делает
Дублирование (Duplication) 3 Сколько копий каждого пакета отправляет Throne, каждую через другую пару резолвера и домена, не больше 10. Сервер может уменьшить это значение.
Дублирование при подключении (Setup Duplication) 4 Число копий пакетов, открывающих подключение, от Дублирование до 12.
Сжатие отправки (Upload Compression), Сжатие приема (Download Compression) По умолчанию (выкл.) Выкл. (Off), zstd, lz4 или zlib. Сервер может отказаться от сжатия.
Ответы в Base64 (Base64-encoded replies) выкл. Просит сервер отвечать в Base64, для резолверов, которые портят двоичные TXT-записи. Ответы в Base64 несут на четверть меньше данных.

Перед началом сессии Throne проверяет каждую пару домена и резолвера, чтобы узнать, сколько данных может нести один запрос (отправка) и один ответ (приём). Сессия использует наименьшие значения среди прошедших проверку резолверов. Группа MTU задаёт пределы этой проверки:

Поле По умолчанию Что делает
Мин. отправка (Min Upload), Мин. прием (Min Download) 38, 200 Резолверы с размерами меньше этих значений (в байтах) не используются.
Макс. отправка (Max Upload), Макс. прием (Max Download) 150, 4000 Наибольшие размеры в байтах, которые пробует Throne. Сервер тоже может их ограничить.

В группе Дополнительно (Advanced) (только в расширенном режиме) находятся Повторы проверки MTU (MTU Test Retries) (по умолчанию 2 попытки на каждый размер), Таймаут проверки MTU (MTU Test Timeout) (по умолчанию 2s на каждую попытку), Параллельность проверки MTU (MTU Test Parallelism) (по умолчанию 32 резолвера одновременно) и Отбрасывать резолверы с MTU ниже минимального (Drop resolvers below the minimum MTU) (по умолчанию включено). Если этот параметр включён и проверку проходят хотя бы 5 резолверов, Throne не использует те немногие резолверы, чьи малые размеры замедлили бы всю сессию.

Сессия начинается с первым подключением, после этих проверок. Если ни один резолвер не прошёл проверку, Throne повторяет её каждые 5 секунд. Не прошедшие проверку резолверы проверяются повторно в фоне.

XDNS

Начиная с 1.4.0, профили VLESS (Xray) могут использовать транспорт mKCP, который передаёт соединение по UDP. XDNS — это mKCP с маской xdns в Finalmask: Xray отправляет пакеты mKCP как DNS-запросы через резолверы. На сервере должен работать Xray с входящим mKCP и маской xdns для того же домена.

Проще всего получить профиль XDNS импортом: ссылкой vless:// с type=kcp и finalmask в fm, JSON-конфигурацией Xray от сервера или ссылкой Throne. Ссылки vless:// с type=kcp всегда становятся профилями VLESS (Xray), независимо от выбора ядра для ссылок VLESS.

Чтобы настроить XDNS вручную:

  1. Откройте Программа (Program) → Новый профиль (New profile), выберите Тип (Type) VLESS (Xray) и введите настройки VLESS, которые даёт сервер.

  2. Выберите Сеть (Network) kcp. Появятся поля mKCP.

  3. Нажмите кнопку Finalmask и добавьте в список udp маску xdns с доменом туннеля и, при желании, резолверами:

    {
      "udp": [
        {
          "type": "xdns",
          "settings": {
            "domains": [{ "names": ["t.example.com"] }],
            "resolvers": [{ "addrs": ["udp://8.8.8.8:53"] }]
          }
        }
      ]
    }
    
  4. Под MTU и TTI появится строка Резолверы (Resolvers). Резолверы, введённые там, заменяют резолверы из маски, см. Резолверы.

  5. Нажмите OK.

Редактор проверяет маску. Маска xdns должна быть последней в udp, и в ней должен быть хотя бы один домен. Если резолверов нет ни в маске, ни в строке Резолверы, редактор предупреждает, что Xray не сможет подключиться. Резолверу DNS-over-HTTPS (https://…) в маске нужен tlsConfig с serverName, например "tlsConfig": {"serverName": "dns.google"}.

Поля mKCP. Оставьте поле пустым, чтобы использовать значение Xray по умолчанию:

Поле По умолчанию Что делает
MTU 1350 Наибольший пакет, который отправляет mKCP, в байтах, от 21 до 8192.
TTI 50 Как часто mKCP отправляет данные, в миллисекундах, от 10 до 1000.
Исходящая полоса (Uplink Capacity) 5 Наибольший объём отправляемых данных в секунду, в МБ/с.
Входящая полоса (Downlink Capacity) 20 Наибольший объём получаемых данных в секунду, в МБ/с.
Множитель CWND (CWND Multiplier) 1 Умножает число пакетов, которые могут быть в пути одновременно.
Макс. окно отправки (Max Sending Window) 2097152 Наибольший объём данных, ожидающих отправки или подтверждения, в байтах. Не меньше MTU.

Последние четыре поля находятся в группе Настройка (Tuning) (только в расширенном режиме). В простом режиме кнопка Finalmask видна только для kcp.

Что ещё нужно знать:

  • Если Мультиплексирование (Multiplex) установлено в По умолчанию (Keep Default), Throne включает mux для профилей XDNS, даже когда Вкл. мультиплексирование по умолчанию (Default Mux On) выключено. Без mux каждое подключение было бы отдельной сессией mKCP со своими сокетами ко всем резолверам.
  • Старые ссылки и конфигурации mKCP задают тип заголовка (headerType) или seed. В новых версиях Xray этих настроек больше нет, поэтому при импорте Throne превращает их в маски mkcp-legacy в Finalmask. Он также обновляет старые форматы маски xdns.
  • Если включено Отображать безопасность конфигураций (Show Config Security), в столбце Тип для таких профилей отображается XDNS.

mKCP работает и без маски xdns, как обычный UDP-транспорт до сервера Xray.

Резолверы

У каждого профиля DNS-туннеля есть настройки резолверов: группа Резолверы (Resolvers) у DNSTT и MasterDNS, строка Резолверы у XDNS. Они состоят из трёх частей:

  • Текстовое поле, по одному резолверу в строке. Строки, начинающиеся с #, — комментарии.
  • Список IP (IP list): IP-список IP-сканера, например результаты сканирования резолверов. Его адреса используются после строк из текстового поля. Для записи без порта используется порт 53.
  • Найти резолверы… (Find resolvers…), см. Поиск работающих резолверов.

Что может содержать строка:

Строка DNSTT / VayDNS MasterDNS XDNS
system: DNS-серверы вашей системы Да Да Нет
IP-адрес, при необходимости с портом: 8.8.8.8, 1.1.1.1:53, [2001:db8::1]:53 Да Да Да
Диапазон: 192.0.2.0/24 До 256 адресов (/24 или длиннее, /120 для IPv6) До 65536 адресов (/16 или длиннее, /112 для IPv6) Только из IP-списка, до 256 адресов
udp:// или tcp:// и адрес Да Нет Да
tls:// (DNS over TLS) Да Нет Нет
https:// (DNS over HTTPS), при необходимости с путём Да Нет Да

Порт по умолчанию — 53, а для DNSTT — 853 для tls:// и 443 для https://. Резолверы DNSTT tls:// и https:// используют Default Fingerprint uTLS, см. Отпечаток uTLS. Throne использует каждый резолвер один раз, и не больше 4096 резолверов для DNSTT и 256 для XDNS.

Если ни текстовое поле, ни IP-список не добавляют резолверов:

  • DNSTT и MasterDNS используют system. Throne заново читает DNS-серверы системы при смене сети и пропускает серверы из диапазона адресов TUN-адаптера.
  • XDNS оставляет резолверы из маски xdns. Как только вы вводите резолверы, они заменяют резолверы маски.

Throne читает IP-список при каждом запуске профиля, поэтому следующий запуск использует самые новые записи. Если IP-список удалён, профиль не получает из него резолверов: редактор показывает «Этот список IP больше не существует, поэтому резолверы из него не добавляются.» (This IP list no longer exists, so it adds no resolvers.), и об этом же сообщает лог при запуске профиля.

Как выбираются резолверы

DNSTT и VayDNS: Стратегия (Strategy) в группе Резолверы.

Стратегия Куда идут запросы
По умолчанию (Default), round_robin К каждому резолверу по очереди.
failover К первому работающему резолверу.
fanout Ко всем работающим резолверам одновременно.

Резолвер, оставивший 8 запросов без ответа в течение 2 секунд, пропускается на 1 секунду. Каждый раз, когда это повторяется, пауза удваивается, до 30 секунд. После сбоя сессия запускается заново, с паузами от 1 до 30 секунд между попытками.

MasterDNS: Стратегия (Strategy) в группе Резолверы.

Стратегия Куда идут запросы
По умолчанию (Default), least_loss К резолверу с наименьшими потерями.
round_robin К каждому резолверу по очереди.
random К случайному резолверу.
lowest_latency К резолверу с наименьшей задержкой.
hybrid К резолверу с лучшей оценкой по потерям и задержке.
loss_then_latency К резолверу с наименьшей задержкой среди резолверов с наименьшими потерями.
least_loss_top_random К случайному резолверу среди лучших 10% по потерям.
least_loss_top_round_robin К каждому резолверу среди лучших 10% по потерям, по очереди.

Подключение, пакеты которого постоянно отправляются повторно, переходит на другой резолвер, не чаще раза в 2,5 секунды. Резолверы, которые постоянно не отвечают вовремя, не используются, пока снова не пройдут проверку.

XDNS: Xray распределяет запросы по всем резолверам по очереди.

Поиск работающих резолверов

Многие резолверы не передают запросы туннеля дальше или передают их медленно. Сканирование резолверов пробует адреса как резолверы вашего профиля и оставляет работающие:

  1. Сохраните профиль. Кнопка Найти резолверы… (Find resolvers…) недоступна, пока вы этого не сделаете, потому что сканирование проверяет сохранённый профиль.
  2. Снова откройте профиль и нажмите Найти резолверы… рядом с Список IP (IP list). Throne откроет в IP-сканере сканирование DNS-резолверов этого профиля или создаст новое с именем «Резолверы для …» (Resolvers for …), где … — имя профиля.
  3. На вкладке Цели (Targets) выберите в Исходный список IP (Base IP list) адреса для проверки, например стандартный список Iran DNS resolvers или Russia DNS resolvers, и запустите сканирование. Оно пробует каждый адрес как единственный резолвер профиля.
  4. На вкладке Результаты (Results) нажмите Использовать как резолверы (Use as resolvers). Список результатов сканирования становится Список IP профиля. Введённые вами строки остаются и используются первыми.

Если редактор профиля открыт, список получает редактор. Нажмите там OK, чтобы сохранить его.

О проверках и столбцах результатов см. Сканирование DNS-резолверов.

Импорт и обмен

Throne импортирует эти форматы из буфера обмена, файлов, QR-кодов и подписок:

Формат Результат
Ссылки dnst:// Профиль DNSTT / VayDNS или профиль MasterDNS, если тип туннеля в ссылке — masterdns.
Ссылки slipnet:// версий SlipNet с 16 по 28 Профиль DNSTT / VayDNS. Профили NoizDNS становятся обычными DNSTT: их сервер принимает такие подключения, но без обхода DPI, который даёт NoizDNS.
Ссылки masterdns:// и stormdns:// Профиль MasterDNS. Throne читает форму v1/… с конфигурацией клиента, форму v1?domains=… и формат профилей WhiteDNS и Hidden-Node.
JSON sing-box с outbound dnstt или masterdns Профили DNSTT / VayDNS и MasterDNS.
Ссылки vless:// с type=kcp и JSON Xray с сетью kcp Профили VLESS (Xray). С маской xdns в finalmask это профили XDNS.
Ссылки Throne (throne://add/…) Любые из них, со всеми настройками.

Что нужно знать об импорте:

  • Ссылка dnst:// указывает службу за туннелем: socks, ssh, shadowsocks или custom для Нет (только для цепочки). MasterDNS принимает только socks (SOCKS5) и custom (TCP / пользовательская цепочка).
  • Зашифрованные ссылки SlipNet (slipnet-enc://, slipnet-bundle-enc://) прочитать нельзя. Экспортируйте профиль из SlipNet без шифрования.
  • Если ссылка также содержит прокси для работы поверх туннеля, Throne предупреждает об этом. Импортируйте этот прокси отдельно и поставьте его в цепочке под профилем DNS-туннеля.
  • IP-список, указанный в ссылке Throne, принадлежит другой установке, поэтому Throne его не переносит.

Чтобы поделиться профилем, щёлкните по нему правой кнопкой мыши → Поделиться (Share). Профили DNSTT и MasterDNS дают ссылку dnst://, профили XDNS — ссылку vless://. Эти ссылки не содержат ваших резолверов и IP-списка, а для MasterDNS — только первый домен. Ссылка Throne сохраняет все настройки, кроме IP-списка. См. Ссылки для обмена.

Тестирование

Тесты задержки и тесты IP работают с профилями DNS-туннелей. Туннель открывает сессию при первом запросе, а для этого нужно много медленных запросов. Поэтому Throne даёт первому запросу на 30 секунд больше для профилей DNSTT и XDNS и на 90 секунд больше для профилей MasterDNS. Цепочка с несколькими туннелями получает сумму. Показанная задержка берётся из второго запроса, через уже открытую сессию. См. Тест задержки.

Если тест не проходит:

  • Посмотрите причину на вкладке Логи (Logs).
  • Сверьте с сервером Домен и Public Key (DNSTT) или Домены, Шифрование и Ключ (MasterDNS).
  • Попробуйте другие резолверы или запустите сканирование резолверов.

Android

В Throne для Android нет типов профилей DNSTT / VayDNS и MasterDNS, а у его профилей VLESS (Xray) нет сети kcp. DNS-туннели и их ссылки работают только на компьютере.