0

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)
    })
  }
}

証明書 ( <ca>.ovpn の間) 情報を追加する方法とその設定方法がわかりません。ファイル .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> 

助けてくれてありがとう

4

2 に答える 2

1

これは少し遅れていますが、これらは2つの完全に異なるものであることを理解する必要があります.

この回答を書いている時点で NetworkExtension API (私は iOS 9.3.4 を持っています) は 2 つのプロトコルをサポートしています: - IKEv1 を使用する IPSec - AEP と証明書 (IKEv2)

サーバーは OpenVPN サーバーです。現在、OpenVVPN 用の API はありません (見つけた場合は教えてください)。最初の質問ですが、お使いの VPN サーバーは IKEv1 または v2 をサポートしていますか?

iOS 用のクライアント OpenVPN-connect がありますが、これは独自のクローズド ソースです。引き続きアプリ内から呼び出すことができ、次のようなポップアップがユーザーに表示されます。

    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

私自身はまだ iOS で IPSec クライアントをプログラムで実行しようとしていますが、これが私が学んだことです - なしの代わりに共有キー方式を使用することをお勧めします - 共有キーもキーチェーンに保存する必要があります - もし共有キーを使用し、ExtendedAuthentication も有効にします - 接続を開始する前に設定を保存してください

お役に立てれば

于 2016-08-25T20:44:25.807 に答える