diff --git a/dns/override/dns_override_android.go b/dns/override/dns_override_android.go index af1d946..d3fd78e 100644 --- a/dns/override/dns_override_android.go +++ b/dns/override/dns_override_android.go @@ -2,13 +2,11 @@ package olm -import ( - "github.com/fosrl/olm/dns" -) +import "net/netip" // SetupDNSOverride is a no-op on Android // Android handles DNS through the VpnService API at the Java/Kotlin layer -func SetupDNSOverride(interfaceName string, dnsProxy *dns.DNSProxy) error { +func SetupDNSOverride(interfaceName string, proxyIp netip.Addr) error { return nil } diff --git a/dns/override/dns_override_darwin.go b/dns/override/dns_override_darwin.go index 6ccc3fb..c1c3789 100644 --- a/dns/override/dns_override_darwin.go +++ b/dns/override/dns_override_darwin.go @@ -7,7 +7,6 @@ import ( "net/netip" "github.com/fosrl/newt/logger" - "github.com/fosrl/olm/dns" platform "github.com/fosrl/olm/dns/platform" ) @@ -15,11 +14,7 @@ var configurator platform.DNSConfigurator // SetupDNSOverride configures the system DNS to use the DNS proxy on macOS // Uses scutil for DNS configuration -func SetupDNSOverride(interfaceName string, dnsProxy *dns.DNSProxy) error { - if dnsProxy == nil { - return fmt.Errorf("DNS proxy is nil") - } - +func SetupDNSOverride(interfaceName string, proxyIp netip.Addr) error { var err error configurator, err = platform.NewDarwinDNSConfigurator() if err != nil { @@ -38,7 +33,7 @@ func SetupDNSOverride(interfaceName string, dnsProxy *dns.DNSProxy) error { // Set new DNS servers to point to our proxy newDNS := []netip.Addr{ - dnsProxy.GetProxyIP(), + proxyIp, } logger.Info("Setting DNS servers to: %v", newDNS) diff --git a/dns/override/dns_override_ios.go b/dns/override/dns_override_ios.go index 109d471..6c95c71 100644 --- a/dns/override/dns_override_ios.go +++ b/dns/override/dns_override_ios.go @@ -2,12 +2,10 @@ package olm -import ( - "github.com/fosrl/olm/dns" -) +import "net/netip" // SetupDNSOverride is a no-op on iOS as DNS configuration is handled by the system -func SetupDNSOverride(interfaceName string, dnsProxy *dns.DNSProxy) error { +func SetupDNSOverride(interfaceName string, proxyIp netip.Addr) error { return nil } diff --git a/dns/override/dns_override_unix.go b/dns/override/dns_override_unix.go index c3b31e8..12cb692 100644 --- a/dns/override/dns_override_unix.go +++ b/dns/override/dns_override_unix.go @@ -7,7 +7,6 @@ import ( "net/netip" "github.com/fosrl/newt/logger" - "github.com/fosrl/olm/dns" platform "github.com/fosrl/olm/dns/platform" ) @@ -15,11 +14,7 @@ var configurator platform.DNSConfigurator // SetupDNSOverride configures the system DNS to use the DNS proxy on Linux/FreeBSD // Detects the DNS manager by reading /etc/resolv.conf and verifying runtime availability -func SetupDNSOverride(interfaceName string, dnsProxy *dns.DNSProxy) error { - if dnsProxy == nil { - return fmt.Errorf("DNS proxy is nil") - } - +func SetupDNSOverride(interfaceName string, proxyIp netip.Addr) error { var err error // Detect which DNS manager is in use by checking /etc/resolv.conf and runtime availability @@ -32,7 +27,7 @@ func SetupDNSOverride(interfaceName string, dnsProxy *dns.DNSProxy) error { configurator, err = platform.NewSystemdResolvedDNSConfigurator(interfaceName) if err == nil { logger.Info("Using systemd-resolved DNS configurator") - return setDNS(dnsProxy, configurator) + return setDNS(proxyIp, configurator) } logger.Warn("Failed to create systemd-resolved configurator: %v, falling back", err) @@ -40,7 +35,7 @@ func SetupDNSOverride(interfaceName string, dnsProxy *dns.DNSProxy) error { configurator, err = platform.NewNetworkManagerDNSConfigurator(interfaceName) if err == nil { logger.Info("Using NetworkManager DNS configurator") - return setDNS(dnsProxy, configurator) + return setDNS(proxyIp, configurator) } logger.Warn("Failed to create NetworkManager configurator: %v, falling back", err) @@ -48,7 +43,7 @@ func SetupDNSOverride(interfaceName string, dnsProxy *dns.DNSProxy) error { configurator, err = platform.NewResolvconfDNSConfigurator(interfaceName) if err == nil { logger.Info("Using resolvconf DNS configurator") - return setDNS(dnsProxy, configurator) + return setDNS(proxyIp, configurator) } logger.Warn("Failed to create resolvconf configurator: %v, falling back", err) } @@ -60,11 +55,11 @@ func SetupDNSOverride(interfaceName string, dnsProxy *dns.DNSProxy) error { } logger.Info("Using file-based DNS configurator") - return setDNS(dnsProxy, configurator) + return setDNS(proxyIp, configurator) } // setDNS is a helper function to set DNS and log the results -func setDNS(dnsProxy *dns.DNSProxy, conf platform.DNSConfigurator) error { +func setDNS(proxyIp netip.Addr, conf platform.DNSConfigurator) error { // Get current DNS servers before changing currentDNS, err := conf.GetCurrentDNS() if err != nil { @@ -75,7 +70,7 @@ func setDNS(dnsProxy *dns.DNSProxy, conf platform.DNSConfigurator) error { // Set new DNS servers to point to our proxy newDNS := []netip.Addr{ - dnsProxy.GetProxyIP(), + proxyIp, } logger.Info("Setting DNS servers to: %v", newDNS) diff --git a/dns/override/dns_override_windows.go b/dns/override/dns_override_windows.go index a564079..16bbca1 100644 --- a/dns/override/dns_override_windows.go +++ b/dns/override/dns_override_windows.go @@ -7,7 +7,6 @@ import ( "net/netip" "github.com/fosrl/newt/logger" - "github.com/fosrl/olm/dns" platform "github.com/fosrl/olm/dns/platform" ) @@ -15,11 +14,7 @@ var configurator platform.DNSConfigurator // SetupDNSOverride configures the system DNS to use the DNS proxy on Windows // Uses registry-based configuration (automatically extracts interface GUID) -func SetupDNSOverride(interfaceName string, dnsProxy *dns.DNSProxy) error { - if dnsProxy == nil { - return fmt.Errorf("DNS proxy is nil") - } - +func SetupDNSOverride(interfaceName string, proxyIp netip.Addr) error { var err error configurator, err = platform.NewWindowsDNSConfigurator(interfaceName) if err != nil { @@ -38,7 +33,7 @@ func SetupDNSOverride(interfaceName string, dnsProxy *dns.DNSProxy) error { // Set new DNS servers to point to our proxy newDNS := []netip.Addr{ - dnsProxy.GetProxyIP(), + proxyIp, } logger.Info("Setting DNS servers to: %v", newDNS) diff --git a/olm/olm.go b/olm/olm.go index 38d3324..4d12952 100644 --- a/olm/olm.go +++ b/olm/olm.go @@ -439,10 +439,12 @@ func StartTunnel(config TunnelConfig) { if config.OverrideDNS { // Set up DNS override to use our DNS proxy - if err := dnsOverride.SetupDNSOverride(interfaceName, dnsProxy); err != nil { + if err := dnsOverride.SetupDNSOverride(interfaceName, dnsProxy.GetProxyIP()); err != nil { logger.Error("Failed to setup DNS override: %v", err) return } + + network.SetDNSServers([]string{dnsProxy.GetProxyIP().String()}) } apiServer.SetRegistered(true) @@ -975,7 +977,7 @@ func AddDevice(fd uint32) error { // Here we replace the existing TUN device in the middle device with the new one middleDev.AddDevice(tdev) - + return nil }