SubLaneSubLane

网络代理

为工作区内的订阅账号固定指定上游代理出口。

当订阅账号需要从指定网络出口连接服务商时,可以为它绑定代理。代理属于当前工作区,与控制成员可用账号的账号池是两种不同资源。每个账号最多绑定一个代理;不绑定时使用实例原有的网络出口。

添加代理

  1. 以工作区管理员身份打开「管理 → 网络代理」,点击「添加代理」。
  2. 输入便于识别的名称和完整地址,例如 http://proxy.example.test:8080,或 socks5://user:pass@proxy.test:1080。
  3. 保存后,列表只显示名称、协议、主机、端口和已绑定账号数,不会回显用户名或密码。

地址支持 http://、https:// 和 socks5://,必须写明主机与端口。使用认证时,用户名和密码都要填写;密码里的 @ 等保留字符应进行 URL 编码,例如 %40。地址不能带路径、查询参数或片段。每个工作区最多保存 32 个代理。

保存时只检查地址格式,不会主动连接代理。绑定账号后,用该账号的「验证连接」检查到服务商的实际链路。

批量导入

点击「批量导入代理」,每行粘贴一条。可填写完整 URL、按 HTTP 处理的 主机:端口,或用 名称 | URL 指定名称。例如:

批量导入代理示例
http://proxy-a.test:8080
备用出口 | socks5://user:pass@proxy-b.test:1080
proxy-c.test:8081

未指定名称时,以主机和端口命名;重名时自动追加序号。空行会跳过。整批导入受工作区 32 条上限约束,并在一次事务中完成。如果有一条格式错误或显式名称重名,整批都不会写入。批量导入的认证信息与单条添加一样加密保存,不会在列表回显。

测试出口与获取位置

在代理条目上点击「测试代理」。SubLane 会经该代理向 IPinfo 的公开 IP 接口发起一次有超时限制的 HTTPS 请求。成功后显示出口 IP、可获得的国家/地区、城市、耗时及检测时间。这里是出口 IP 的地理信息,不一定是代理服务器的物理位置;IP 定位也只是近似结果。只有管理员主动点击时才会检测。

点击「测试全部代理」可一键检测所有已保存的代理,同时最多执行四项检测;一条检测失败不会中断其余代理。页面会显示进度,以及连通、连接失败和其他错误的数量。每个代理都会向 IPinfo 发起一次请求,批量检测同样受公开接口的共享限额约束。

IPinfo 的公开接口有共享每日限额。查询失败或受限会与连接失败分开显示,不会修改代理绑定。更换代理地址会清除旧检测结果。能连到 IPinfo 不代表能连到订阅服务商;还需绑定账号并执行「验证连接」。

给账号绑定

  • 新账号: 先添加代理,再到「订阅账号 → 添加账号」,在「网络代理」中选好代理,然后进行浏览器授权或导入凭据。选择「默认网络出口」即不绑定。
  • 已有账号: 打开账号右上角的操作菜单,选择「网络代理」,选中目标并保存。账号卡片会显示绑定的代理名称。重新授权会沿用当前绑定。

绑定后,SubLane 服务端的 OAuth 令牌交换、凭据刷新、模型发现、受支持的额度读取和模型请求都会使用该代理。服务商登录页仍在你的浏览器中打开,不经过 SubLane 的代理。导入文件中的 proxy_url 不会生效;只能绑定管理员在工作区中添加的代理。

新请求读取账号当时的绑定。修改代理地址或绑定不会迁移正在进行的响应流,也不会重发请求;原有会话绑定的订阅账号仍保持不变。SubLane 不按请求轮换代理,代理故障时也不会自动切换到别的代理。未绑定账号沿用实例默认的出站传输;如果进程配置了代理环境变量,该默认出口可能已经使用了代理。

修改、解绑与排错

在「网络代理」中点击「编辑代理」,可更名或更换地址。编辑时将「代理地址」留空会保留原地址;更换地址后,绑定此代理的账号从后续请求开始使用新地址,旧出口检测结果也会清除。删除前,先把所有账号改绑其他代理或选回「默认网络出口」;仍有绑定账号的代理不能删除。

每条代理的测试、编辑、删除操作显示为带说明提示的图标。「删除失效代理」会先要求确认,一键删除最近 30 分钟内检测为连接失败、且没有绑定账号的代理。已绑定、未检测、或仅位置查询失败的代理不会被删除。确认时服务端会再次检查这些条件,因此实际删除数可能与确认前显示的数量不同。

代理故障使账号进入冷却时,在该账号的「调度设置」中点击「解除冷却」,再执行「验证连接」。如果账号显示「需要重新授权」,还需重新授权;仅切换代理不会更新凭据。容器部署时,代理地址里的 127.0.0.1 指向 SubLane 容器本身,应填写该进程实际可达的地址。

安全与接口

代理地址在 SQLite 中使用实例密钥加密。备份时应同时保存数据库和密钥。管理接口只允许已启用的管理员会话访问,写操作还要求同源;列表响应只返回不含认证信息的地址与最近检测结果。手动检测会向 IPinfo 提供公开的代理出口 IP,不会在后台自动查询位置。代理增删改与账号绑定按资源 ID 记录在管理审计中;整批导入和批量删除失效代理各生成一条不带单项 ID 的事件。原始地址和密码都不会写入审计。

接口用途
GET /api/proxies列出当前工作区的代理与绑定账号数。
POST /api/proxies用 {"name":"...","url":"..."} 新建。
POST /api/proxies/import用 {"text":"..."} 原子导入多行代理。
POST /api/proxies/prune删除近期连接失败且未绑定账号的代理;请求体为 {},返回 deleted_count。
POST /api/proxies/{id}/check手动测试出口 IP 与位置;请求体使用空 JSON 对象({})。
PUT /api/proxies/{id}更新名称和地址;url 为空时保留旧地址。
DELETE /api/proxies/{id}删除未绑定的代理;请求体使用空 JSON 对象({})。
PUT /api/accounts/{id}/proxy用 {"proxy_id":"..."} 绑定,或用 {"proxy_id":""} 解绑。

新建账号时,POST /api/accounts/import 和 POST /api/accounts/oauth 也接受可选的 proxy_id。地址或导入行无效返回 HTTP 400;代理不存在或不属于当前工作区返回 404;重名、达到数量上限、删除仍在使用的代理、检测期间代理地址被修改,返回 409。

自动化测试使用合成代理验证路由,包括 HTTPS CONNECT。它不能证明你的实际代理和订阅账号可用;请在部署环境中执行「验证连接」。