@@ -528,18 +528,31 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
528528 let networkSettings = NEPacketTunnelNetworkSettings ( tunnelRemoteAddress: " 127.0.0.1 " )
529529
530530 // IPv4 Configuration
531- let ipv4Settings = NEIPv4Settings ( addresses: [ " 169.254.2.1 " ] , subnetMasks: [ " 255.255.255.0 " ] )
531+ let tunnelLocalAddress = self . device? . tunnelLocalAddress ( ) ?? " 169.254.2.1 "
532+ let ipv4Settings = NEIPv4Settings ( addresses: [ tunnelLocalAddress] , subnetMasks: [ " 255.255.255.0 " ] )
532533 ipv4Settings. includedRoutes = [ NEIPv4Route . default ( ) ]
533534 networkSettings. ipv4Settings = ipv4Settings
534535
535536 let ipv6Settings = NEIPv6Settings ( )
536537 networkSettings. ipv6Settings = ipv6Settings
537538
538- // DNS Settings
539- // let dnsSettings = NEDNSSettings(servers: ["1.1.1.1", "8.8.8.8", "9.9.9.9"])
540- // use settings from connect/net_http_doh
541- let dnsSettings = NEDNSOverHTTPSSettings ( servers: [ " 1.1.1.1 " , " 8.8.8.8 " , " 9.9.9.9 " ] )
542- dnsSettings. serverURL = URL ( string: " https://1.1.1.1/dns-query " )
539+ // DNS from the SDK device's tunnel DNS setting (default plain 1.1.1.1). Plain
540+ // :53 lets the UpgradeMux intercept and upgrade it; a DoH setting is applied at
541+ // the OS level and bypasses the mux.
542+ let tunnelDns = self . device? . tunnelDnsSetting ( )
543+ let dnsServer = ( tunnelDns? . server. isEmpty == false ) ? tunnelDns!. server : " 1.1.1.1 "
544+ let dnsSettings : NEDNSSettings
545+ if let tunnelDns = tunnelDns, tunnelDns. doh, !tunnelDns. dohUrl. isEmpty {
546+ let dohSettings = NEDNSOverHTTPSSettings ( servers: [ dnsServer] )
547+ dohSettings. serverURL = URL ( string: tunnelDns. dohUrl)
548+ dnsSettings = dohSettings
549+ } else {
550+ dnsSettings = NEDNSSettings ( servers: [ dnsServer] )
551+ }
552+ // route every DNS query to the tunnel resolver (empty string matches all
553+ // domains). without this the OS may not send :53 queries into the tunnel, so
554+ // the UpgradeMux never sees them and resolution fails.
555+ dnsSettings. matchDomains = [ " " ]
543556 networkSettings. dnsSettings = dnsSettings
544557
545558 // default URnetwork MTU
0 commit comments