Глубокие ссылки

Добавляйте подписки, профили маршрутизации и профили прокси одним щелчком по ссылкам throne:// на компьютере и Android.

Глубокая ссылка — это URL вида throne://, который поручает Throne добавить подписку, профиль маршрутизации, удалённые профили маршрутизации или один профиль прокси. Провайдеры размещают глубокие ссылки на сайтах и в QR-кодах.

Как Throne получает глубокую ссылку

Щелчок по ссылке работает, только если throne:// зарегистрирован для Throne. Установщик для Windows, пакеты .deb и .rpm и установочный скрипт для Linux, а также Throne.app в macOS регистрируют его для вашей учётной записи. Копия из ZIP-архива в Windows или Linux этого не делает: откройте Настройки (Settings) → Основные настройки (Basic Settings) → Общие (Common), отметьте Регистрировать обработчик ссылок throne:// при запуске (Register throne:// links at startup) (только в расширенном режиме, см. Простой и расширенный режим) и нажмите OK. Если у вас несколько копий, ссылки открываются в той, которая последней запускалась с включённым параметром; Установить (Install) рядом с ним регистрирует текущую копию.

Без регистрации скопируйте ссылку и нажмите Ctrl+V в главном окне или перетащите текст ссылки в окно. Throne также принимает ссылку как аргумент командной строки.

Headless Throne не обрабатывает ссылки throne://. Добавляйте подписки с помощью thronectl sub add, а ссылки add импортируйте с помощью thronectl import, см. Throne API и thronectl.

Формат ссылки

throne://<command>/<payload>
  • Пишите throne:// строчными буквами. Команда не зависит от регистра.
  • Косая черта после команды обязательна.
  • Throne игнорирует всё, что стоит в ссылке после ? или #, поэтому всё помещается в полезную нагрузку.
  • Если полезная нагрузка закодирована процентами (например, %2B вместо +), Throne сначала декодирует её.
Команда Что делает Запрашивает подтверждение?
addsub Добавляет группу подписки и обновляет её Да
route Импортирует профиль маршрутизации, переданный внутри ссылки Да
remoteroute Добавляет удалённые профили маршрутизации по URL Да
add Добавляет один профиль прокси в текущую группу Нет. На Android — да, если нажать на ссылку в другом приложении.

Правила Base64

Команда Допустимая нагрузка
addsub, remoteroute Только стандартный Base64 (+ и /), с дополнением = или без него. URL-безопасный Base64 с - или _ не сработает.
route, add URL-безопасный (- и _) или стандартный Base64, с дополнением или без него. Сам Throne создаёт URL-безопасный Base64 без дополнения.

Записывайте нагрузку в одну строку, без пробелов. Чтобы закодировать её в Linux или в Git Bash (в macOS уберите -w 0):

printf '%s' 'https://example.com/sub/abc123#MyProvider' | base64 -w 0

В PowerShell:

[Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes('https://example.com/sub/abc123#MyProvider'))

Обе команды выводят стандартный Base64 с дополнением.

addsub: добавление подписки

throne://addsub/<base64>

Полезная нагрузка — Base64 строки <subscription_url>#<group_name>. URL оставьте без изменений, кодировать его процентами не нужно. Часть #<group_name> необязательна (по умолчанию — хост URL), обычный пробел в ней работает. Например, из https://example.com/sub/abc123#MyProvider получается:

throne://addsub/aHR0cHM6Ly9leGFtcGxlLmNvbS9zdWIvYWJjMTIzI015UHJvdmlkZXI=

Throne сначала спрашивает подтверждение с отмеченным флажком Автообновление (Auto update), затем создаёт группу и обновляет её.

route: импорт профиля маршрутизации

throne://route/<base64>

Несёт целый профиль маршрутизации. Чтобы создать такую ссылку, выберите профиль на вкладке Маршрутизация (Route) в Настройки маршрутизации (Routing Settings) и нажмите Экспорт (Export) (Ctrl+C). Импортированный профиль не становится активным, пока вы не выберете его в меню Маршрутизация (Routing).

Полезная нагрузка — Base64 JSON-объекта:

{
  "kind": "throne-route-profile",
  "v": 1,
  "name": "Example",
  "default_outbound": "proxy",
  "rules": []
}
throne://route/eyJraW5kIjoidGhyb25lLXJvdXRlLXByb2ZpbGUiLCJ2IjoxLCJuYW1lIjoiRXhhbXBsZSIsImRlZmF1bHRfb3V0Ym91bmQiOiJwcm94eSIsInJ1bGVzIjpbXX0
  • default_outbound принимает значения proxy, direct, block или warp-bypass.
  • Raw-профиль содержит "raw": true и объект route вместо rules.
  • Необязательный объект dns несёт собственные настройки DNS профиля: remote_dns, remote_dns_disable_ipv6, direct_dns, direct_dns_disable_ipv6, dns_final_out, enable_dns_routing, fake_dns и fakeip_disable_ipv6 (см. DNS для профиля маршрутизации). Правило может содержать "disabled": true.
  • Правила указывают сохранённые серверы, на которые отправляют трафик, по имени. Throne сообщает об именах, которые не удалось найти.

Импорт (Import) (Ctrl+V) на вкладке Маршрутизация также принимает одну полезную нагрузку Base64 или простой JSON. См. Обмен профилями.

remoteroute: добавление удалённых профилей маршрутизации

throne://remoteroute/<base64>

Несёт только URL: Throne скачивает каждый профиль маршрутизации и может поддерживать его в актуальном состоянии. Используйте её, чтобы распространять профиль маршрутизации, который вы сопровождаете. Полезная нагрузка — Base64 простого списка, а не JSON, по одному URL на строку:

<profile_url_1>#<name_1>
<profile_url_2>#<name_2>
  • Строки, которые не начинаются с http:// или https://, пропускаются. #<name> необязательно (по умолчанию — хост URL).
  • Каждый URL должен отдавать структурированный профиль маршрутизации: ссылку throne://route/, её полезную нагрузку в Base64 или её JSON. Raw-профили не могут быть удалёнными.

Например, эта команда:

printf '%s\n%s' 'https://example.com/routes/bypass-iran.json#BypassIran' 'https://example.com/routes/ads.json' | base64 -w 0

даёт такую ссылку:

throne://remoteroute/aHR0cHM6Ly9leGFtcGxlLmNvbS9yb3V0ZXMvYnlwYXNzLWlyYW4uanNvbiNCeXBhc3NJcmFuCmh0dHBzOi8vZXhhbXBsZS5jb20vcm91dGVzL2Fkcy5qc29u

Throne сначала спрашивает подтверждение с одним отмеченным флажком Автообновление для всех профилей, затем скачивает их.

  • Обновление заменяет правила профиля и его outbound по умолчанию, но не имя.
  • Для обновлений по расписанию также нужен флажок Основные настройки → Подписка → Автообновление профилей маршрутизации (Routing profiles auto update) → Включить (только в расширенном режиме), который по умолчанию снят. См. Удалённые профили.
  • URL на raw.githubusercontent.com скачиваются через Зеркало наборов правил (Remote Rule-set Mirror), которое после изменения файла ещё некоторое время может отдавать старую копию.

add: добавление одного профиля прокси

throne://add/<base64>

Полезная нагрузка — Base64 настроек outbound профиля в формате JSON. На компьютере профиль сразу добавляется в текущую группу, как вставленная ссылка vless://. Ссылки add также работают везде, где работают ссылки для обмена: в подписках, в файлах и в QR-кодах.

Чтобы создать такую ссылку, щёлкните профили правой кнопкой мыши → Поделиться (Share) → Копировать ссылки выбранных (deep links) (Copy links of selected (Deep Links)) (Ctrl+Alt+C, только в расширенном режиме) или откройте Поделиться → QR-код и ссылка (QR Code and link) с отмеченным флажком Deep Link. Глубокая ссылка несёт полную конфигурацию профиля, включая дополнительные параметры подключения, например привязку к интерфейсу (bind interface). Копировать ссылки выбранных (Copy links of selected) (Ctrl+C) даёт глубокую ссылку только для профилей, у которых нет стандартной ссылки для обмена.

На Android

Throne для Android обрабатывает те же четыре команды и создаёт ссылки add и route. Он также принимает ссылки clash://install-config?url=…&name=…, которые добавляют подписку так же, как addsub; значение url нужно кодировать процентами. Схема throne:// регистрируется при установке приложения.

Нажмите на ссылку в другом приложении или используйте Добавить профиль (Add profile) → Импорт из буфера обмена (Import from clipboard) или Отсканировать QR-код (Scan QR code) на экране Конфигурация (Profiles). QR-коды работают для всех четырёх команд, а ссылки route и remoteroute — также через Импорт (Import) на экране Маршруты (Routing). Отличия:

  • Ссылка add, открытая нажатием в другом приложении, сначала спрашивает подтверждение. Из буфера обмена или QR-кода профиль импортируется без вопросов.
  • Raw-профили маршрутизации ("raw": true) отклоняются, а конечные точки в переданном профиле маршрутизации отбрасываются.
  • Для обновлений по расписанию нужны Настройки (Settings) → Подписки (Subscriptions) → Автообновление подписки (Subscription auto update) и, для удалённых профилей маршрутизации, Настройки → Маршрутизация (Routing) → Автообновление удалённых профилей (Auto update remote profiles). Оба параметра по умолчанию выключены.

Устранение неполадок

Эти сообщения относятся к Throne для компьютера.

  • Щелчок по ссылке ничего не делает или браузер спрашивает, каким приложением её открыть. throne:// не зарегистрирован для этой копии, см. Как Throne получает глубокую ссылку. Если у вас несколько копий, нажмите Установить (Install) в той, которая должна открывать ссылки. Или скопируйте ссылку и нажмите Ctrl+V в Throne.
  • Linux: ссылки по-прежнему не открываются. Установите пакет desktop-file-utils, затем нажмите Установить рядом с Регистрировать обработчик ссылок throne:// при запуске.
  • Ничего не происходит, и лог пуст. Throne молча отбрасывает нагрузку addsub, которая не является корректным стандартным Base64 (URL-безопасный - или _, пробелы или переносы строк), ссылку без косой черты после команды (кроме add и remoteroute) и неизвестную команду, нагрузка которой не декодируется.
  • «Проигнорирована глубокая ссылка с неизвестной командой: …» (Ignored deeplink with unknown command: …) Слово после throne:// — не addsub, route, remoteroute или add.
  • «Ссылка не содержит URL подписки.» (The link did not contain a subscription URL.) В нагрузке addsub перед # нет URL.
  • «Deep link has no data» (в глубокой ссылке нет данных) или «Base64 is invalid.» (некорректный Base64). После throne://remoteroute/ ничего нет или нагрузка не является стандартным Base64.
  • «The link did not contain any valid http(s) routing profile URLs.» (в ссылке нет корректных http(s)-адресов профилей маршрутизации). Ни одна строка нагрузки remoteroute не начинается с http:// или https://. Передайте список URL, а не JSON.
  • «Ссылка не содержала никаких допустимых профилей удаленной маршрутизации.» (The link did not contain any valid remote routing profiles.) В ссылке нет косой черты после remoteroute.
  • «Не удалось распознать ссылку:» (The link could not be parsed:) (ссылки route). «Empty input» (пустой ввод): после throne://route/ ничего нет. «Input is not valid JSON, base64, or a Throne route link» (ввод не является корректным JSON, base64 или ссылкой route Throne): нагрузка повреждена или обрезана. «Unrecognized route object» (нераспознанный объект маршрута): в JSON нет "kind": "throne-route-profile".
  • «Импортирован(ы) 0 профиль(ей)» (Imported 0 profile(s)) в логе. Нагрузка add повреждена, или вы отсканировали QR-код с глубокой ссылкой другого вида.
  • «Ошибка получения профиля удаленной маршрутизации …: …» (Remote routing profile … failed: …) в логе. Профиль добавлен, но его URL не удалось скачать или он не отдаёт структурированный профиль маршрутизации. Исправьте это, затем нажмите Обновить (Update) на вкладке Маршрутизация.