Quellcode durchsuchen

fix: Change DNS for MacOS Tun Mode

#568
MystiPanda vor 1 Jahr
Ursprung
Commit
7c5ce756f9

+ 32 - 0
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");

+ 5 - 0
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

+ 5 - 0
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