From eddcf209c18e8f44fd8b70b86018a879b7ed15c1 Mon Sep 17 00:00:00 2001 From: wonfen Date: Sat, 8 Mar 2025 03:33:26 +0800 Subject: [PATCH] refactor: refine DNS handling to follow config and merge settings --- src-tauri/src/enhance/tun.rs | 60 ++++++++++++------------------------ 1 file changed, 19 insertions(+), 41 deletions(-) diff --git a/src-tauri/src/enhance/tun.rs b/src-tauri/src/enhance/tun.rs index da14e74f..0af2e885 100644 --- a/src-tauri/src/enhance/tun.rs +++ b/src-tauri/src/enhance/tun.rs @@ -24,18 +24,20 @@ pub async fn use_tun(mut config: Mapping, enable: bool) -> Mapping { let mut tun_val = tun_val.map_or(Mapping::new(), |val| { val.as_mapping().cloned().unwrap_or(Mapping::new()) }); - let dns_key = Value::from("dns"); - let dns_val = config.get(&dns_key); - let mut dns_val = dns_val.map_or(Mapping::new(), |val| { - val.as_mapping().cloned().unwrap_or(Mapping::new()) - }); - let ipv6_key = Value::from("ipv6"); - let ipv6_val = config - .get(&ipv6_key) - .and_then(|v| v.as_bool()) - .unwrap_or(false); - + if enable { + // 读取DNS配置 + let dns_key = Value::from("dns"); + let dns_val = config.get(&dns_key); + let mut dns_val = dns_val.map_or(Mapping::new(), |val| { + val.as_mapping().cloned().unwrap_or(Mapping::new()) + }); + let ipv6_key = Value::from("ipv6"); + let ipv6_val = config + .get(&ipv6_key) + .and_then(|v| v.as_bool()) + .unwrap_or(false); + // 检查现有的 enhanced-mode 设置 let current_mode = dns_val .get(&Value::from("enhanced-mode")) @@ -61,42 +63,18 @@ pub async fn use_tun(mut config: Mapping, enable: bool) -> Mapping { crate::utils::resolve::set_public_dns("223.6.6.6".to_string()).await; } } + + // 当TUN启用时,将修改后的DNS配置写回 + revise!(config, "dns", dns_val); } else { - revise!( - dns_val, - "enable", - dns_val - .get("enable") - .and_then(|v| v.as_bool()) - .unwrap_or(true) - ); - - revise!(dns_val, "ipv6", ipv6_val); - - revise!( - dns_val, - "enhanced-mode", - dns_val - .get("enhanced-mode") - .and_then(|v| v.as_str()) - .unwrap_or("redir-host") - ); - - revise!( - dns_val, - "fake-ip-range", - dns_val - .get("fake-ip-range") - .and_then(|v| v.as_str()) - .unwrap_or("198.18.0.1/16") - ); - + // TUN未启用时,仅恢复系统DNS,不修改配置文件中的DNS设置 #[cfg(target_os = "macos")] crate::utils::resolve::restore_public_dns().await; } + // 更新TUN配置 revise!(tun_val, "enable", enable); revise!(config, "tun", tun_val); - revise!(config, "dns", dns_val); + config }