我正在尝试使用Swift
. 我已经创建了类VpnHandler
,并且正在使用钥匙串Swift
来保留钥匙串参考。我的代码如下所示:
import Foundation
import NetworkExtension
import KeychainSwift
final class VPNHandler {
let vpnManager = NEVPNManager.shared()
func initVPNTunnelProviderManager(serverAdress: String, remoteIdentifier : String, sharedSecred:String) {
let sharedKey = sharedSecred.data(using: .utf8)
let keychain = KeychainSwift()
guard let sharedKey = sharedKey else { return }
keychain.set(sharedKey, forKey: "shared_secret")
vpnManager.loadFromPreferences { error in
if let error = error {
print(error.localizedDescription)
return
}
let IKEv2Protocol = NEVPNProtocolIKEv2()
IKEv2Protocol.username = nil
IKEv2Protocol.localIdentifier = nil
IKEv2Protocol.serverAddress = serverAdress
IKEv2Protocol.remoteIdentifier = remoteIdentifier
IKEv2Protocol.authenticationMethod = .sharedSecret
IKEv2Protocol.disconnectOnSleep = false
IKEv2Protocol.useExtendedAuthentication = false
IKEv2Protocol.sharedSecretReference = keychain.getData("shared_secret", asReference: true)
IKEv2Protocol.passwordReference = nil
var rules = [NEOnDemandRule]()
let rule = NEOnDemandRuleConnect()
rule.interfaceTypeMatch = .any
rules.append(rule)
self.vpnManager.localizedDescription = "My VPN"
self.vpnManager.protocolConfiguration = IKEv2Protocol
self.vpnManager.onDemandRules = rules
self.vpnManager.isOnDemandEnabled = true
self.vpnManager.isEnabled = true
print("SAVE TO PREFERENCES...")
self.vpnManager.saveToPreferences { error in
if (error != nil) {
print(error!)
return
}
print("CALL LOAD TO PREFERENCES AGAIN...")
self.vpnManager.loadFromPreferences { error in
if let error = error {
print(error.localizedDescription)
return
}
do {
try self.vpnManager.connection.startVPNTunnel()
print("Starting VPN...")
} catch let error {
print("can't connect VPN'")
print(error.localizedDescription)
}
}
}
}
}
}
当我调用该函数initVPNTunnelProviderManager
时,会创建电话设置中的 vpn 配置。我们的应用程序开始连接到 vpn,但随后立即断开连接。当我们在电话设置中连接 vpn 配置时,它正在工作。我不知道问题是什么。
任何帮助表示赞赏。
提前致谢