只监听 127.0.0.1。配置与密钥都存在 config/qqmate.db;密钥值经 RSA-OAEP 逐字段加密提交,落盘经 AES-256-GCM 一行一封套,主密钥在 config/vault/master.key(不在库里)。
字段加密要靠 crypto.subtle,请检查是否在不安全的 http 源上打开了本页
(非 localhost 的 http 会禁用 WebCrypto)。请不要用 http 访问。
本服务不开放注册。用户名与初始口令在服务首次启动时打印在那个终端里(用户名默认 qqmate)。
| 已保存 | 长度 |
|---|
列表只显示键名和长度——本服务不提供"看回明文"的能力,填错就重填一次。
改口令会让所有已登录的浏览器标签失效。口令不参与加密密钥表,所以改了不用重录入密钥。
这一份直接从 config/qqmate.db 读,保存就是写进库里,写过的项都能在底部的审计表查到。
标 热 的格子保存后 mate-app 会在下一次轮询自己换上去;
标 要重启 的格子写库也是立刻的,但要 mate-app(不是本服务)重启才生效。
内网穿透那一个 热 是本服务自己应用的,不需要 mate-app 参与。
群聊与路由热
人格热
供应商
卡片上那三项(开/关、优先级、每日额度)是热的;只改它们不会动地址和模型清单。 地址、密钥变量名、代理、模型清单都收在卡片里的“整行”里,那一块要重启: 整行写入必须把字段给全(缺一项会被直接拒掉,不然你没动的列会被静默写成默认值)。
照现有卡片里的 JSON 改一便:必填 name、base_url、api_key_env、filed、priority、enabled、models。
内网穿透(rathole)热
被穿透的只有这个配置页面,端口就是本服务自己监听的那个(只绑 127.0.0.1),所以表单里没有“本地端口”可填;
境外出网那条链路仍然走下面的 SSH 代理。客户端(rathole)嵌在本服务进程里,不需要另外下载一个可执行文件;
开了就起任务,改了立刻重开,不重启本服务。
开启前要做两件事:在上面的密钥区填一条 token(默认键名 rathole_token,值必须与服务端那一份完全一致),
以及把服务端 rathole --genkey 出来的公钥填进 remote_public_key(私钥留在服务端)。
链路只有 noise 一档,页面上没得选:裸 tcp 等于把这个控制台明文放到公网。noise 的 NK 握手靠那个公钥认服务端是谁——
少了它,“链路加密但不认人”的问题会原样复现:任何人开个端口配上同一个 token 就能接走这个代理。
隧道只搬 TCP,https 在公网那台机器上由反代终结(本机这张自签 CA 出不了门):
浏览器 → 反代(Traefik,443) → rathole 服务端的 remote_port → 隧道 → 本机 127.0.0.1。
所以 public_host 填的是反代那个域名(一般不带端口),remote_port 是给反代接的内部端口,两个可以也应该不同。
预览一次给两侧:客户端那一份与服务端要加的两段,服务名、token、端口三处必须一字不差地对上。
预览里的 token 永远是个占位符;真值只进磁盘上那一份 config/vault/rathole-client.toml(rathole 的配置没有环境变量模板这一说)。
它进 .gitignore,关掉穿透就会被删掉,而且同一个目录里的 master.key 本来就是明文。不想要公网入口时请把上面的开关取消勾选再保存,而不只是关掉浏览器里的页面。
SSH 代理要重启
QQ 端点与会话落盘要重启
| 时间 | 谁 | 表 | 键 | 字段 | 从→到 |
|---|
密钥行只记长度与“已替换/已删除”,不会把值记进审计。
根证书由服务在启动时自动导入「受信任的根证书颁发机构 — 当前用户」,正常不会出现证书告警。
如果是这台机器第一次导入、而浏览器早就开着了,它还不认这张根:要完全退出浏览器再打开(刷新页面没用,Chrome/Edge 只在进程启动时读一次系统根存储)。
仍然弹警告(比如导入被组策略挡下),手工补一次:
① 下载根证书后在证书管理器里导入;
② 或在服务所在终端执行 certutil -addstore -user Root config\vault\ca.crt。
做完同样要完全退出浏览器再打开。根 CA 的注册信息在 config/vault/ca-profile.toml。