mirror of
https://github.com/Sagit-chu/flvx.git
synced 2026-10-13 20:46:38 +08:00
fix: permission checks for speedId and inPort + multi-node IP constraints (#261)
* feat: restrict user permissions and multi-node IP constraints - Non-admin users cannot set speedId or inPort on forward create/update - Multi-entrance tunnels disable custom listen IP for forwards - Multi-exit tunnels disable custom connect IP - Multi-node hop chains disable custom connect IP per hop - Remove tunnel-first-IP fallback in forward ingress resolution - Add contract tests for non-admin permission restrictions Entire-Checkpoint: 133693290660 * fix: allow non-admin users to submit null speedId and zero inPort - Backend: Check speedId is not nil before rejecting non-admin requests - Backend: Only reject inPort if value > 0 for non-admin users - Frontend: Only include speedId and inPort in payload for admin users - Tests: Add contract tests for null speedId and zero inPort cases
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -0,0 +1,17 @@
|
||||
转发编辑保存报错create service 3_1_0_tcp failed: listen tcp4 13.228.170.187:16765: bind: cannot assign requested address
|
||||
引发条件:当编辑选择入口IP原来是默认地址,选择成和默认地址一样的地址的时候报错
|
||||
|
||||
|
||||
---
|
||||
|
||||
保持“只要用户选了IP就一定显式绑定”,如果选择的IP后发现端口占用,检测是否是当前转发占用的,如果是那就释放掉,避免原来是默认监听::所有地址后永远无法切换
|
||||
|
||||
---
|
||||
|
||||
按计划实现
|
||||
|
||||
---
|
||||
|
||||
节点 test-sg 下发失败: create service 3_1_0_tcp failed: listen tcp4 13.228.170.187:56025: bind: cannot assign requested address
|
||||
|
||||
还是不行啊,由默认入口IP创建的转发,然后编辑选择了唯一的一个IP后报错了
|
||||
@@ -0,0 +1,23 @@
|
||||
你这个新报错我确认了:这次**不是端口占用问题**,是 **IP 本机不可绑定** 问题。
|
||||
|
||||
- 报错是 `bind: cannot assign requested address`,含义是节点机器网卡上没有 `13.228.170.187` 这个本地地址;释放旧服务也不会解决。
|
||||
- 你说“唯一一个IP可选”,很可能来自前端当前候选逻辑把 `serverIp/serverIpV4/serverIpV6` 当成监听候选(`vite-frontend/src/pages/forward.tsx:612` 一带),但这些字段在 NAT/云环境下常是“对外地址”,不一定是本机可 bind 地址。
|
||||
- 我之前加的自占用释放逻辑会在冲突时尝试删旧服务再加新服务,但对 `cannot assign requested address` 这种错误会一直失败(因为 IP 本身不可绑定)。
|
||||
|
||||
我建议下一步这样改(这次是关键):
|
||||
|
||||
- 后端只把 `address already in use` 走“自占用释放重绑”流程;`cannot assign requested address` 不走该流程。
|
||||
位置:`go-backend/internal/http/handler/control_plane.go`
|
||||
- 前端监听 IP 下拉改为“可绑定地址优先”:优先 `extraIPs` + 明确配置的监听地址,**不再默认把 `serverIp*` 作为可绑定监听IP**。
|
||||
位置:`vite-frontend/src/pages/forward.tsx`
|
||||
- 后端增加快速校验并返回更明确提示:
|
||||
`监听IP不是节点本机地址,请在节点 extraIPs 配置可绑定IP后再选择`。
|
||||
位置:`go-backend/internal/http/handler/control_plane.go` + repo 查询辅助。
|
||||
- 你的临时可用绕过:到节点配置里把真实网卡 IP 填到 `extraIPs`,然后在编辑转发时选该 IP。
|
||||
|
||||
一个需要你拍板的点(推荐第1个):
|
||||
|
||||
1. **推荐**:前端不再展示 `serverIp/serverIpV4/serverIpV6` 为监听IP候选,只展示 `extraIPs`(和明确监听地址)。
|
||||
2. 继续展示 `serverIp*`,但加“可能不可绑定”标签和失败提示。
|
||||
|
||||
你回我 `1` 或 `2`,我就按这个继续落地。
|
||||
Reference in New Issue
Block a user