Управление через thronectl
Как подключить thronectl к headless Throne, добавить профили и подписки, перенести конфигурацию из приложения для компьютера с помощью резервной копии, изменить настройки и управлять Throne с другого устройства.
У headless Throne нет окна, поэтому им управляют с помощью thronectl — клиента командной строки для Throne API. На этой странице показано, как подключить thronectl к headless Throne и как настроить с его помощью Throne. Полный список команд и флагов — на странице Throne API и thronectl.
Установка thronectl
thronectl не входит в пакеты Throne. Установите его на компьютер, где работает Throne, и на любой другой компьютер, с которого хотите управлять Throne:
- скачайте исполняемый файл для Linux, Windows, macOS или FreeBSD со страницы релизов Throne-api или
- соберите его с помощью Go:
go install github.com/throneproj/Throne-api/cmd/thronectl@latest.
Образ Docker уже содержит thronectl в /usr/local/bin.
Чтобы оболочка дополняла команды, ID профилей и имена настроек, см. Автодополнение в оболочке.
Подключение thronectl к Throne
thronectl читает адрес Throne из THRONE_ADDR (по умолчанию 127.0.0.1:9095), а ключ — из файла, указанного в THRONE_KEY_FILE, из THRONE_KEY или из --key-file. Сам ключ он никогда не принимает как аргумент.
Throne --print-connection выводит обе переменные как строки export, но никогда не выводит сам ключ. Запускайте эту команду от имени пользователя, от которого работает Throne, и с тем же --data-dir:
$ sudo /opt/Throne/Throne --print-connection
export THRONE_ADDR=127.0.0.1:9095
export THRONE_KEY_FILE=/var/lib/throne/config/api.key
Как это использовать, зависит от того, как работает Throne:
-
Пользовательский юнит systemd (Throne работает от вашего имени):
eval "$(/opt/Throne/Throne --print-connection)"задаёт обе переменные. Затем выполнитеthronectl status. -
Системный юнит, Docker или LaunchDaemon в macOS (Throne работает от root): файл ключа может читать только root, а
sudoсбрасывает переменные. Либо скопируйте ключ в собственный файл:mkdir -p ~/.config/throne sudo install -m 600 -o "$USER" /var/lib/throne/config/api.key ~/.config/throne/api-key export THRONE_KEY_FILE=~/.config/throne/api-key thronectl statusлибо запустите
thronectlот root с файлом ключа:sudo thronectl --key-file /var/lib/throne/config/api.key status. -
Docker: запустите
thronectlвнутри контейнера:docker compose exec throne thronectl --key-file /var/lib/throne/config/api.key status. -
Служба Windows: см. Команды из командной строки.
Добавьте строку export в файл запуска своей оболочки (например, ~/.bashrc), чтобы она действовала в каждой новой оболочке.
--print-connection завершается с кодом 2, если API выключен или не слушает либо если его ключ хранится не в файле. Последний случай возникает, когда каталог данных взят из Throne для компьютера, который включил API с собственным ключом. Используйте этот ключ как THRONE_KEY (в приложении для компьютера: Integration Settings → Throne API → Copy for scripts) или запустите Throne с --api-key-file.
Административные запросы
Запросы, которые изменяют то, что хранит Throne, — административные: import, sub add, group, profile rm, settings set, backup, restart и shutdown. Throne отвечает на них только с собственного устройства, если он не запущен с --api-admin-lan (THRONE_API_ADMIN_LAN=1). С другого устройства они завершаются ошибкой forbidden.
Все остальные запросы, например status, connect, tun on или test, работают с любого устройства, которому разрешён доступ к API и у которого есть ключ.
Профили и подписки
thronectl import links.txt # ссылки для обмена, тело подписки, Clash, sing-box, Xray, WireGuard или OpenVPN
thronectl sub add 'https://sub.example.com/abc' --name Provider
thronectl groups
thronectl profiles --group 3
thronectl connect 12 # или: thronectl connect best --group 3
thronectl tun on
thronectl importчитает файл размером до 900 KiB или стандартный ввод, если указать-. С--url URLThrone один раз загружает URL. Без--groupпрофили попадают в группу, которая выбрана в Throne в данный момент.thronectl sub addдобавляет группу подписки, названную по имени хоста из URL, если вы не укажете--name, и загружает её. Группа обновляется автоматически, если вы не добавите--no-auto-update.thronectl connect bestзапускает профиль с наименьшей задержкой, предварительно проверив профили без недавнего результата (--max-age, например--max-age 1h).thronectl test latency --group 3проверяет группу. Тесты могут занимать минуты; задайте для них больший--timeout, напримерthronectl --timeout 5m test latency --group 3.
Запущенный профиль снова запускается при каждом запуске Throne — с TUN, если TUN был включён, — пока вы не выполните thronectl disconnect. Чтобы один раз запустить Throne без него, используйте --no-resume.
Перенос конфигурации с компьютера
Некоторые вещи проще настроить в Throne для компьютера, например профили маршрутизации, записи OTP или вход в VPN. Настройте их там, а затем перенесите с помощью резервной копии:
# На компьютере: создайте резервную копию в настройках «Резервное копирование и восстановление» (Backup and Restore) или, если в Throne для компьютера включён Throne API:
thronectl backup create -o desktop.thrbackup
scp desktop.thrbackup box:
# На устройстве с headless Throne (box):
thronectl backup restore desktop.thrbackup
backup restoreпоказывает содержимое архива и спрашивает подтверждение перед восстановлением. Без терминала добавьте--yes.- По умолчанию восстанавливаются профили, профили маршрутизации, записи OTP и списки IP. Чтобы восстановить и настройки, добавьте
--parts profiles,routes,otp,ip_lists,settings. - При восстановлении настроек сохраняются настройки, относящиеся к этому устройству: Throne API, адрес и порты входящих подключений, TUN, kill switch, NTP, логирование и пути к файлам.
- После восстановления Throne перезапускается.
- Через API Throne отклоняет архивы с профилями, которые запускали бы программы или читали файлы на его устройстве, например с профилями дополнительного ядра (Extra Core) (
invalid_archive). - Архивы резервных копий содержат учётные данные ваших профилей и секреты OTP в открытом виде. Удалите их, когда закончите.
Резервное копирование в приложении для компьютера описано в разделе Резервное копирование и восстановление.
Настройки
thronectl settings выводит настройки, которые может менять API, с их текущими значениями. thronectl settings set меняет одну или несколько из них:
thronectl settings
thronectl settings get log_level
thronectl settings set kill_switch=true log_level=debug
true, false и числа передаются как есть, всё остальное — как текст. Среди настроек есть те, которые называют Throne --check и ошибка tun_conflict: диапазоны адресов TUN (tun_ipv4_cidr, tun_ipv6_cidr), DNS-порт ядра (dns_in_port), входящее подключение (inbound_address, inbound_port), Clash API (clash_api_port, clash_listen_addr) и API sing-box (singbox_api_port). Некоторые настройки применяются только при следующем запуске профиля; какие именно, указано в таблице настроек в спецификации API.
Настройки, которыми API не управляет, можно изменить только в Throne для компьютера. Перенесите их с помощью восстановления настроек.
Управление с другого устройства
По умолчанию API слушает только 127.0.0.1. Чтобы управлять Throne с другого устройства, разрешите API слушать сеть со списком разрешённых адресов, а если это устройство должно импортировать данные и менять настройки, разрешите и административные запросы. Для юнита systemd добавьте следующее в /etc/throne/throne.env и выполните sudo systemctl restart throne:
THRONE_API_LISTEN=*:9095
THRONE_API_ALLOW=192.168.1.0/24
THRONE_API_ADMIN_LAN=1
На другом устройстве скопируйте ключ в файл, который можете читать только вы, укажите этот файл в THRONE_KEY_FILE и задайте THRONE_ADDR=<box>:9095.
- Kill switch всегда выпускает ответы API, поэтому клиенты получают доступ к API, откуда бы они ни подключались.
- Трафик к API зашифрован и аутентифицирован, в том числе в локальной сети. И всё же держите API на loopback, если он не нужен вам в сети, и всегда задавайте список разрешённых адресов.
- После 5 неудачных попыток аутентификации за минуту с одного адреса Throne отклоняет этот адрес на 60 секунд. Клиент со старым ключом может заблокировать других клиентов за тем же NAT.
- В Linux, если TUN запускается, пока API слушает сетевой адрес, Throne один раз предупреждает, если удалённые клиенты могут потерять доступ к API. См. Как Throne остаётся доступным.
Команды
Самые нужные команды:
| Команда | Что делает |
|---|---|
thronectl status |
Состояние, запущенный профиль, TUN, профиль маршрутизации, версия, возможности и конфликт TUN, если он есть |
thronectl groups, thronectl profiles [--group N] |
Группы и профили с их ID и результатами последних тестов |
thronectl connect <id>, connect best, connect last |
Запуск профиля |
thronectl disconnect, thronectl toggle |
Остановка профиля; подключение или отключение |
thronectl tun on, tun off |
Режим TUN |
thronectl routes, thronectl route <id> |
Список и активация профилей маршрутизации |
thronectl test latency | ip | speed --group N |
Тестирование профилей |
thronectl sub update --all |
Обновление всех подписок |
thronectl geo update, thronectl rulesets update |
Повторная загрузка геофайлов и наборов правил |
thronectl traffic --by app --since 7d |
Суммарный трафик |
thronectl restart, thronectl shutdown |
Перезапуск Throne; завершение его работы |
Добавьте --json к любой команде, чтобы получить вывод в формате JSON, удобный для скриптов. thronectl help <command> описывает команду. Все команды и флаги, а также коды завершения thronectl описаны на странице Throne API и thronectl.
thronectl restart, восстановление резервной копии и SIGHUP перезапускают Throne; как именно, зависит от режима перезапуска. thronectl shutdown заставляет Throne завершиться с кодом 0. Под systemd, launchd и службой Windows он после этого остаётся остановленным; Docker с restart: unless-stopped запускает его снова.