From 73d9152fa0cb661db0348a1ac11dbbf998422a50 Mon Sep 17 00:00:00 2001 From: Davide De Rosa Date: Sat, 18 Mar 2023 14:02:20 +0100 Subject: [PATCH] Add DoH/DoT options Signed-off-by: Davide De Rosa --- .../WireGuardKit/InterfaceConfiguration.swift | 6 +++++- .../PacketTunnelSettingsGenerator.swift | 16 +++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/Sources/WireGuardKit/InterfaceConfiguration.swift b/Sources/WireGuardKit/InterfaceConfiguration.swift index d99d969..ad63b18 100644 --- a/Sources/WireGuardKit/InterfaceConfiguration.swift +++ b/Sources/WireGuardKit/InterfaceConfiguration.swift @@ -11,6 +11,8 @@ public struct InterfaceConfiguration { public var mtu: UInt16? public var dns = [DNSServer]() public var dnsSearch = [String]() + public var dnsHTTPSURL: URL? + public var dnsTLSServerName: String? public init(privateKey: PrivateKey) { self.privateKey = privateKey @@ -27,6 +29,8 @@ extension InterfaceConfiguration: Equatable { lhs.listenPort == rhs.listenPort && lhs.mtu == rhs.mtu && lhs.dns == rhs.dns && - lhs.dnsSearch == rhs.dnsSearch + lhs.dnsSearch == rhs.dnsSearch && + lhs.dnsHTTPSURL == rhs.dnsHTTPSURL && + lhs.dnsTLSServerName == rhs.dnsTLSServerName } } diff --git a/Sources/WireGuardKit/PacketTunnelSettingsGenerator.swift b/Sources/WireGuardKit/PacketTunnelSettingsGenerator.swift index 3658956..f4095bd 100644 --- a/Sources/WireGuardKit/PacketTunnelSettingsGenerator.swift +++ b/Sources/WireGuardKit/PacketTunnelSettingsGenerator.swift @@ -85,11 +85,25 @@ class PacketTunnelSettingsGenerator { if !tunnelConfiguration.interface.dnsSearch.isEmpty || !tunnelConfiguration.interface.dns.isEmpty { let dnsServerStrings = tunnelConfiguration.interface.dns.map { $0.stringRepresentation } - let dnsSettings = NEDNSSettings(servers: dnsServerStrings) + + let dnsSettings: NEDNSSettings + if let dnsHTTPSURL = tunnelConfiguration.interface.dnsHTTPSURL { + let dohSettings = NEDNSOverHTTPSSettings(servers: dnsServerStrings) + dohSettings.serverURL = dnsHTTPSURL + dnsSettings = dohSettings + } else if let dnsTLSServerName = tunnelConfiguration.interface.dnsTLSServerName { + let dotSettings = NEDNSOverTLSSettings(servers: dnsServerStrings) + dotSettings.serverName = dnsTLSServerName + dnsSettings = dotSettings + } else { + dnsSettings = NEDNSSettings(servers: dnsServerStrings) + } + dnsSettings.searchDomains = tunnelConfiguration.interface.dnsSearch if !tunnelConfiguration.interface.dns.isEmpty { dnsSettings.matchDomains = [""] // All DNS queries must first go through the tunnel's DNS } + networkSettings.dnsSettings = dnsSettings }