Bartu Akman
Bartu Akman

Reputation: 195

openVPN Network extension packet tunnel provider not start to VPN tunnel

Open vpn not working properly. After configureVPN function start connection.startVpn part is run but nothing happened.But I would put in below

I also checked PacketTunnelProvider plist everthing seems perfect.

readFile function returns Data that receive from ovpn file.

Network extension entitlements also appended. Any help would be great.

<dict>
    <key>NSExtensionPointIdentifier</key>
    <string>com.apple.networkextension.packet-tunnel</string>
    <key>NSExtensionPrincipalClass</key>
    <string>$(PRODUCT_MODULE_NAME).PacketTunnelProvider</string>
</dict>

class ViewController: UIViewController {

     var providerManager: NETunnelProviderManager!

     override func viewDidLoad() {
         super.viewDidLoad()
         self.loadProviderManager {
             self.configureVPN(serverAddress: "127.0.0.1", username: "uid", password: "pw123")
         }
      }

     func loadProviderManager(completion:@escaping () -> Void) {
        NETunnelProviderManager.loadAllFromPreferences { (managers, error) in
            if error == nil {
                self.providerManager = managers?.first ?? NETunnelProviderManager()
                completion()
            }
        }
     }


     func configureVPN(serverAddress: String, username: String, password: String) {
       guard let configData = self.readFile(path: "serverfile.ovpn") else { return }
        print("configData\(configData)")
       self.providerManager?.loadFromPreferences { error in
          if error == nil {
             let tunnelProtocol = NETunnelProviderProtocol()
             tunnelProtocol.username = username
             tunnelProtocol.serverAddress = serverAddress
             tunnelProtocol.providerBundleIdentifier = "com.bgnmobi.openDeneme.Packet" // bundle id of the network extension target
             tunnelProtocol.providerConfiguration = ["ovpn": configData, "username": username, "password": password]
             tunnelProtocol.disconnectOnSleep = false
             self.providerManager.protocolConfiguration = tunnelProtocol
             self.providerManager.localizedDescription = "GuardillaVPN" // the title of the VPN profile which will appear on Settings
             self.providerManager.isEnabled = true
             self.providerManager.saveToPreferences(completionHandler: { (error) in
                   if error == nil  {
                      self.providerManager.loadFromPreferences(completionHandler: { (error) in
                          do {
                            print("aSDFs34dasdsadsa")

                            try self.providerManager.connection.startVPNTunnel() // starts the VPN tunnel.
                          } catch let error {
                              print(error.localizedDescription)
                           }
                      })
                   } else {
                    print("asdasdsadsa")
                          print(error)
                }
             })
           }

         }
     }


  func readFile(path: String) -> Data? {
     let mypath = Bundle.main.path(forResource: "serverfile", ofType: ".ovpn")

    if let dir = FileManager.default.urls(for: .downloadsDirectory, in: .userDomainMask).first{
        let fileURL = dir.appendingPathComponent(mypath!)
     //reading
    do{
        let text2 = try String(contentsOfFile: mypath!,encoding: String.Encoding.utf8)
        print(text2)
        let gerekliURL = URL(fileURLWithPath: mypath!)
        print(gerekliURL)
        return try Data(contentsOf: gerekliURL, options: .uncached)
       }catch{
    //    print("can t read")  
    }
    }

    return nil

  }
 }

Upvotes: 2

Views: 1341

Answers (1)

Bartu Akman
Bartu Akman

Reputation: 195

These parts would be match with your Target file. Be carefull in that point. That was a problem in my case and probably yours too.

private static let appGroup = "group.com.project.examplevpn"

private static let tunnelIdentifier = "com.project.examplevpn.Extension"
    

Upvotes: 1

Related Questions