refactor: restructure DNS setting logic

This commit is contained in:
wonfen
2025-03-08 11:25:00 +08:00
parent eddcf209c1
commit e27a32395a
10 changed files with 404 additions and 69 deletions

View File

@@ -38,56 +38,7 @@ impl IClashTemp {
tun.insert("strict-route".into(), false.into());
tun.insert("auto-detect-interface".into(), true.into());
tun.insert("dns-hijack".into(), vec!["any:53"].into());
// 添加默认的DNS配置
let mut dns = Mapping::new();
dns.insert("enable".into(), true.into());
dns.insert("listen".into(), ":53".into());
dns.insert("enhanced-mode".into(), "fake-ip".into());
dns.insert("fake-ip-range".into(), "198.18.0.1/16".into());
dns.insert("fake-ip-filter-mode".into(), "blacklist".into());
dns.insert("prefer-h3".into(), false.into());
dns.insert("respect-rules".into(), false.into());
dns.insert("use-hosts".into(), false.into());
dns.insert("use-system-hosts".into(), false.into());
// 添加fake-ip-filter
dns.insert("fake-ip-filter".into(), vec![
"*.lan", "*.local", "*.arpa", "time.*.com", "ntp.*.com", "time.*.com",
"+.market.xiaomi.com", "localhost.ptlogin2.qq.com", "*.msftncsi.com", "www.msftconnecttest.com"
].into());
// 添加nameserver相关配置
dns.insert("default-nameserver".into(), vec!["223.6.6.6", "8.8.8.8"].into());
dns.insert("nameserver".into(), vec![
"8.8.8.8", "https://doh.pub/dns-query", "https://dns.alidns.com/dns-query"
].into());
// 添加fallback配置
dns.insert("fallback".into(), vec![
"https://dns.alidns.com/dns-query", "https://dns.google/dns-query", "https://cloudflare-dns.com/dns-query"
].into());
// 添加proxy-server-nameserver
dns.insert("proxy-server-nameserver".into(), vec![
"https://doh.pub/dns-query", "https://dns.alidns.com/dns-query"
].into());
// 添加direct-nameserver
dns.insert("direct-nameserver".into(), Vec::<String>::new().into());
dns.insert("direct-nameserver-follow-policy".into(), false.into());
// 添加nameserver-policy (空对象)
dns.insert("nameserver-policy".into(), Mapping::new().into());
// 添加fallback-filter
let mut fallback_filter = Mapping::new();
fallback_filter.insert("geoip".into(), true.into());
fallback_filter.insert("geoip-code".into(), "CN".into());
fallback_filter.insert("ipcidr".into(), vec!["240.0.0.0/4", "0.0.0.0/32"].into());
fallback_filter.insert("domain".into(), vec!["+.google.com", "+.facebook.com", "+.youtube.com"].into());
dns.insert("fallback-filter".into(), fallback_filter.into());
#[cfg(not(target_os = "windows"))]
map.insert("redir-port".into(), 7895.into());
#[cfg(target_os = "linux")]
@@ -104,7 +55,6 @@ impl IClashTemp {
cors_map.insert("allow-origins".into(), vec!["*"].into());
map.insert("secret".into(), "".into());
map.insert("tun".into(), tun.into());
map.insert("dns".into(), dns.into());
map.insert("external-controller-cors".into(), cors_map.into());
map.insert("unified-delay".into(), true.into());
Self(map)

View File

@@ -70,6 +70,9 @@ pub struct IVerge {
/// enable proxy guard
pub enable_proxy_guard: Option<bool>,
/// enable dns settings - this controls whether dns_config.yaml is applied
pub enable_dns_settings: Option<bool>,
/// always use default bypass
pub use_default_bypass: Option<bool>,
@@ -287,6 +290,7 @@ impl IVerge {
enable_tray_speed: Some(true),
enable_global_hotkey: Some(true),
enable_lite_mode: Some(false),
enable_dns_settings: Some(true),
..Self::default()
}
}
@@ -369,6 +373,7 @@ impl IVerge {
patch!(webdav_password);
patch!(enable_tray_speed);
patch!(enable_lite_mode);
patch!(enable_dns_settings);
}
/// 在初始化前尝试拿到单例端口的值
@@ -458,6 +463,7 @@ pub struct IVergeResponse {
pub webdav_password: Option<String>,
pub enable_tray_speed: Option<bool>,
pub enable_lite_mode: Option<bool>,
pub enable_dns_settings: Option<bool>,
}
impl From<IVerge> for IVergeResponse {
@@ -521,6 +527,7 @@ impl From<IVerge> for IVergeResponse {
webdav_password: verge.webdav_password,
enable_tray_speed: verge.enable_tray_speed,
enable_lite_mode: verge.enable_lite_mode,
enable_dns_settings: verge.enable_dns_settings,
}
}
}