dsh-our-free-model 免 Key 本地鉴权:3 套凭据与 4 类故障的完整拆解
dsh-our-free-model 免 Key 本地鉴权:3 套凭据与 4 类故障的完整拆解
【免费下载链接】dsh-our-free-model在 dsh 里装上这个插件即可,无需登录、注册或填 API Key,就能使用包括 DeepSeek V4.1 Flash、Kimi K3 在内的前沿模型——完全免费,不限量。 All you do is install this plugin in dsh: no login, no sign-up, no API key — the frontier models are just there, DeepSeek V4.1 Flash and Kimi K3 among them. Completely free, with no usage cap.项目地址: https://gitcode.com/gh_mirrors/ds/dsh-our-free-model
dsh-our-free-model 装上即免 Key 使用 DeepSeek V4.1 Flash、Kimi K3 等模型,免费不限量,但额度全在本机,等于把口子开给了整张网。这篇把它的三套凭据、四类故障逐条拆开,重点看本地鉴权与免 Key 转发这两条线是怎么在本机把口子守住的。
🧱 能力边界:设置路由先于内核核身的两道准入
最长前缀让插件抢在 /api 前接球
插件把设置路由注册在/api/our-free-model,见 index.js 的server.register({ kind: 'prefix', path: '/api/our-free-model', handler: api })。这个前缀比内核的/api长,而宿主 webServer 分发走最长前缀优先,请求会先命中插件,内核自身的核身轮不到出手。所以插件必须自己装准入逻辑,实现在 src/trust.js,而不是指望内核在前面兜底。
宿主 connection 服务同形借判
rejectionFor第一层先调宿主的connection服务admit——这正是内核给自家/api用的那套判定(trust fence 加浏览器 cookie)。由于宿主可能在插件加载后才发布该服务,判定经connectionAdmissionView逐请求晚绑定读取;dsh 0.1.7 之前的老内核以旧名requestRejection发布同一判定,视图只做名字映射,不放松判定本身。
极简宿主走结构复制 fence
没有 connection 服务的宿主走structuralReason第二层:Host 非回环直接 403,sec-fetch-site标 cross-site 403,Origin/Referer 的协议、主机、端口任一不匹配 403。桌面中继的dsh-app://appReferer 只有在完全不携带任何浏览器标记时才放行。
实测口径:异源 Host/Origin 一律 403,无 cookie 的回环请求经 connection 服务返回 401;拒绝日志只落 status、source、reason 三个固定字段,任何请求头、URL、Cookie 都不进日志,回归用例见 scripts/trust-test.mjs。
本章结论:路由虽抢跑,准入只会与内核同严。
📡 运行时约束:回环绑定的 DNS 校验与端口退避
监听地址先解析再要求全回环
转发端口(默认 18899,见 src/store.js)只发给本机工具,所以监听器只能绑回环。resolveLoopbackBind在 src/forward.js 里先把localhost之类主机名做 DNS 解析,且要求每个解析结果都是回环 IP,真正传给listen的是解析出的 IP 而非原始字符串。hosts 文件把 localhost 指到可路由网卡时,绑定直接失败、服务不启动。
端口占用的三轮退避再扫再随机
bindForwardPort不在首次被占时判死:先在同一端口指数退避重试 4 轮(BIND_ATTEMPTS = 4、BIND_BACKOFF_MS = 150,即 150/300/600 ms),覆盖进程正在关闭的瞬态窗口;再向后扫 10 个连续端口(BIND_SCAN = 10);仍无解落随机端口。设置页把"请求 18899、实际 18900"原样展示,落盘也是实际端口。
Windows 上 EACCES 与 EADDRINUSE 分诊
classifyBindError把两者分开:EACCES/EPERM指向netsh interface portproxy残留规则或 Hyper-V/WinNAT 预留,诊断文案直指这两处;EADDRINUSE才是普通占用;EADDRNOTAVAIL表示解析出的回环地址不在这台机器上。
本章结论:端口要出门就停摆,额度不外递。
🔑 凭据生命周期:三把钥匙各记各的账
本机转发 Key 的随机生成与恒时比对
转发 Key 由generateKey生成:ofm-前缀加crypto.randomBytes(24)的 base64url。落盘经 src/store.js 的临时文件 + rename 原子写入,模式0o600,仓库内无任何硬编码凭据。比对走keyMatches——双方先各做一次 SHA-256 再timingSafeEqual,耗时不随前缀匹配长度变化,堵死按时差逐字节猜 Key 的侧信道。
局域网中继独立 Key 与入口换钥
startLanRelay默认关闭、绑可路由地址,只认专用lanKey,连/health也要 Key;请求在门口换成本机 Key 再拨127.0.0.1,外部凭据不过这一层。放行路径白名单是RELAY_PATHS(/v1/models、/v1/chat/completions、/v1/responses等),带x-ofm-relay-hop标记直接 508。
EAC 密封凭据:板上只有密封,真钥匙在网关
协付渠道落地在插件里的只有网关地址与 HMAC 签名密钥的 AES-256-GCM 密封,明文见 src/vault-data.js、src/vault-anchor.js(均为生成文件),真实 Key 只在 Worker 环境变量。每个出站请求按timestamp \n METHOD \n path \n sha256(body)做 HMAC-SHA256 签名,见 src/eac.js。
| 凭据 | 落盘形态 | 泄露影响面 | 轮换动作 |
|---|---|---|---|
| 转发 Key | 本机 0600 文件,ofm-+ 24 字节随机 | 仅本机已配置工具 | 只换本机 Key |
| 局域网 Key | 同 0600 文件独立字段 | 同网络其他设备 | 只换局域网 Key |
| EAC 签名密钥 | 明文不落地,AES-256-GCM 密封 | 600 s 窗口内签名流量 | 网关轮换SIGNING_SECRETS |
| GitHub 用户令牌 | users.json0600,AES-256-GCM 加密 | 网关侧 star 复查身份 | 删users.json全体吊销 |
本章结论:一把钥匙失守,只换那一把。
🛑 故障与降级:一律朝拒绝方向倒
宿主鉴权服务抛错即 503
rejectionFor在调用 connection 服务的 try 块里一捕获异常就落503 admission-error,绝不降级到更弱的结构检查。这是 docs/issue-49-desktop-trust.md 的明确决策:安检机坏了先关闸,不掀开栏杆。
回环解析出可路由地址就拒启动
resolveLoopbackBind只要发现任一非回环结果即抛错、服务不启动,宁可用量不可用。中继端口与本机监听端口被误配成同一值时,第二跳经x-ofm-relay-hop直接 508 拒绝,不会自环打满。
网关侧验收收口
worker/worker.js 里验签失败 401、模型白名单之外 403、超出 600 s 重放窗口 401、请求体超 8 MiB 413,日志只带 path/status/duration。部署与轮换预案见 worker/README.md。
本章结论:拿不准就拒,从不静默降级。
三套凭据各锁各的门,回环只接站场内的车,任何一格判不准,默认动作永远是把门关上。
【免费下载链接】dsh-our-free-model在 dsh 里装上这个插件即可,无需登录、注册或填 API Key,就能使用包括 DeepSeek V4.1 Flash、Kimi K3 在内的前沿模型——完全免费,不限量。 All you do is install this plugin in dsh: no login, no sign-up, no API key — the frontier models are just there, DeepSeek V4.1 Flash and Kimi K3 among them. Completely free, with no usage cap.项目地址: https://gitcode.com/gh_mirrors/ds/dsh-our-free-model
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考