Files
LinkPort/docs/target-connection-test.md
曾志威 9da95beb42
continuous-integration/drone Build is failing
feat: refine management UI, connection diagnostics and local startup
Migrate the workspace to React and Ant Design, improve account forms and responsive layouts, support outbound diagnostics and SSH fingerprint confirmation, and persist the management startup port. Preserve database migrations, remove S3 settings storage, and improve gateway audit handling.
2026-10-13 19:43:23 +08:00

52 lines
6.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 目标与网关连接测试
## 编辑页草稿测试恢复(2026-10-07)
原因:详情页可测试已保存配置,但 React 目标编辑页曾强制先保存,未调用已有草稿接口,结果也仅以 JSON 展示。
现在目标编辑页通过 `POST /api/v1/targets/test` 测试当前输入,携带 config、accountId,编辑已有目标时另带 targetId。保存与测试共用 payload 转换,留空的已保存秘密不随请求重复提交,由服务端按资源及账号 ID 解析。只校验所选账号及 Sentinel 依赖账号,不因其他未完成账号阻止测试;空名称允许使用服务端测试名称。该操作不保存目标、配置历史或网关运行配置。
SSH 草稿的 draft_host_confirmation 返回指纹时,先显示服务器地址和完整指纹,用户确认才带 hostFingerprint 重试测试接口,不自动信任或保存。集群识别仍要求保存配置。网关草稿测试不再在指定账号不可用时悄悄换成其他账号;多项可测试账号需明确选择。
编辑页与详情页共享 Diagnostics:绿色成功、红色失败、阶段与脱敏轨迹;编辑页结果自动滚动并聚焦。本地缺少账号等前置条件失败显示具体原因。
兼容影响:恢复已有 API 的前端接入,未修改后端协议、数据库格式或迁移。新增浏览器 HTTP fixtures 覆盖未保存草稿、修改地址后的再次测试、SSH 指纹确认,真实隔离管理 API 的保存流程验证已有目标测试请求携带 targetId 且省略密码。既有 `TestTargetDraft*` Go API fixture 测试通过。完整本轮结果见 testing.md;没有进行真实上游服务器验收。
## 会话阶段未知错误(2026-10-06)
目标测试包含代理及目标协议两个部分,代理握手成功不代表目标协议会话已建立。若观测到 protocol_session 失败但错误类型为 unknown/network/空,返回 target_session,界面显示“目标会话建立失败 · 无法确定”;不能仅凭会话阶段失败断言目标返回无效协议、TLS 错误或密码错误。仅明确 protocol 类型保持 target_protocol,明确认证/权限拒绝仍使用对应分类。已成功的前置阶段继续按实际轨迹显示。
本轮对用户提供的运行服务测试接口进行一次复现:SOCKS5 TCP、方法协商、认证、到目标 TCP 均成功,MySQL protocol_session 失败且 kind=unknown。当前接口没有具体驱动错误,实际 MySQL 失败根因尚未确定;没有改动目标、代理、TLS 或账号配置。分类修复使用隔离 fixture 验证,实际连接问题不能据此宣布修复。
## 改动原因
草稿测试会让连接结果与后端实际保存的数据产生偏差,尤其是账号密码、出口代理和集群设置。现在目标必须先保存,连接测试只调用已保存目标的测试接口;保存成功后目标编辑页保持打开,便于立即测试和继续调整。
## 使用方式与行为
在目标服务编辑窗口保存配置后,选择底部的测试账号并点击“测试连接”。只有一个账号时自动选中;多个账号时选择已保存账号。Redis 或 MongoDB 未配置任何账号时不显示测试账号选择器,直接按无上游认证测试。编辑器存在未保存修改、或目标尚未创建时,测试按钮不会发起网络请求,而是提示先保存。
- 使用后端保存的地址、端口、TLS/CA、认证库、集群节点、代理和所选账号。MongoDB 连接串等修改必须保存后才会参与测试。
- 账号密码、私钥或口令由服务端从已保存凭据解析;测试请求不携带草稿配置或明文凭据。
- 测试成功和失败都保留编辑页。保存成功后编辑器刷新为服务端返回的配置视图,并继续保持打开。
- 关闭连接测试结果页会清除编辑器中的本次成功/失败摘要和“实测连接阶段”,避免旧结果继续显示;再次测试会生成新结果。
- 测试不修改配置历史、不保存主机探测记录,也不修改正在使用的网关路由。测试会按现有协议实现连接并认证目标服务;外部服务可能记录连接或认证日志。
SSH/SFTP 仍核对主机身份。已有目标且地址、端口、代理未变时沿用已确认主机密钥;新目标或连接位置改变时先探测公开指纹,不提交认证凭据。用户核对并确认后,再用该指纹固定本次测试连接。此确认仅对本次测试有效,不代替保存后启动网关所需的持久指纹确认;取消可继续编辑。
目标被运行网关引用时仍可保存编辑。若 SSH/SFTP 的主机、端口或出口改变,保存接口会独立返回 `target_host_confirmation` 和候选 SHA256 指纹;用户确认后前端只重试一次,服务端再次探测一致才持久化。草稿测试阶段的 `draft_host_confirmation` 不会被当作保存确认。保存成功后只有新连接使用新目标配置,已有连接不迁移。
## API 与兼容性
目标测试使用 `POST /api/v1/targets/{id}/test?accountId=...`,只读取后端已保存的目标和账号。接口沿用登录、令牌权限和 CSRF 防护;连接失败返回脱敏错误阶段。草稿测试接口 `POST /api/v1/targets/test` 不再由目标编辑器调用,保留后端兼容性以避免影响其他客户端。
保存接口返回完整资源视图后,前端刷新目标缓存并保留当前编辑页;无 API、数据库格式或迁移变更。测试与网关列表中的已保存目标测试共用服务端连接实现。
验证见 [测试记录](testing.md)。接口协议分派使用记录型 fixture,SSH 身份确认使用本地隔离 SSH 服务;浏览器测试模拟远端结果,不表示已验证所有生产数据库版本。
## 网关草稿测试
网关新建和编辑弹窗的底部也提供“测试连接”。测试使用当前网关草稿、当前选中的网关账号及其目标映射;Redis 或 MongoDB 无客户端账号时不显示账号选择器,并使用空的上游账号选择。编辑已保存网关时,留空的密码按网关账号 ID 复用已保存凭据。测试不会保存草稿、创建网关、修改历史或启动网关。
新增 `POST /api/v1/proxies/test`,请求包含可选 `proxyId`、`gatewayAccountId` 和 `config`。服务端只在内存中合并草稿,解析目标和资产后复用已保存网关的协议测试流程;单次测试只提交所选网关账号的映射,避免未完成的其他账号阻塞当前测试。接口继续使用登录、令牌权限和 CSRF 防护,连接失败返回脱敏阶段诊断。网关列表上已有的 `POST /api/v1/proxies/{id}/test` 行为不变。