Я пытаюсь изменить DNS-серверы с помощью NEDNSProxyManager следующим образом:
var dnsManager: NEDNSProxyManager = NEDNSProxyManager.shared()
private func enable() {
self.update {
self.dnsManager.localizedDescription = "QNEDNSProxy Test"
let proto = NEDNSProxyProviderProtocol()
proto.serverAddress = "Custom DNS Server"
proto.providerBundleIdentifier = self.tunnelBundleId
self.dnsManager.providerProtocol = proto
self.dnsManager.isEnabled = true
}
}
private func disable() {
self.update {
self.dnsManager.isEnabled = false
}
}
private func update(_ body: @escaping () -> Void) {
self.dnsManager.loadFromPreferences { error in
guard error == nil else {
NSLog("QNEDNSProxy.App: load error")
return
}
body()
self.dnsManager.saveToPreferences { error in
guard error == nil else {
NSLog("QNEDNSProxy.App: save error")
return
}
NSLog("QNEDNSProxy.App: saved")
}
}
}
Мое сетевое расширение выглядит так:
import NetworkExtension
класс DNSProxyProvider: NEDNSProxyProvider {
override init() {
NSLog("QNEDNSProxy.Provider: init")
super.init()
// +++ might want to set up KVO on `systemDNSSettings`
}
override func startProxy(options:[String: Any]? = nil, completionHandler: @escaping (Error?) -> Void) {
NSLog("QNEDNSProxy.Provider: start")
completionHandler(nil)
}
override func stopProxy(with reason: NEProviderStopReason, completionHandler: @escaping () -> Void) {
NSLog("QNEDNSProxy.Provider: stop")
completionHandler()
}
override func handleNewFlow(_ flow: NEAppProxyFlow) -> Bool {
NSLog("QNEDNSProxy.Provider: new flow (denied)")
return false
}
}
Я даю разрешения для DNS-прокси и получения журналов "QNEDNSProxy.App: сохранено", это означает, что моя конфигурация была сохранена, НО, методы staryProxy () или stopProxy () никогда не запускаются .
Мой список сетевых расширений выглядит следующим образом:
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key>
<string>DNSProxyManager</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>NSExtension</key>
<dict>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.networkextension.dns-proxy</string>
<key>NSExtensionPrincipalClass</key>
<string>$(PRODUCT_MODULE_NAME).DNSProxyProvider</string>
</dict>
Разрешения для расширения сети и цели приложения:
<dict>
<key>com.apple.developer.networking.networkextension</key>
<array>
<string>app-proxy-provider</string>
<string>content-filter-provider</string>
<string>dns-proxy</string>
<string>packet-tunnel-provider</string>
</array>
Но все же я не могу добиться этой работы, или я даже не знаю, сработает ли это просто для изменения DNS-сервера. Кто-то делал это раньше? Заранее спасибо