明白了!更新设计: --- ## 最终设计方案 ### 核心需求 | 场景 | 配置位置 | 选择内容 | |------|----------|----------| | 转发 | 转发创建/编辑 | 入口监听IP(从入口节点IP列表选择) | | 隧道 | 隧道配置 | 出口节点连接IP(从出口节点IP列表选择) | --- ### 数据模型变更(3处) ``` Node.ExtraIPs sql.NullString `gorm:"column:extra_ips;type:text"` // 逗号分隔 ForwardPort.InIP sql.NullString `gorm:"column:in_ip;type:text"` // 指定监听IP ChainTunnel.ConnectIP sql.NullString `gorm:"column:connect_ip;type:text"` // 出口连接IP ``` --- ### 改动清单 #### 后端 (约200行) | 文件 | 改动 | |------|------| | `model/model.go` | Node/ForwardPort/ChainTunnel 增加3个字段 | | `repository_mutations.go` | CreateNode/UpdateNode 处理 extraIPs 参数 | | `repository_control.go` | GetNodeRecord/ListNodeAllIPs 辅助函数 | | `repository.go` | resolveForwardIngress 使用 forward_port.in_ip | | `handler/mutations.go` | selectTunnelDialHost 优先使用 connectIP | #### 前端 (约150行) | 页面 | 改动 | |------|------| | 节点编辑 | 高级配置增加"额外IP" Input(逗号分隔) | | 转发编辑 | 入口端口旁增加"监听IP" Select(从入口节点IP选择) | | 隧道配置 | 出口节点行增加"连接IP" Select(从出口节点IP选择) | --- ### UI 示意 **节点编辑 - 高级配置** ``` 额外IP地址 ┌──────────────────────────────────────────┐ │ 192.168.1.100, 10.0.0.5 │ └──────────────────────────────────────────┘ 用于多IP服务器,逗号分隔 ``` **转发创建** ``` 入口端口: [ 8080 ] 监听IP: [ 192.168.1.100 ▼ ] ├─ 203.0.113.10 (默认) ├─ 192.168.1.100 └─ 10.0.0.5 ``` **隧道配置 - 出口节点** ``` 出口节点: [ node-1 ▼ ] 端口: [ 8443 ] 连接IP: [ 10.0.0.5 ▼ ] ├─ 203.0.113.10 (默认) └─ 10.0.0.5 ``` --- 这个方案简约清晰,是否可以开始实现?