使用 thronectl 管理
将 thronectl 连接到无界面 Throne,添加配置档和订阅,用备份迁移桌面版的配置,更改设置,以及从其他设备管理 Throne。
无界面 Throne 没有窗口,因此你需要用 thronectl 来管理它,它是 Throne API 的命令行客户端。本页介绍如何将 thronectl 连接到无界面 Throne,以及如何用它来设置 Throne。完整的命令和参数列表请参见 Throne API 与 thronectl。
安装 thronectl
thronectl 不包含在 Throne 软件包中。请把它安装在运行 Throne 的电脑上,以及你想用来管理 Throne 的其他任何电脑上:
- 从 Throne-api 的发布页面下载适用于 Linux、Windows、macOS 或 FreeBSD 的二进制文件,或者
- 用 Go 构建:
go install github.com/throneproj/Throne-api/cmd/thronectl@latest。
Docker 镜像已经在 /usr/local/bin 中包含 thronectl。
如果想让 shell 自动补全命令、配置档 ID 和设置名称,请参见 Shell 补全。
将 thronectl 连接到 Throne
thronectl 从 THRONE_ADDR(默认为 127.0.0.1:9095)读取 Throne 的地址,从 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 或 macOS LaunchDaemon(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或者以 root 身份、使用该密钥文件运行
thronectl: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 行放进你的 shell 启动文件(例如 ~/.bashrc),这样每个新的 shell 都会设置它。
当 API 已关闭或未在监听,或者其密钥不在文件中时,--print-connection 会以退出码 2 退出。最后一种情况发生在数据目录来自一个用自己的密钥开启了 API 的桌面版 Throne 时。请把该密钥用作 THRONE_KEY(在桌面版中:Integration Settings → Throne API → Copy for scripts),或者用 --api-key-file 启动 Throne。
管理请求
会更改 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 URL让 Throne 下载某个 URL 一次。不带--group时,配置档会进入 Throne 中的当前分组。thronectl sub add添加一个订阅分组并下载它;除非你提供--name,否则该分组以 URL 中的主机名命名。除非你添加--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。如果想在某一次启动时不启动它,请使用 --no-resume。
迁移桌面版的配置
有些内容在桌面版 Throne 中设置更方便,例如路由配置档、OTP 条目或 VPN 登录。请在桌面版中设置好,然后用备份迁移过来:
# 在桌面版上:在“备份和恢复”(Backup and Restore)设置中创建备份,或者在桌面版的 Throne API 开启时运行:
thronectl backup create -o desktop.thrbackup
scp desktop.thrbackup 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 会拒绝含有会在其设备上运行程序或读取文件的配置档(例如额外核心配置档)的归档(
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)以及 sing-box API(singbox_api_port)。有些设置只有在配置档重新启动后才会生效;具体是哪些,请参见 API 规范中的设置表。
API 不管理的设置只能在桌面版 Throne 中更改。请通过恢复设置把它们迁移过来。
从其他设备管理
默认情况下,API 只监听 127.0.0.1。要从其他设备管理 Throne,请让它在网络上监听并设置允许列表;如果那台设备需要导入内容和更改设置,还要允许管理请求。对于 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,否则请让它保持在环回地址上,并且始终提供允许列表。
- 同一地址在一分钟内认证失败 5 次后,Throne 会在 60 秒内拒绝该地址。一个使用旧密钥的客户端可能会把同一 NAT 后面的其他客户端锁在外面。
- 在 Linux 上,如果 API 监听网络地址时启动 TUN,而远程客户端可能会失去对 API 的访问,Throne 会警告一次。参见 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 |
重新下载 geo 文件和规则集 |
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 服务下,它随后会保持停止状态;使用 restart: unless-stopped 的 Docker 则会再次启动它。