DeRouter — 基于区块链的纯正透明大模型 API 网关
DeRouter 通过区块链技术保证 Claude、GPT 官方 API 的纯正与透明,杜绝掺水降智问题。目前 Claude、GPT 在能力上仍领先国内大模型。
ByteVirt 是一家专注于高性价比云服务器的 VPS 厂商,提供稳定可靠的虚拟化云端主机,适合部署 KUI 节点、探针 bash 及各类自建服务。
KUI 是一套基于 Cloudflare 的代理管理、服务器探针和住宅双隧道面板。
Realtime Worker 会根据正在查看面板的人群自动调整 VPS Agent 的常规状态频率:
| 查看状态 | Core/Proxy 状态频率 | 说明 |
|---|---|---|
| 管理员后台 Dashboard WebSocket 在线 | 5 秒 | 配置、出口切换和实时运维使用最高频率 |
| 仅公开探针 WebSocket 在线 | 10 秒 | 公开探针保持接近实时,同时减少 Worker/DO 消耗 |
| 没有 Dashboard 或公开探针观众 | 30 秒 | 空闲降频,仍保持 Agent 在线与状态更新 |
以下事件不等待状态周期,会立即推送:
两台 VPS 各运行 Core 与 Proxy Agent 时,公开探针持续有人查看的常规状态消息约为 34,560/天;无人查看时约为 11,520/天。管理员后台持续打开时约为 69,120/天。实际 Workers & Pages 用量还会受订阅拉取、公开页面访问、WebSocket 重连和 D1 操作影响。
每台 VPS 可在“服务器与节点 → 节点出口”选择:
住宅 IP 代理支持两种模式:
局部代理会使用 sing-box 域名嗅探规则来匹配 TLS/HTTP 目标域名。住宅出口只验证 IPv4;在局部模式下,受管节点的 IPv6 流量会被明确拒绝,避免从 WARP 双栈切换后发生 IPv6 绕过或原生 IPv6 泄漏。
修改局部代理分类时,先勾选分类,再点击“应用已选分类”。单个分类勾选不会立即递增出口 revision 或重建 sing-box 配置。
管理员可在:
系统设置 → 管理员订阅防泄漏重置 → 订阅保护
直接切换订阅保护开关,变更会立即保存,不需要点击“立即生效配置”。
/api/sub 不验证 Token、不读取节点数据,直接返回普通站点首页 HTML;订阅客户端不会获得真实节点,从而停止在线更新。订阅保护适合在链接疑似泄露、需要临时停止拉取时使用。它不等于完整访问控制:已暴露的订阅路径仍可能被访问记录识别。长期保护建议同时轮换订阅 Token,并使用独立订阅域名、Cloudflare Access 或可信 IP 访问限制。
推荐使用下面的顺序,不要跳步:
1. Fork GitHub 仓库
2. 创建一个 Cloudflare D1 数据库
3. 创建 Cloudflare Pages,并绑定这个 D1
4. 配置 Pages 生产环境变量
5. 首次登录 Pages,确认数据库初始化
6. 部署 Realtime Worker,并绑定同一个 D1
7. 检查 Worker /health
8. 将 Worker 地址写回 Pages,重新部署
9. 在 KUI 面板添加 VPS
10. 在 VPS 执行面板生成的 Full Deploy Command
11. 添加节点并验证订阅
需要准备:
建议先不要部署住宅代理。先完成 Pages、Worker、Agent 和普通节点验证,再启用住宅出口。
打开仓库:
https://github.com/a6216abcd/K-UI
点击右上角 Fork,将仓库复制到自己的 GitHub 账号。
后续 Cloudflare Pages 必须连接你 Fork 后的仓库,不要连接上游仓库。
进入 Cloudflare 控制台:
Workers & Pages → D1 → Create database
数据库名称建议填写:
kui-db
创建完成后记录数据库名称。Pages 和 Realtime Worker 必须绑定同一个 D1 数据库,不能各自使用自动创建的空数据库。
进入:
Workers & Pages → Create application → Pages → Connect to Git
选择你 Fork 的 KUI 仓库,使用以下设置:
| 设置项 | 填写内容 |
|---|---|
| Production branch | dev,或你准备发布的分支 |
| Framework preset | None |
| Build command | exit 0 |
| Build output directory | . |
点击部署,等待 Pages 首次构建成功。
部署成功后打开 Pages 地址:
https://你的项目.pages.dev
进入 Pages 项目:
Settings → Functions → D1 database bindings
在 Production 环境添加:
| Binding name | Database |
|---|---|
DB | 第 2 步创建的 kui-db |
必须满足:
DB,大小写不能变。进入:
Settings → Environment variables → Production
添加以下变量:
| 名称 | 类型 | 说明 |
|---|---|---|
ADMIN_USERNAME | Variable | 管理员用户名,建议使用 admin |
ADMIN_PASSWORD | Secret | 管理员强密码,至少 16 位 |
PROXY_USER | Secret | 住宅代理用户名 |
PROXY_PASS | Secret | 住宅代理密码 |
第一次部署可以暂时不添加:
REALTIME_URL
保存变量并重新部署 Pages。
打开:
https://你的项目.pages.dev
使用刚配置的 ADMIN_USERNAME 和 ADMIN_PASSWORD 登录。
登录后进入“服务器与节点”,确认页面可以正常加载。此时 Pages + D1 基础部署完成。
如果页面提示缺少 DB、登录后 500 或数据无法加载,不要继续部署 Worker,先回到第 4 步检查 D1 binding。
Realtime Worker 用于实时状态、Dashboard WebSocket 和配置通知。它不是 Pages 本身,必须单独部署。
使用本地 Wrangler 可以明确指定 Pages 地址和已有 D1,最不容易绑定到错误的空数据库:
git clone https://github.com/a6216abcd/K-UI.git
cd K-UI/realtime
npm install
npx wrangler login
确认 wrangler.jsonc 的 d1_databases 使用 Pages 第 2 步创建的同一个数据库:
"d1_databases": [
{
"binding": "DB",
"database_name": "kui-db",
"database_id": "你的 D1 database_id"
}
]
然后部署:
npx wrangler deploy
默认 Pages 地址形如:
https://你的项目.pages.dev
不需要设置 PAGES_ORIGIN,Realtime Worker 会自动接受该 Pages 域名的 WebSocket 连接。
如果你为 Pages 绑定了自定义域名,例如:
https://panel.example.com
必须进入 Worker:
Workers & Pages → kui-realtime → Settings → Variables and Secrets
新增或修改 Worker Variable:
| 名称 | 值 |
|---|---|
PAGES_ORIGIN | https://panel.example.com |
要求:
https://。/。否则 Worker 会拒绝来自自定义域名的 Dashboard / 公开探针 WebSocket,页面会退回旧数据或 HTTP fallback。
如果无法使用本地 Node.js,可以使用按钮:
部署时确认 Worker 名称为:
kui-realtime
一键部署完成后,仍必须按照下面的“Worker 必须绑定同一个 D1”检查 DB binding。不要直接使用它自动创建的空 D1。
进入:
Workers & Pages → kui-realtime → Settings → Bindings
确认:
DB → 与 Pages 完全相同的 kui-db
VPS_PRESENCE → VpsPresence
DASHBOARD_HUB → DashboardHub
最容易出错的是 Worker 自动创建了另一个 D1。发现 Worker 的 DB 不是 Pages 正在使用的 D1 时,删除错误 binding,重新绑定正确的数据库。
不要修改或删除两个 Durable Object binding:
VPS_PRESENCE
DASHBOARD_HUB
打开:
https://你的Worker地址/health
应该返回:
{"ok":true,"service":"kui-realtime","version":1}
如果不是这个结果,先不要继续配置 Pages 的 REALTIME_URL。
确认 Worker /health 正常后,回到 Pages:
Settings → Environment variables → Production
添加:
| 名称 | 类型 | 值 |
|---|---|---|
REALTIME_URL | Variable | https://你的Worker地址 |
注意:
https://。/。保存后重新部署 Pages。重新登录后台,确认 Dashboard 实时状态可以连接。
登录 KUI 后台,进入:
服务器与节点 → 接入机器
填写:
点击接入机器。
添加后,服务器卡片会生成专属的 Full Deploy Command。
只复制面板当前生成的完整命令,在对应 VPS 的 root Shell 执行。
不要:
Full Deploy 会安装并管理:
kui-agentsing-boxproxy-liteDebian/Ubuntu 检查:
systemctl is-active kui-agent sing-box
systemctl status kui-agent --no-pager
journalctl -u kui-agent -n 80 --no-pager
Alpine 检查:
rc-service kui-agent status
rc-service sing-box status
tail -n 80 /var/log/kui-agent.log
等待 30-90 秒后刷新面板。服务器卡片显示在线,且 CPU、内存、磁盘和网速开始更新,说明 Agent 部署成功。
先使用单节点创建测试,确认单节点可用后再使用“极速全量节点下发(8合1)”。
推荐测试顺序:
使用 Clash Meta/Mihomo 时:
确认单节点测试成功后,在服务器卡片中填写起始端口,例如:
8881
面板会连续创建:
XTLS-Reality
Hysteria2
TUIC
Trojan
H2-Reality
gRPC-Reality
AnyTLS
Naive
起始端口必须满足:
起始端口 >= 10
起始端口 + 7 <= 65535
确认 VPS 安全组和系统防火墙允许对应 TCP/UDP 端口:
满足以下条件,才算部署完成:
DB binding。/health 返回成功。REALTIME_URL。kui-agent 和 sing-box 为 active。检查:
Pages → Settings → Functions → D1 database bindings
确认 Production 环境存在:
DB → 正确的 D1 数据库
修改后重新部署 Pages。
/health 正常但面板没有实时状态依次检查:
DB 是否与 Pages 使用同一个 D1。REALTIME_URL。REALTIME_URL 是否使用 HTTPS,末尾是否多了 /。Debian/Ubuntu:
systemctl is-active sing-box
sing-box check -c /etc/sing-box/config.json
journalctl -u sing-box -n 100 --no-pager
ss -ltnup
Alpine:
rc-service sing-box status
sing-box check -c /etc/sing-box/config.json
tail -n 100 /var/log/sing-box.log
ss -ltnup
重点检查:
部分旧 Mihomo/Clash Verge 内核会把 H2-Reality 的延迟检测判定为超时,但实际连接仍然可用。
处理方式:
WARP 是可选功能,不影响原生节点部署。先切回:
节点出口 → 原生出口
然后检查:
systemctl status kui-agent --no-pager
journalctl -u kui-agent -n 100 --no-pager
常见原因:
检查:
/dev/net/tun 是否存在。proxy-lite 是否运行。PROXY_USER 和 PROXY_PASS。住宅代理依赖公开节点和网络质量,不保证始终为 2/2。建议先完成原生出口部署,再单独测试住宅出口。
使用本地 Wrangler:
git clone https://github.com/a6216abcd/K-UI.git
cd K-UI/realtime
npm install
npx wrangler login
编辑 wrangler.jsonc:
database_name。database_id。*.pages.dev 域名时不需要配置 PAGES_ORIGIN。绑定自定义域名后必须在 Worker 环境变量中设置 PAGES_ORIGIN=https://你的自定义域名,保存后重新部署 Worker。然后执行:
npx wrangler deploy
部署后仍然要回到第 7-9 步检查 Worker binding、/health 和 Pages 的 REALTIME_URL。
VPS 组件每小时通过 Pages 鉴权端点检查更新,验证组件名、长度、SHA-256 和基于 Agent Token 的 HMAC 更新清单,通过 Python 语法检查后原子替换。更新后的 Agent 需要完成配置拉取、核心服务健康检查和首次状态上报后才确认新版本。
自动更新文件包括:
/opt/kui/agent.py
/opt/kui/realtime_client.py
/opt/proxy_lite/lite_manager.py
/opt/proxy_lite/proxy_server.py
/opt/proxy_lite/realtime_client.py
安全要求:
ADMIN_PASSWORD、PROXY_USER、PROXY_PASS 使用 Secret。KUI/
├── index.html
├── functions/api/[[path]].js
├── realtime/
│ ├── src/index.js
│ ├── wrangler.jsonc
│ └── package.json
└── vps/
├── agent.py
├── realtime_client.py
├── kui.sh
├── lite_manager.py
├── proxy_server.py
└── residential-proxy.sh
提交 Issue 时不要附带密码、Token 或完整 VPS 配置。
HTML
41.1%
JavaScript
30.0%
Python
23.6%
Shell
5.4%
DeRouter — 基于区块链的纯正透明大模型 API 网关
DeRouter 通过区块链技术保证 Claude、GPT 官方 API 的纯正与透明,杜绝掺水降智问题。目前 Claude、GPT 在能力上仍领先国内大模型。
ByteVirt 是一家专注于高性价比云服务器的 VPS 厂商,提供稳定可靠的虚拟化云端主机,适合部署 KUI 节点、探针 bash 及各类自建服务。
KUI 是一套基于 Cloudflare 的代理管理、服务器探针和住宅双隧道面板。
Realtime Worker 会根据正在查看面板的人群自动调整 VPS Agent 的常规状态频率:
| 查看状态 | Core/Proxy 状态频率 | 说明 |
|---|---|---|
| 管理员后台 Dashboard WebSocket 在线 | 5 秒 | 配置、出口切换和实时运维使用最高频率 |
| 仅公开探针 WebSocket 在线 | 10 秒 | 公开探针保持接近实时,同时减少 Worker/DO 消耗 |
| 没有 Dashboard 或公开探针观众 | 30 秒 | 空闲降频,仍保持 Agent 在线与状态更新 |
以下事件不等待状态周期,会立即推送:
两台 VPS 各运行 Core 与 Proxy Agent 时,公开探针持续有人查看的常规状态消息约为 34,560/天;无人查看时约为 11,520/天。管理员后台持续打开时约为 69,120/天。实际 Workers & Pages 用量还会受订阅拉取、公开页面访问、WebSocket 重连和 D1 操作影响。
每台 VPS 可在“服务器与节点 → 节点出口”选择:
住宅 IP 代理支持两种模式:
局部代理会使用 sing-box 域名嗅探规则来匹配 TLS/HTTP 目标域名。住宅出口只验证 IPv4;在局部模式下,受管节点的 IPv6 流量会被明确拒绝,避免从 WARP 双栈切换后发生 IPv6 绕过或原生 IPv6 泄漏。
修改局部代理分类时,先勾选分类,再点击“应用已选分类”。单个分类勾选不会立即递增出口 revision 或重建 sing-box 配置。
管理员可在:
系统设置 → 管理员订阅防泄漏重置 → 订阅保护
直接切换订阅保护开关,变更会立即保存,不需要点击“立即生效配置”。
/api/sub 不验证 Token、不读取节点数据,直接返回普通站点首页 HTML;订阅客户端不会获得真实节点,从而停止在线更新。订阅保护适合在链接疑似泄露、需要临时停止拉取时使用。它不等于完整访问控制:已暴露的订阅路径仍可能被访问记录识别。长期保护建议同时轮换订阅 Token,并使用独立订阅域名、Cloudflare Access 或可信 IP 访问限制。
推荐使用下面的顺序,不要跳步:
1. Fork GitHub 仓库
2. 创建一个 Cloudflare D1 数据库
3. 创建 Cloudflare Pages,并绑定这个 D1
4. 配置 Pages 生产环境变量
5. 首次登录 Pages,确认数据库初始化
6. 部署 Realtime Worker,并绑定同一个 D1
7. 检查 Worker /health
8. 将 Worker 地址写回 Pages,重新部署
9. 在 KUI 面板添加 VPS
10. 在 VPS 执行面板生成的 Full Deploy Command
11. 添加节点并验证订阅
需要准备:
建议先不要部署住宅代理。先完成 Pages、Worker、Agent 和普通节点验证,再启用住宅出口。
打开仓库:
https://github.com/a6216abcd/K-UI
点击右上角 Fork,将仓库复制到自己的 GitHub 账号。
后续 Cloudflare Pages 必须连接你 Fork 后的仓库,不要连接上游仓库。
进入 Cloudflare 控制台:
Workers & Pages → D1 → Create database
数据库名称建议填写:
kui-db
创建完成后记录数据库名称。Pages 和 Realtime Worker 必须绑定同一个 D1 数据库,不能各自使用自动创建的空数据库。
进入:
Workers & Pages → Create application → Pages → Connect to Git
选择你 Fork 的 KUI 仓库,使用以下设置:
| 设置项 | 填写内容 |
|---|---|
| Production branch | dev,或你准备发布的分支 |
| Framework preset | None |
| Build command | exit 0 |
| Build output directory | . |
点击部署,等待 Pages 首次构建成功。
部署成功后打开 Pages 地址:
https://你的项目.pages.dev
进入 Pages 项目:
Settings → Functions → D1 database bindings
在 Production 环境添加:
| Binding name | Database |
|---|---|
DB | 第 2 步创建的 kui-db |
必须满足:
DB,大小写不能变。进入:
Settings → Environment variables → Production
添加以下变量:
| 名称 | 类型 | 说明 |
|---|---|---|
ADMIN_USERNAME | Variable | 管理员用户名,建议使用 admin |
ADMIN_PASSWORD | Secret | 管理员强密码,至少 16 位 |
PROXY_USER | Secret | 住宅代理用户名 |
PROXY_PASS | Secret | 住宅代理密码 |
第一次部署可以暂时不添加:
REALTIME_URL
保存变量并重新部署 Pages。
打开:
https://你的项目.pages.dev
使用刚配置的 ADMIN_USERNAME 和 ADMIN_PASSWORD 登录。
登录后进入“服务器与节点”,确认页面可以正常加载。此时 Pages + D1 基础部署完成。
如果页面提示缺少 DB、登录后 500 或数据无法加载,不要继续部署 Worker,先回到第 4 步检查 D1 binding。
Realtime Worker 用于实时状态、Dashboard WebSocket 和配置通知。它不是 Pages 本身,必须单独部署。
使用本地 Wrangler 可以明确指定 Pages 地址和已有 D1,最不容易绑定到错误的空数据库:
git clone https://github.com/a6216abcd/K-UI.git
cd K-UI/realtime
npm install
npx wrangler login
确认 wrangler.jsonc 的 d1_databases 使用 Pages 第 2 步创建的同一个数据库:
"d1_databases": [
{
"binding": "DB",
"database_name": "kui-db",
"database_id": "你的 D1 database_id"
}
]
然后部署:
npx wrangler deploy
默认 Pages 地址形如:
https://你的项目.pages.dev
不需要设置 PAGES_ORIGIN,Realtime Worker 会自动接受该 Pages 域名的 WebSocket 连接。
如果你为 Pages 绑定了自定义域名,例如:
https://panel.example.com
必须进入 Worker:
Workers & Pages → kui-realtime → Settings → Variables and Secrets
新增或修改 Worker Variable:
| 名称 | 值 |
|---|---|
PAGES_ORIGIN | https://panel.example.com |
要求:
https://。/。否则 Worker 会拒绝来自自定义域名的 Dashboard / 公开探针 WebSocket,页面会退回旧数据或 HTTP fallback。
如果无法使用本地 Node.js,可以使用按钮:
部署时确认 Worker 名称为:
kui-realtime
一键部署完成后,仍必须按照下面的“Worker 必须绑定同一个 D1”检查 DB binding。不要直接使用它自动创建的空 D1。
进入:
Workers & Pages → kui-realtime → Settings → Bindings
确认:
DB → 与 Pages 完全相同的 kui-db
VPS_PRESENCE → VpsPresence
DASHBOARD_HUB → DashboardHub
最容易出错的是 Worker 自动创建了另一个 D1。发现 Worker 的 DB 不是 Pages 正在使用的 D1 时,删除错误 binding,重新绑定正确的数据库。
不要修改或删除两个 Durable Object binding:
VPS_PRESENCE
DASHBOARD_HUB
打开:
https://你的Worker地址/health
应该返回:
{"ok":true,"service":"kui-realtime","version":1}
如果不是这个结果,先不要继续配置 Pages 的 REALTIME_URL。
确认 Worker /health 正常后,回到 Pages:
Settings → Environment variables → Production
添加:
| 名称 | 类型 | 值 |
|---|---|---|
REALTIME_URL | Variable | https://你的Worker地址 |
注意:
https://。/。保存后重新部署 Pages。重新登录后台,确认 Dashboard 实时状态可以连接。
登录 KUI 后台,进入:
服务器与节点 → 接入机器
填写:
点击接入机器。
添加后,服务器卡片会生成专属的 Full Deploy Command。
只复制面板当前生成的完整命令,在对应 VPS 的 root Shell 执行。
不要:
Full Deploy 会安装并管理:
kui-agentsing-boxproxy-liteDebian/Ubuntu 检查:
systemctl is-active kui-agent sing-box
systemctl status kui-agent --no-pager
journalctl -u kui-agent -n 80 --no-pager
Alpine 检查:
rc-service kui-agent status
rc-service sing-box status
tail -n 80 /var/log/kui-agent.log
等待 30-90 秒后刷新面板。服务器卡片显示在线,且 CPU、内存、磁盘和网速开始更新,说明 Agent 部署成功。
先使用单节点创建测试,确认单节点可用后再使用“极速全量节点下发(8合1)”。
推荐测试顺序:
使用 Clash Meta/Mihomo 时:
确认单节点测试成功后,在服务器卡片中填写起始端口,例如:
8881
面板会连续创建:
XTLS-Reality
Hysteria2
TUIC
Trojan
H2-Reality
gRPC-Reality
AnyTLS
Naive
起始端口必须满足:
起始端口 >= 10
起始端口 + 7 <= 65535
确认 VPS 安全组和系统防火墙允许对应 TCP/UDP 端口:
满足以下条件,才算部署完成:
DB binding。/health 返回成功。REALTIME_URL。kui-agent 和 sing-box 为 active。检查:
Pages → Settings → Functions → D1 database bindings
确认 Production 环境存在:
DB → 正确的 D1 数据库
修改后重新部署 Pages。
/health 正常但面板没有实时状态依次检查:
DB 是否与 Pages 使用同一个 D1。REALTIME_URL。REALTIME_URL 是否使用 HTTPS,末尾是否多了 /。Debian/Ubuntu:
systemctl is-active sing-box
sing-box check -c /etc/sing-box/config.json
journalctl -u sing-box -n 100 --no-pager
ss -ltnup
Alpine:
rc-service sing-box status
sing-box check -c /etc/sing-box/config.json
tail -n 100 /var/log/sing-box.log
ss -ltnup
重点检查:
部分旧 Mihomo/Clash Verge 内核会把 H2-Reality 的延迟检测判定为超时,但实际连接仍然可用。
处理方式:
WARP 是可选功能,不影响原生节点部署。先切回:
节点出口 → 原生出口
然后检查:
systemctl status kui-agent --no-pager
journalctl -u kui-agent -n 100 --no-pager
常见原因:
检查:
/dev/net/tun 是否存在。proxy-lite 是否运行。PROXY_USER 和 PROXY_PASS。住宅代理依赖公开节点和网络质量,不保证始终为 2/2。建议先完成原生出口部署,再单独测试住宅出口。
使用本地 Wrangler:
git clone https://github.com/a6216abcd/K-UI.git
cd K-UI/realtime
npm install
npx wrangler login
编辑 wrangler.jsonc:
database_name。database_id。*.pages.dev 域名时不需要配置 PAGES_ORIGIN。绑定自定义域名后必须在 Worker 环境变量中设置 PAGES_ORIGIN=https://你的自定义域名,保存后重新部署 Worker。然后执行:
npx wrangler deploy
部署后仍然要回到第 7-9 步检查 Worker binding、/health 和 Pages 的 REALTIME_URL。
VPS 组件每小时通过 Pages 鉴权端点检查更新,验证组件名、长度、SHA-256 和基于 Agent Token 的 HMAC 更新清单,通过 Python 语法检查后原子替换。更新后的 Agent 需要完成配置拉取、核心服务健康检查和首次状态上报后才确认新版本。
自动更新文件包括:
/opt/kui/agent.py
/opt/kui/realtime_client.py
/opt/proxy_lite/lite_manager.py
/opt/proxy_lite/proxy_server.py
/opt/proxy_lite/realtime_client.py
安全要求:
ADMIN_PASSWORD、PROXY_USER、PROXY_PASS 使用 Secret。KUI/
├── index.html
├── functions/api/[[path]].js
├── realtime/
│ ├── src/index.js
│ ├── wrangler.jsonc
│ └── package.json
└── vps/
├── agent.py
├── realtime_client.py
├── kui.sh
├── lite_manager.py
├── proxy_server.py
└── residential-proxy.sh
提交 Issue 时不要附带密码、Token 或完整 VPS 配置。
HTML
41.1%
JavaScript
30.0%
Python
23.6%
Shell
5.4%