gpt4 book ai didi

ios - Swift - 使用 NEVPNManager 连接到 VPN

转载 作者:行者123 更新时间:2023-11-30 13:53:49 26 4
gpt4 key购买 nike

我从 Android 获取 .ovpn 文件,我有用户名和密码,我应该连接到 VPN 服务器,但我不知道该怎么做。我尝试过这样的事情:

let manager = NEVPNManager.sharedManager()
manager.loadFromPreferencesWithCompletionHandler { (error) -> Void in
if manager.`protocol` == nil {
let newIPSec = NEVPNProtocolIKEv2()
newIPSec.serverAddress = "xxx.xxx.xxx.xxx"
newIPSec.username = "username"
let keychain = Keychain(service: "com.app.ios")
let data = keychain[data: "vpnpassword"]
newIPSec.passwordReference = data
newIPSec.authenticationMethod = NEVPNIKEAuthenticationMethod.None
newIPSec.disconnectOnSleep = false

manager.`protocol` = newIPSec
manager.enabled = true

manager.saveToPreferencesWithCompletionHandler({ (error) -> Void in
print(error)
})
}
}

我不知道如何添加证书(.ovpn 中的 <ca> 之间)信息以及如何设置它。文件 .ovpn 看起来像这样(我只是删除 <ca> 标记中的数据并更改服务器地址:

client
dev tun
proto udp
remote xx.xx.xx.xx 443
resolv-retry infinite
nobind
persist-key
persist-tun
verb 3

<auth-user-pass>
#username#
#userpass#
</auth-user-pass>

cipher AES-256-CBC
<ca>
-----BEGIN CERTIFICATE-----
xxx
-----END CERTIFICATE-----
</ca>

感谢您的帮助

最佳答案

这有点晚了,但你必须明白这是两个完全不同的事情。

在撰写此答案时,NetworkExtension API(我有 iOS 9.3.4)支持两种协议(protocol):- 使用 IKEv1 的 IPSec- AEP 和证书 (IKEv2)

您的服务器是 OpenVPN 服务器。目前没有 OpenVVPN 的 API(如果您发现任何 API,请告诉我)。那么第一个问题,您的 VPN Server 支持 IKEv1 还是 v2?

有适用于 iOS 的客户端 OpenVPN-connect,但它是专有的且封闭源代码。您仍然可以从应用程序内部调用它,它会弹出给用户,如下所示:```` swift func actConnectButtonPressed(发送者: AnyObject) { 让应用程序:UIApplication = UIApplication.sharedApplication()

    let alert = UIAlertController(title: "Warning", message: "OpenVPN Connect needs to be installed to process .ovpn configuration files on your device. Go to OpenVPN Connect page in AppStore?", preferredStyle: UIAlertControllerStyle.Alert)

alert.addAction(UIAlertAction(title: "Yes", style: .Default, handler: { (action: UIAlertAction!) in
app.openURL(NSURL(string: "https://itunes.apple.com/app/id590379981?mt=8")!)
}))

alert.addAction(UIAlertAction(title: "No", style: .Default, handler: { (action: UIAlertAction!) in
let server:Server = self.api.findServerByName(self.settings.loadValue(SettingsController.keyServerName, defValue: "") as! String)!
let protocolPort:Int = self.settings.loadValue(SettingsController.keyProtocolPort, defValue: 0) as! Int
app.openURL(NSURL(string: self.api.getOvpnConfigURL(server, proto: self.protocolAndPorts[protocolPort]))!)
}))
presentViewController(alert, animated: true, completion: nil)

}

```

此示例来自 safejump 客户端。看看这里 https://github.com/proxysh/Safejumper-for-iOS

我自己仍在尝试让 IPSec 客户端以编程方式在 iOS 上运行,这是我所学到的- 建议使用共享 key 方法而不是 None- 共享 key 也必须保存在钥匙串(keychain)中- 如果您使用共享 key ,则还要启用扩展身份验证- 确保在启动连接之前保存配置

希望这有帮助

关于ios - Swift - 使用 NEVPNManager 连接到 VPN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33923854/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com