Files
LinkPort/docs/connection-editor.md
T

13 KiB
Raw Blame History

连接配置页签与 URL

目标的新建、编辑弹窗提供“连接信息、TLS/SSL、连接方式、高级、账号”页签。SSH/SFTP 使用自身的加密传输,不显示 TLS/SSL 页。页签切换保留未保存字段及尚未解析的 URL;保存和测试连接使用所有页签中的当前配置。网关仍使用“网关与访问、账号”分组。

  • 连接信息:完整 URL 导入、独立 URL 参数、名称、颜色/备注、服务类型、连接方式、主机、端口、数据库和集群配置。
  • TLS/SSL:上游 TLS 与 CA 证书资产,开启时验证证书与主机名。
  • 连接方式:直接连接、引用 SSH/SOCKS5 连接资产,或直接配置 Kubernetes 资源。SSH/SOCKS5 凭据在「资产管理 → 连接资产」维护;Kubeconfig 在同页面的「文件资产」维护。
  • 高级:有实际运行支持的超时/保活、项目、环境、目标分组、MySQL/MongoDB 压缩,以及 SSH 主机指纹校验设置。
  • 账号:既有多账号编辑及凭据资产。网关只读权限仍在网关配置中维护。

连接与网关的标识各自保存。目标连接选项由引用它的网关继承,包括账号独立目标映射;网关不能直接覆盖目标的 connectionOptions。

目标连接方式的两个入口

当前入口已调整为「连接资产」和「Kubernetes 资源」:SSH/SOCKS5 统一在资产管理维护,K8s 资源可直接配置在目标,不需要代理层。「SSH 隧道/代理」页签更名为「连接方式」。旧 K8s 引用仅为兼容保留,具体见 统一资产与目标连接。

选择 Kubernetes 固定资源(包括 StatefulSet,兼容旧 K8s 引用)后,未启用 TLS 的目标不再显示主机/IP 输入,用户维护资源与服务端口即可。保存和草稿测试均允许地址为空,后端以资源名称补全协议内部地址;实际 Pod 由 Kubernetes 查询确定,不使用这个名称解析 Pod IP。已有地址保留,切回直连后可继续编辑。启用 TLS(或 HTTPS)时显示「证书校验域名」并要求填写匹配证书的域名,不取消证书校验。

新建目标服务时,可直接在默认打开的「连接信息」页设置连接方式,无需先保存目标或切换页签。「连接方式」页使用同一组件和当前草稿,两处选择与字段一致,测试和保存也使用同一配置。引用连接资产使用 outboundId;直接配置 Kubernetes 资源使用内联 outbound 和 kubeConfigAssetId,不同时提交 outboundId,也不自动生成代理记录。

连接资产选择器列出全部可用连接资产,不受目标或工作区的项目、环境筛选影响,无需勾选展开范围。切换页签或修改目标归属不会清空已有引用;已选项显示类型和环境。SSH/SOCKS5 在「资产管理 → 连接资产」创建,也可直接连接;已有引用不在列表中时明确显示不可用,不静默退回直连。旧 K8s 引用继续可选、可编辑,但 UI 不再新建 K8s 连接资产。

MongoDB 使用 Kubernetes 固定资源时,部署模式须选择「单节点」,不启用副本集自动发现,也不会自动识别主节点;这不要求真实 MongoDB 是独立实例。本次不批量迁移既有资产或引用,兼容与本轮验证边界见 统一资产与目标连接。

独立 URL 参数与提交一致性

完整 URL 下方提供独立“URL 参数”输入区,示例为 MySQL charset=utf8mb4&tls=true、PostgreSQL application_name=serviceport&sslmode=verify-full。参数区使用与完整 URL 一致的协议白名单,把值规范化到已有字段及 connectionOptions,不保存任意驱动参数字符串,也不透传未支持选项。

  • 点击“应用参数”后同步表单;测试和保存也会先应用待处理输入。显式参数覆盖对应字段,缺省的数据库、TLS、认证来源、压缩或集群参数保持表单当前值;删除 charset / application_name 则恢复协议默认值。参数应用后可继续在其他页签修改字段,回读文本由当前结构化字段生成。
  • 重复参数(包含大小写变体)、冲突同义参数、非法编码和未支持项统一报错;解析失败不部分修改配置,不发送测试或保存请求。百分号编码用于特殊字符;允许的空值遵循协议语义,例如 MySQL database= 清除默认库、MongoDB compressors= 关闭压缩,charset= 无效。
  • 独立参数区拒绝 user / username / password;凭据只从完整 URL 导入或在账号页编辑。完整 URL 和参数区同时有待应用修改时,要求先手动应用其中一项并核对,避免两个输入源静默覆盖。
  • 完整 URL 显示“待解析 / 已填入 / 解析错误”;测试/保存前自动解析仍未应用的 URL,不再使用旧主机或旧凭据。成功解析后清空原始 URL,关闭或切换工作区前仍有未保存确认。
  • 切换协议清空协议相关参数及待处理输入,保留名称、范围、出口和颜色/备注。所有原始 URL、未处理参数和草稿只放内存,不写入浏览器偏好。

URL 支持范围

填写 URL 后可点击“解析并填入配置”,也可直接测试或保存,由统一提交准备流程解析。输入默认隐藏;只保存解析后的配置和按现有方式加密的凭据。部署模式手动选择,不提供自动识别模式;MongoDB 完整 URL 未包含 replicaSet 或 directConnection=true 时,需手动选择模式后再保存或测试。独立参数未修改集群项时保留原部署模式。

服务 URL 示例 支持的查询参数
MySQL mysql://user:password@host:3306/app?charset=utf8mb4 database、tls、ssl、charset(utf8mb4 / utf8 / latin1 / ascii)
Redis redis://:password@host:6379/3 或 rediss://user:password@host/0 database、db、tls、ssl
PostgreSQL postgresql://user:password@host/app?sslmode=verify-full database、tls、ssl、sslmode、application_name(1–63 个 UTF-8 字节)
SQL Server sqlserver://user:password@host?database=master&encrypt=true database、tls、ssl、encrypt
RabbitMQ amqps://user:password@host/%2F vhost、tls、ssl
SSH/SFTP ssh://user:password@host:22、sftp://user:password@host:22 无协议专用参数
HTTP/HTTPS https://user:password@host:443 无协议专用参数;只支持上游主机,不支持请求路径
MongoDB mongodb://user:password@host-a,host-b/app?replicaSet=rs0&authSource=admin 见 数据库集群

除 MongoDB 沿用其专用解析器外,各协议还支持 user/username、password 查询参数。PostgreSQL 同时接受 postgres,SQL Server 同时接受 mssql。协议必须匹配当前服务类型;IPv6 使用方括号,特殊字符使用百分号编码。布尔值必须为 true 或 false。PostgreSQL sslmode 仅支持 disable 和 verify-full,其他模式无法准确映射到当前 TLS 校验行为。安全协议不可再指定关闭 TLS。

没有凭据时保留已有账号;包含凭据时更新选中的账号,多账号可明确选择写入对象。编辑已保存账号时,空密码沿用现有的“保留已存密码”规则;要更换密码请提供新密码。Redis 仅密码认证使用 default 用户名。导入 SSH 密码凭据会把选中账号切换为密码认证。非 MongoDB URL 按单节点配置导入;集群及其他节点可随后在表单中配置。

MySQL 的默认数据库用于测试连接和客户端未指定数据库的新连接;客户端指定数据库优先。Redis 在认证成功后发送 SELECT,服务端拒绝时连接失败,空值/0 保持默认库;Redis Cluster 仅支持 0。PostgreSQL、SQL Server 继续使用现有 authSource 字段保存默认库;RabbitMQ 的 vhost 用于连接测试,网关客户端仍自行指定 vhost。

MySQL charset 映射为上游握手的 utf8mb4_general_ci / utf8_general_ci / latin1_swedish_ci / ascii_general_ci;空设置沿用原来的 utf8mb4。PostgreSQL application_name 进入上游启动参数,缺省为 serviceport。客户端后续会话语句仍可能修改这些设置,它们不是权限策略。

高级选项能力矩阵

所有数值单位为秒,仅作用于当前目标;没有虚构的全局选项来源。没有实际支持的控件明确禁用,后端同样拒绝不适用于该协议的非默认值。

配置字段 支持范围 边界与实际语义
connectTimeoutSeconds 全部目标协议及出口 0–120;0 沿用默认。设置直连、SOCKS5、SSH 转发及 K8s 建链上下文期限;默认普通拨号 5 秒、K8s 30 秒。MySQL/MongoDB 上游握手及 PostgreSQL 连接配置也使用此覆盖值;其他协议认证阶段保留原有限制。不是整个会话总时限,也不延长外层测试接口或调用方更短的期限。
queryTimeoutSeconds 仅 PostgreSQL 0–86400;非零作为新上游会话 statement_timeout(转换为毫秒)。0 不覆盖服务端默认。由 PostgreSQL 执行查询超时,客户端仍可调整;没有把原始套接字读超时冒充多协议查询超时。
idleTimeoutSeconds 仅 MongoDB 网关会话 0–86400;0 关闭。在认证后等待下一条完整请求时设置下游读期限,收到请求后立即清除,不中断正在执行的查询。不是连接池回收,也不是目标测试的空闲设置。
keepAliveSeconds 全部目标协议的直连 / SOCKS5 / SSH 底层 TCP 缺省/null 使用 Go / 系统默认,0 禁用,1–3600 为覆盖值;“使用默认”会明确保存为 null,不保留之前的覆盖。Kubernetes port-forward 不支持,必须使用默认。不是数据库心跳、SSH 应用层探测或会话有效性保证。
persistent 单节点 MySQL/MongoDB/PostgreSQL/Redis 的备用会话,或 SSH/K8s 共享隧道 布尔值,默认 false。关联运行网关时无客户端也预建、心跳及重连;会话借出后不回收,停服释放。明确认证/身份拒绝暂停重试。集群不预认证,原 K8s 固定资源限制保持。详见 persistent-targets.md。

旧配置省略 connectionOptions 时不改变连接行为。高级页清空数值恢复默认语义;改变协议会清空不兼容的参数。新值仅影响随后建立的连接,仍遵守修改目标前停止引用网关的规则。

连接标识与测试反馈

  • 目标和网关各有 color(空或六位十六进制色)、remark(不含 NUL、最多 2000 个 UTF-8 字节;UI 限制为 600 个字符)及 showRemark。提供预设色、自定义选色和清除;旧配置缺省为空且不显示备注。
  • 名称旁显示颜色点,目标卡片、网关桌面/手机列表、资源树和最近访问按开关展示备注。搜索只显示名称及颜色,不检索备注;连接色不替代运行状态色。文件资产备注继续使用原有字段,不与目标/网关混用。备注不应填写凭据。
  • 编辑器底部保留草稿测试账号选择和加载状态,完成后内联显示成功/失败、协议、TLS 和耗时;仍可打开完整结果。修改配置、账号或待处理 URL/参数后标记“需重新测试”。关闭编辑器后的迟到结果不会回填到其他编辑器。
  • “复制脱敏诊断”仅包含协议、成功标志、耗时、TLS、是否过期及草稿范围;不复制名称、目标地址、账号、原始错误、服务器自由文本、URL、密码、私钥或资产正文。完整结果仍走原有弹窗,不写入偏好。

兼容和验证

沿用 MySQL/Redis 的 database,新增目标的可选 connectionOptions 及目标/网关的标识字段。通过已有加密配置、配置历史、备份/恢复和多端同步保存,无 SQLite 表结构迁移。网关运行快照继承关联目标选项,但网关记录只保存自身标识与目标引用,不复制上游配置;目标标识不会覆盖网关标识。

结构化 PATCH 仍拒绝未知字段与普通字段的 null;新增可空指针选项允许 keepAliveSeconds:null 恢复默认,其他字段的空值规则没有放开。使用新字段前应升级参与同步的所有客户端,旧版本不能保证保留其不认识的配置字段。

2026-09-20 实测:Go 1.25.0 全部后端测试及 vet 通过,前端全量类型检查通过,7 项前端纯逻辑测试函数在单进程执行通过。新增 fixture 验证 MySQL 握手字符集字节、PostgreSQL 启动参数、MongoDB 空闲关闭但不中断执行中请求;API 与 store 测试验证草稿、保存回读、清除保活、元数据隔离、加密备份恢复和同步快照替换。上述协议验证均为本地 fixture,不是实际数据库服务器验收。

已补充浏览器用例,但当前 Vite/esbuild 与 Playwright worker 均遇到 spawn EPERM,生产构建、全套浏览器执行和截图尚未完成,也没有使用旧二进制替代。完整结果见 变更原因 与 工作区交互。