diff --git a/src-tauri/src/core/core.rs b/src-tauri/src/core/core.rs index cf0cd843..0e7fa6bc 100644 --- a/src-tauri/src/core/core.rs +++ b/src-tauri/src/core/core.rs @@ -105,6 +105,22 @@ impl CoreManager { sleep(Duration::from_millis(500)).await; } + #[cfg(target_os = "macos")] + { + let enable_tun = Config::verge().latest().enable_tun_mode.clone(); + let enable_tun = enable_tun.unwrap_or(false); + log::debug!(target: "app", "try to set system dns"); + if enable_tun { + let script = include_str!("./script/set_dns.sh"); + match (|| async { Command::new("bash").args([script]).output() })().await { + Ok(_) => return Ok(()), + Err(err) => { + log::error!(target: "app", "{err}"); + } + } + } + } + #[cfg(target_os = "windows")] { use super::win_service; @@ -247,6 +263,22 @@ impl CoreManager { return Ok(()); } + #[cfg(target_os = "macos")] + { + let enable_tun = Config::verge().latest().enable_tun_mode.clone(); + let enable_tun = enable_tun.unwrap_or(false); + log::debug!(target: "app", "try to unset system dns"); + if enable_tun { + let script = include_str!("./script/unset_dns.sh"); + match (|| async { Command::new("bash").args([script]).output() })().await { + Ok(_) => return Ok(()), + Err(err) => { + log::error!(target: "app", "{err}"); + } + } + } + } + let mut sidecar = self.sidecar.lock(); if let Some(child) = sidecar.take() { log::debug!(target: "app", "stop the core by sidecar"); diff --git a/src-tauri/src/core/script/set_dns.sh b/src-tauri/src/core/script/set_dns.sh new file mode 100644 index 00000000..56ddbe93 --- /dev/null +++ b/src-tauri/src/core/script/set_dns.sh @@ -0,0 +1,5 @@ +nic=$(route -n get default | grep "interface" | awk '{print $2}') + +hardware_port=$(networksetup -listallhardwareports | awk -v dev="$nic" '/Hardware Port/{port=$3} /Device:/{if ($2 == dev) {print port; exit}}') + +networksetup -setdnsservers $hardware_port 192.18.0.2 \ No newline at end of file diff --git a/src-tauri/src/core/script/unset_dns.sh b/src-tauri/src/core/script/unset_dns.sh new file mode 100644 index 00000000..e06ea937 --- /dev/null +++ b/src-tauri/src/core/script/unset_dns.sh @@ -0,0 +1,5 @@ +nic=$(route -n get default | grep "interface" | awk '{print $2}') + +hardware_port=$(networksetup -listallhardwareports | awk -v dev="$nic" '/Hardware Port/{port=$3} /Device:/{if ($2 == dev) {print port; exit}}') + +networksetup -setdnsservers $hardware_port Empty \ No newline at end of file