Skip to content

修复:systemProxy 迁移冻结 FakeIP-off 切 TUN 无感携带#261

Merged
Sway-Chan merged 1 commit into
dododook:mainfrom
Sway-Chan:feat/fakeip-tun-carryover
Jul 3, 2026
Merged

修复:systemProxy 迁移冻结 FakeIP-off 切 TUN 无感携带#261
Sway-Chan merged 1 commit into
dododook:mainfrom
Sway-Chan:feat/fakeip-tun-carryover

Conversation

@Sway-Chan

Copy link
Copy Markdown
Collaborator

问题

存量 systemProxy 用户在 FakeIP 开关一次性迁移时被冻结 enableFakeIp:false(systemProxy 无 TUN、FakeIP 无意义)。后续切换到 TUN 模式时,flag 不随模式翻转(迁移一次性 + usesFakeIp 纯看开关)→ 无感落入 TUN + FakeIP-off:节点收真实 IP、部分严格机场拒连,且 sing-box 1.14 已移除 sniff_override_destination、客户端无法缓解。

修复

核心难点:「迁移冻结的 false」与「用户在 TUN 下主动关的 false」落盘后字节相同、无法 post-hoc 区分。方案用三态快照 + 意图即撤销把误伤压到理论最小:

  • 新增 dnsConfig.fakeIpTunAutoEnable(三态);ConfigManager.migrateFakeIpTunPending 在升级时刻评估一次——仅 systemProxy + enableFakeIp:false + migrated 判为迁移冻结(待纠正),其余一律否决(含 tun/manual+false 的用户主动态、新装)。
  • shared/fakeip-tun-entry.applyFakeIpTunEntry 纯函数在切模式入口(proxy-control-card + tray-actions,proxyModeType 仅有的两个用户切换点)消费:首次进 TUN 把冻结的 FakeIP 回 true + toast / 桌面通知。
  • 用户任何一次手动改 FakeIP 同写 fakeIpTunAutoEnable:false(意图即撤销)→ 绝不误伤 TUN 下主动关 FakeIP 的用户
  • 备份导入后重 loadConfig 让迁移对导入配置即时生效;ProxyManager norm 排除迁移元数据防无谓重启。
  • 升级前历史序列不可区分的固有边界(可能误植、首次进 TUN 自动开回一次、再关即永久 false)如实接受。

验证

  • tsc main/renderer + jest 全量(2612 tests)+ eslint 全绿;config-snapshot 37 snapshots 确认新字段不进 sing-box 生成物。
  • 单测 E(迁移评估矩阵)/ F(纯函数 8 例含不变异)/ G(冻结用户端到端生命周期不复发)。
  • 待真机(不阻塞):桌面通知三平台弹出、tray 切 TUN 后核以 FakeIP-on 起核。

问题:存量 systemProxy 用户在 FakeIP 开关一次性迁移时被冻结 enableFakeIp:false(systemProxy 无 TUN、FakeIP 无意义),后续切到 TUN 模式时 flag 不随模式翻转 → 无感落入 TUN+FakeIP-off:节点收真实 IP、部分严格机场拒连,sing-box 1.14 已移除 sniff_override_destination 无替代、客户端无法缓解。

修复(三态快照,只纠正迁移冻结、绝不误伤用户主动关):
- 新增 dnsConfig.fakeIpTunAutoEnable 三态,ConfigManager.migrateFakeIpTunPending 升级时刻评估一次(仅 systemProxy+enableFakeIp:false+migrated 判为迁移冻结待纠正,其余一律否决)
- shared/fakeip-tun-entry.applyFakeIpTunEntry 纯函数在切模式入口(proxy-control-card + tray-actions 两处 proxyModeType 用户切换点)消费:首次进 TUN 回 true + toast/桌面通知
- 用户任何一次手动改 FakeIP 同写 fakeIpTunAutoEnable:false(意图即撤销,不误伤 TUN 下主动关)
- backup 导入后重 loadConfig 让迁移即时生效;ProxyManager norm 排除迁移元数据防无谓重启
- 单测 E/F/G(评估 / 纯函数 / 端到端生命周期)
@Sway-Chan Sway-Chan merged commit 28182c0 into dododook:main Jul 3, 2026
2 checks passed
@Sway-Chan Sway-Chan deleted the feat/fakeip-tun-carryover branch July 3, 2026 05:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant