Глубокие ссылки
Добавляйте подписки, профили маршрутизации и профили прокси одним щелчком по ссылкам 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) на вкладкеМаршрутизация.