Skip to content

TinyChat v2.0.161 支持无 Key 上游 / 内网本地模型开关,出站代理补全 SOCKS

Choose a tag to compare

@TinyNano TinyNano released this 10 Oct 05:00
· 5 commits to main since this release

[2.0.161]

补上 2.0.160「API Key 可留空」未能真正打通本地 Ollama 的缺口:Key 那关过了,但发请求前的 SSRF 防线仍会挡住本地地址(127.0.0.1、192.168.x.x)与非白名单端口(Ollama 默认 11434)。现在提供后台开关。

新增

  • 后台「对话设置 → 允许供应商指向内网 / 本地地址」开关(默认关闭):开启后供应商 Base URL 可指向内网 / 本地地址与任意端口,用于对接本地 Ollama / LM Studio(http://127.0.0.1:11434)。关闭时行为与之前完全一致 —— 只允许公网地址且端口限 80 / 443 / 8080 / 8443。默认关闭,公网多租户部署无需改动、安全性不受影响。
    • 开关与出站代理同一手法:值在 tc_with_db 里随库带进全局(SSRF 判定在事务之外、发请求前执行),另有环境变量 TC_ALLOW_PRIVATE_UPSTREAM=1 作为部署级来源(两者任一为真即放行)。
    • 演示管理员不可修改该设置(回滚前已可用于探测内网),与 SMTP / 内容安全同一口径拒绝。
    • 开启后仍守底线:带 user:pass@ 的 URL、非 http(s) 协议、空主机照旧拒绝。

测试

  • tests/private-upstream.php(新增,已接入 CI):默认关闭时本地 / 内网 / 非白名单端口被拒、公网地址照常放行;开启后放行本地与任意端口,但仍拒绝带凭据 URL 与非 http(s) 协议;环境变量来源(子进程验证);设置归一化只认布尔真值、缺省为假。
  • tests/e2e.sh:新增开关默认关闭 / 可开启 / 可回读 / 可关回四项,以及「演示管理员不可改内网访问设置」一项。

文档

  • README / 上一版本的更新说明中「对接本地 Ollama」一句此前过度承诺(只去掉 Key 校验,SSRF 防线仍会挡),现已补上「需在后台开启内网放行」的前提。

[2.0.160]

两条来自使用的诉求:接入本地 Ollama / LM Studio 这类不需要 API Key 的上游时,保存供应商被「API Key 不能为空」挡住;以及出站代理想要 SOCKS 与更完整的代理类型支持。

新增

  • API Key 可留空(无鉴权上游):新建 / 编辑供应商时不再强制填写 Key。留空即表示上游不需要鉴权,请求不会发送 Authorization / x-api-key 头(而不是发一个空的 Bearer ,后者在部分网关会被判成「带了无效凭据」而拒绝)。适合本地 Ollama、LM Studio、或自建的无鉴权网关;填了 Key 的行为完全不变。注意:这只是去掉保存时的 Key 校验,要让供应商地址真正指向本机还需开启下方 2.0.161 的内网访问开关。
  • 出站代理支持完整类型:此前只显式支持 http / https / socks5 / socks5h,现在补上 socks4 与 socks4a,并把 scheme 到 curl 代理类型的映射收口到一个函数(tc_curl_apply_proxy),按 scheme 设置 CURLOPT_PROXYTYPE(socks4a / socks5h 由代理解析域名)。后台「对话设置 → 出站代理」的输入校验与提示文案同步更新。

变更

  • 出站代理覆盖面收敛到「全部出站请求」:代理此前只在统一助手 tc_http_request 里生效,另有 9 处直接 curl_init 的旁路(在线更新检查与下载、在线浏览器抓取与子资源预热、搜索结果并行抓页、SearXNG 探测、图片留存下载、图片代理、视频代理)不走代理 —— 表现为「配了代理,但某些功能仍直连、在国内网络卡死」。现在这些路径统一调用同一个 tc_curl_apply_proxy,配了代理就全都走代理。
  • 获取模型列表 / 测试连通性 / 网页 AI / IM AI 的空 Key 处理:这些路径此前对空 Key 直接拒绝(请先填写 API Key 等),现在允许空 Key 直连(地址仍必填),只在带了掩码占位符 •• 时才清空后按无 Key 处理。生成的图片 / 视频请求同理:空 Key 不再发送 Authorization 头。

测试

  • tests/outbound-proxy.php(新增):scheme 到 curl 代理类型的映射(含大小写不敏感、未知 scheme 返回 null、remoteDns 标记)、端到端断言实际写入的 CURLOPT_PROXY / CURLOPT_PROXYTYPE、非法代理串(ftp / file / javascript: / socks6)被拒、未配置时不写任何代理选项。已接入 CI。
  • tests/e2e.sh:新增「无 Key 供应商可保存」「hasKey 为假」「可正常对话」三项;原先「缺 Key 被拒」的断言改为「缺 Key 直连无鉴权上游成功」。