Skip to content

Commit acb8731

Browse files
committed
extension: use tunnel address from device
1 parent 2beef1d commit acb8731

2 files changed

Lines changed: 22 additions & 6 deletions

File tree

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,6 @@ fastlane/test_output
6565

6666
app/build
6767
app/build.xcarchive
68+
69+
app/URnetworkSdk/build
70+

app/extension/PacketTunnelProvider.swift

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)