[BUG] Global Merge ipv6: false is overridden by the Settings IPv6 toggle
问题描述 / Describe the bug
Description
When a profile uses Global Extend Merge to explicitly disable IPv6:
ipv6: false
dns:
ipv6: false
Clash Verge Rev may still generate a final runtime config with top-level ipv6: true if Settings -> Clash Settings -> IPv6 is enabled.
This is confusing because the Merge editor appears to save the override successfully, but the generated/current config and mihomo runtime state may still use the UI-level IPv6 value. In my case this caused TUN/direct connections to domestic sites to try IPv6 addresses and fail with no route to host.
Observed layering before turning off the app-level IPv6 setting:
Global Extend Merge: ipv6=false, dns.ipv6=false
Remote profile cache: ipv6=false
Generated clash-verge.yaml: ipv6=true, dns.ipv6=false
Runtime /configs: ipv6=true
After turning off Settings -> Clash Settings -> IPv6, the generated config and runtime state became correct:
runtime mode="rule"
runtime ipv6=false
runtime tun.enable=true
Expected behavior
One of these should happen:
- Explicit profile/Merge config should take priority over the UI IPv6 toggle; or
- The UI should clearly show that the Settings IPv6 toggle has higher priority and will override Merge; or
- If the UI setting owns the final value, the Merge editor should warn/block conflicting fields such as top-level
ipv6.
Related: #7864 seems to address preserving explicitly disabled DNS IPv6 in TUN mode. This issue is about the top-level app-owned IPv6 setting overriding explicit Merge config.
软件版本 / CVR Version
Clash Verge Rev v2.5.2
复现步骤 / To Reproduce
- Use a remote profile in rule mode with TUN enabled.
- Keep Settings -> Clash Settings -> IPv6 enabled.
- Open the profile's Global Extend Merge editor.
- Add and save:
ipv6: false
dns:
ipv6: false
- Reload/reactivate the profile.
- Open Current Config or query mihomo /configs.
- Observe that top-level
ipv6is still generated astrue, despite Merge explicitly settingipv6: false. - Turn off Settings -> Clash Settings -> IPv6 and reload. The generated/runtime config then becomes
ipv6: false.
操作系统 / OS
- Windows
- Linux
- MacOS
操作系统版本 / OS Version
macOS 26.6.2 (Build 25G83)
日志(勿上传日志文件,请粘贴日志内容) / Log (Do not upload the log file, paste the log content directly)
Relevant sanitized output:
Global Extend Merge: ipv6=false, dns.ipv6=false
Remote profile cache: ipv6=false
Generated clash-verge.yaml: ipv6=true, dns.ipv6=false
Runtime /configs: mode="rule", ipv6=true, tun.enable=true
Example runtime warning before disabling app-level IPv6:
[TCP] dial 国内网站 (match GeoIP/cn) [fdfe:dcba:9876::1]:53295 --> [240e:f7:e010:1108:3::8]:443 error: dial tcp [240e:f7:e010:1108:3::8]:443: connect: no route to host
After disabling Settings -> Clash Settings -> IPv6:
runtime mode="rule"
runtime ipv6=false
runtime tun.enable=true
Source: clash-verge-rev/clash-verge-rev