Skip to content

feat(vpc): 支持国内版企业 VPC 专属域(QD_CN_VPC_ENDPOINT) - #150

Merged
shuishuipingan merged 2 commits into
shuishuipingan:mainfrom
zjzhang-cn:main
Nov 10, 2026
Merged

shuishuipingan merged 2 commits into
shuishuipingan:mainfrom
zjzhang-cn:main

Conversation

@zjzhang-cn

Copy link
Copy Markdown
Contributor

背景

Qoder CN 企业 VPC 版的服务入口不是公网 openapi.qoder.com.cn / gateway.qoder.com.cn,而是企业实例专属域。当前网关无法配置这类入口。

本 PR 新增 QD_CN_VPC_ENDPOINT,只需提供实例名或专属域,网关会按官方 CLI 的固定映射推导三个端点。

用法

export QD_CN_VPC_ENDPOINT=acme
./start-qoder-proxy.sh

也接受完整域名(大小写不敏感):

acme.vpc.qoder.com.cn
acme-openapi.vpc.qoder.com.cn
acme-gateway.vpc.qoder.com.cn

推导结果:

用途 地址
登录 / 官网 https://acme.vpc.qoder.com.cn
OpenAPI https://acme-openapi.vpc.qoder.com.cn
推理网关 https://acme-gateway.vpc.qoder.com.cn

行为

  • 仅对 CN 生效,INTL 仍走公网 api3.qoder.sh
  • VPC 模式不会回退到公网 openapi / gateway
  • 非法值(端口、路径、凭据、query、fragment、空白)直接拒绝启动
  • 专属域解析到内网地址时,SSRF 校验只放行这三个推导主机
  • 本机凭证扫描同时检查 ~/.qoder-cn/.auth 和 ~/.qoder-cn/.vpc/<instance>/.auth
  • 启动日志打印 vpc 端点;本机凭证导入保留企业组织字段

附带修复

macOS/Clash 的 fake-IP DNS 会同时返回 IPv4 和 IPv4-translated IPv6(::ffff:0:c612:2d),旧逻辑会导致公网域名被误判为内网并报 requests to private/reserved address ... not allowed。本 PR 一并修复。

验证

  • 新增 tests/_test_vpc_endpoint.py:37 项检查全部通过
  • 相关既有套件通过:_test_credits_usage、_test_checkin_fallback_speed、_test_guards、_test_auth_matrix、_test_issue76_auto_realm、_test_accounts_page
  • 已用真实企业 VPC 实例完成账号探活与 /v1/chat/completions 端到端验证

文档

  • docs/configuration.md:环境变量说明
  • docs/accounts.md:企业 VPC 专属域章节
  • docker-compose.yml:示例环境变量

@zjzhang-cn zjzhang-cn closed this Nov 10, 2026
@shuishuipingan

Copy link
Copy Markdown
Owner

审查结论:该功能补齐 CN 企业 VPC 接入,值得合并。原分支全量回归 142 套件 / 3882 checks 通过,PR 三平台 CI 全绿。维护者补充审查发现并已本地修正:旧 QD_CN_OPENAPI 覆盖、持久化公网额度来源、403 跨区诊断及 HTTP 重定向可能绕过 VPC 隔离;同时补齐 DNS label 长度与空端口/query 校验、IPv6 fake-IP 回归。由于向贡献者分支推送返回 permission denied,将把原 PR 提交与维护者修正一并合入 main,确保主分支不会出现缺少隔离修正的版本。

shuishuipingan pushed a commit that referenced this pull request Nov 10, 2026
@shuishuipingan
shuishuipingan merged commit 23dd4c9 into shuishuipingan:main Nov 10, 2026
4 checks passed
@shuishuipingan

Copy link
Copy Markdown
Owner

已完成合并与 v1.9.6 Release 发布:https://github.com/shuishuipingan/qoder2api-hub/releases/tag/v1.9.6 。主分支及正式 tag 的 Ubuntu Python 3.9/3.12、Windows Python 3.12 测试全部通过,tag/source 版本一致性检查通过;Docker 冒烟已通过,双架构镜像正在发布。维护者隔离修正提交 b29401d 已随合并提交 0f8b8df 一并进入 main。

@shuishuipingan

Copy link
Copy Markdown
Owner

发布闭环已验证:v1.9.6 为 Latest 正式 Release;tag 测试运行 42831777706 三平台与版本一致性全绿;Docker 运行 42831777760 冒烟及推送全绿。已直接读取 GHCR OCI index,确认 linux/amd64、linux/arm64,以及 1.9.6 / 1.9 / latest / sha-b2ef2a4 四个标签均指向 sha256:fb1890ef56d333bfcdee1734e1ac56b7ea2013cc3e74882eb72a2cddf4890e31 。

Kepler16f pushed a commit to Kepler16f/qoder2api-hub-desktop that referenced this pull request Nov 10, 2026
 企业 VPC 专属域(QD_CN_VPC_ENDPOINT 从实例名/专属域统一推导 CN 登录/OpenAPI/推理三主机;VPC 模式隔离凭证探测、重定向限制本实例 HTTPS 端口、fake-IP DNS 混入真实私网地址仍拒绝、实例名 55 字符校验;未配置保持原行为)+ shuishuipingan#149 统计概览频闪修复(无限循环动画改静态圆点+hover)+ 赞助入口。缝合:VPC redirect 校验收进 fork 统一 UpstreamOpener.open(按请求主机附加 _VpcRedirectHandler,覆盖 chat 外全部 openapi/凭证出站,_stub 注入点不变),_opener_for_request 保 UPSTREAM_OPENER 单例,main 收 VPC 配置启动校验但保 parse_args(argv);full_price 测试夹具以本地零点为锚(now-offset 行在零点附近跑会掉进昨天,占比分母漂移,00:09 实测复现)。141 套件 3935 检查 + legacy 724 全绿
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants